MachineController.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package com.iamberry.rst.controllers.pts;
  2. import com.iamberry.rst.core.pts.*;
  3. import com.iamberry.rst.core.tools.QRCJson;
  4. import com.iamberry.rst.core.tools.WeixinUtil;
  5. import com.iamberry.rst.faces.pts.*;
  6. import com.iamberry.wechat.tools.NameUtils;
  7. import com.iamberry.wechat.tools.ResponseJson;
  8. import com.iamberry.wechat.tools.ResultInfo;
  9. import net.sf.json.JSONArray;
  10. import net.sf.json.JSONObject;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Controller;
  13. import org.springframework.web.bind.annotation.RequestBody;
  14. import org.springframework.web.bind.annotation.RequestMapping;
  15. import org.springframework.web.bind.annotation.ResponseBody;
  16. import javax.servlet.http.HttpServletRequest;
  17. import java.text.ParseException;
  18. import java.text.SimpleDateFormat;
  19. import java.util.Calendar;
  20. import java.util.Date;
  21. import java.util.Iterator;
  22. import java.util.List;
  23. /**
  24. * Created by LJK on 2017/8/29.
  25. */
  26. @Controller
  27. @RequestMapping("/mcahine")
  28. public class MachineController {
  29. @Autowired
  30. private ProduceService produceService;
  31. @Autowired
  32. private MachineService machineService;
  33. @Autowired
  34. private DeviceService deviceService;
  35. @Autowired
  36. private PtsEmployeeService ptsEmployeeService;
  37. @Autowired
  38. private MachineLogsService machineLogsService;
  39. @Autowired
  40. private PtsBatchService ptsBatchService;
  41. @ResponseBody
  42. @RequestMapping("/uploadProcessOptions")
  43. public ResponseJson uploadProcessOptions(HttpServletRequest request){
  44. ResponseJson rj = new ResponseJson();
  45. String nodeList = request.getParameter("nodeList"); //获取员工id
  46. if(nodeList == null || nodeList.equals("")){
  47. rj.setResultCode(500);
  48. rj.setResultMsg("200");
  49. rj.setResultMsg("ERROR");
  50. return rj;
  51. }
  52. JSONObject query = JSONObject.fromObject(nodeList);
  53. Integer employeeId = query.getInt("employeeId");//员工id
  54. String produceNo = query.getString("produceId");//产品编号
  55. String nfcId = query.getString("nfcId");//NFCID(卡片id)
  56. JSONArray nodes = query.getJSONArray("nodes");//选项集合(包含一个或多个工序选项,详情见示例)
  57. //根据卡片id与生产时间判断数据库是否存在相同的数据
  58. JSONObject machineJsonObject = nodes.getJSONObject(0);
  59. String ProcessTime = machineJsonObject.getString("logsProcessTime"); //工序执行时间 (时间戳)
  60. Date ProcessDate = timeConversions(ProcessTime);
  61. PtsMachine machine = new PtsMachine();
  62. machine.setMachineNfcId(nfcId);
  63. machine.setMachineCreateTime(ProcessDate);
  64. Integer ishave = machineService.getMachineIsHave(machine);
  65. if(ishave > 0){
  66. rj.setResultCode(500);
  67. rj.setResultMsg("500");
  68. rj.setResultMsg("此卡片内容已生成二维码");
  69. return rj;
  70. }
  71. Produce produce = produceService.getProduce(produceNo);//根据产品编号获取产品信息
  72. /*根据员工id,获取拉线,再将拉线存入机器表 */
  73. PtsEmployee employee = new PtsEmployee();
  74. employee.setEmployeeId(employeeId);
  75. employee = ptsEmployeeService.getPtsEmployee(employee);
  76. String employeeLine = employee.getEmployeeLine();
  77. /*获取当前产品使用的批次 */
  78. PtsBatch ptsBatch = ptsBatchService.getUseBatch(produce.getProduceId());
  79. if(ptsBatch == null){
  80. rj.setResultCode(500);
  81. rj.setResultMsg("500");
  82. rj.setResultMsg("系统中没有该产品正在使用的批次");
  83. return rj;
  84. }
  85. //生成条形码,二维码
  86. String berQrcode = generationBarCode(produce);
  87. String json = String.format(NameUtils.QR_LIMIT_STR_SCENE, ResultInfo.barCodePrefix+berQrcode);
  88. QRCJson qrc = WeixinUtil.createQrcode(json);
  89. PtsMachine ptsMachine = new PtsMachine();
  90. if (!(qrc == null || qrc.getUrl() == null || qrc.getUrl().isEmpty())) {
  91. ptsMachine.setMachineQrcode(qrc.getUrl());//二维码
  92. ptsMachine.setMachineBarcode(berQrcode);//条形码
  93. ptsMachine.setMachineStatus(1);//机器状态
  94. ptsMachine.setMachineProducedTime(new Date());//生产时间
  95. ptsMachine.setMachineIsPrint(1);//是否打印1:未打印2:已打印
  96. ptsMachine.setMachineCompoundImg("合成的图片url");
  97. ptsMachine.setMachineProcessState(1);//生成流程状态1.正常2.异常
  98. ptsMachine.setMachineCreateTime(new Date());//创建时间
  99. ptsMachine.setMachineProduceType(produce.getProduceType());//产品类型
  100. ptsMachine.setMachineNfcId(nfcId);
  101. ptsMachine.setMachineHardwareVersion("30");
  102. ptsMachine.setMachineSoftwareVersion("30");
  103. ptsMachine.setMachineProduceId(produce.getProduceId());
  104. ptsMachine.setMachineBomId(0);//默认为0
  105. ptsMachine.setMachineBatchId(0);//默认为0
  106. ptsMachine.setMachineIsRetreading(2);
  107. ptsMachine.setMachineLine(employeeLine); //拉线信息
  108. ptsMachine.setMachineBatchId(ptsBatch.getBatchId()); //批次id
  109. ptsMachine.setMachineBomId(ptsBatch.getBomId()); //bom单id
  110. machineService.addMachine(ptsMachine);
  111. }
  112. boolean isAbnormality = true;//状态是否异常
  113. PtsMachineLogs ptsMachineLogs = new PtsMachineLogs();
  114. for(int i = 0;i< nodes.size();i++){
  115. JSONObject jsonObject = nodes.getJSONObject(i);
  116. String processNo = jsonObject.getString("processId"); //工序编号
  117. String nodeNo = jsonObject.getString("nodeId"); //工序选项编号
  118. String logsProcessTime = jsonObject.getString("logsProcessTime"); //工序执行时间 (时间戳)
  119. Date logsProcessDate = timeConversions(logsProcessTime);
  120. /*Date logsProcessDate = new Date(logsProcessTime);*/
  121. ProduceProcess produceProcess = produceService.getProduceProcess(produce.getProduceId(),processNo);
  122. ProcessNode processNode = produceService.getprocessNode(produceProcess.getProcessId(),nodeNo);
  123. PtsDevice ptsDevice = deviceService.getDevice(produceProcess.getDriveId());
  124. PtsEmployee ptsEmployee =ptsEmployeeService.getPtsEmployeeById(produceProcess.getEmployeeId());
  125. ptsMachineLogs.setDeviceId(produceProcess.getDriveId());
  126. ptsMachineLogs.setEmployeeId(produceProcess.getEmployeeId());
  127. ptsMachineLogs.setProduceId(produce.getProduceId());
  128. ptsMachineLogs.setProcessId(produceProcess.getProcessId());
  129. ptsMachineLogs.setMachineId(ptsMachine.getMachineId());
  130. ptsMachineLogs.setEmployeeName(ptsEmployee.getEmployeeName());
  131. ptsMachineLogs.setProduceName(produce.getProduceName());
  132. ptsMachineLogs.setProcessName(produceProcess.getProcessName());
  133. ptsMachineLogs.setDeviceName(ptsDevice.getDeviceName());
  134. ptsMachineLogs.setProcessNodeId(processNode.getNodeId());
  135. ptsMachineLogs.setProcessNodeName(processNode.getNodeDes());
  136. if(i == 0){//如果当前循环的是第一条数据则排序必须是1,否则为异常
  137. if(produceProcess.getProcessSort() == 1){
  138. if(processNode.getNodeStatus() == 0){//工序选项状态为异常则机器表状态也是异常
  139. isAbnormality = false;
  140. }
  141. ptsMachineLogs.setLogsProcessStatus(processNode.getNodeStatus());
  142. }else{
  143. ptsMachineLogs.setLogsProcessStatus(0);
  144. isAbnormality = false;
  145. }
  146. }else{//默认为正常
  147. ptsMachineLogs.setLogsProcessStatus(processNode.getNodeStatus());
  148. }
  149. ptsMachineLogs.setLogsProcessPrompt(processNode.getNodeStatus() == 0?"检查不通过": null);
  150. ptsMachineLogs.setLogsProcessTime(logsProcessDate);
  151. ptsMachineLogs.setLogsCreateTime(new Date());
  152. //根据上一条工序选项信息判断当前工序是否正常,如果当前为修理工序则忽略,如果上一条为修理工序则查询上上一条
  153. if(i > 0){
  154. int num = 0;
  155. ProduceProcess produceProcess2 = null;//当前工序的上一条非修理工序
  156. JSONObject jsonObject2;//上一级工序信息
  157. String processNo2 = null;//上一级工序编号
  158. //先判断当前的上一次是否是修理工序,如果不是则不用执行下面的循环,否则需要循环判断
  159. jsonObject2 = nodes.getJSONObject(i-1);
  160. if(jsonObject2 != null){
  161. processNo2 = jsonObject2.getString("processId");
  162. produceProcess2 = produceService.getProduceProcess(produce.getProduceId(),processNo2);
  163. //判断当前工序是否是修理工序,如果是,则修改上一条为次品
  164. if(produceProcess.getProcessType() == 2){
  165. ptsMachineLogs.setLogsErrorType(2);//异常类型 1:流程异常 2:次品异常
  166. ptsMachineLogs.setLogsProcessPrompt("次品异常");
  167. machineLogsService.updateMachineLogs(ptsMachineLogs);
  168. isAbnormality = false;
  169. ptsMachineLogs.setLogsId(null);
  170. ptsMachineLogs.setLogsErrorType(null);
  171. ptsMachineLogs.setLogsProcessPrompt(null);
  172. }else{
  173. //判断是否是修理工序 1:生产工序 2:修理工序
  174. if(produceProcess2.getProcessType() == 1){
  175. if(produceProcess.getProcessSort() - produceProcess2.getProcessSort() != 1){
  176. ptsMachineLogs.setLogsProcessStatus(0);
  177. ptsMachineLogs.setLogsErrorType(1);//异常类型 1:流程异常 2:次品异常
  178. ptsMachineLogs.setLogsProcessPrompt("流程异常");
  179. isAbnormality = false;
  180. }
  181. }else{
  182. for(int j = i-1;j<= i-1;j--){
  183. if(num == i){
  184. break;//只能循环 i 次,超出则跳出当前循环
  185. }
  186. jsonObject2 = nodes.getJSONObject(j);
  187. if(jsonObject2 != null){
  188. processNo2 = jsonObject2.getString("processId");
  189. produceProcess2 = produceService.getProduceProcess(produce.getProduceId(),processNo2);
  190. if(produceProcess2.getProcessType() == 1){//判断是否是修理工序 1:生产工序 2:修理工序
  191. if(produceProcess.getProcessSort() > produceProcess2.getProcessSort()){
  192. ptsMachineLogs.setLogsProcessStatus(0);
  193. ptsMachineLogs.setLogsErrorType(1);//异常类型 1:流程异常 2:次品异常
  194. ptsMachineLogs.setLogsProcessPrompt("流程异常");
  195. isAbnormality = false;
  196. }
  197. break;
  198. }
  199. }
  200. num++;
  201. }
  202. }
  203. }
  204. }
  205. }
  206. //执行添加日志操作
  207. machineLogsService.addMachineLogs(ptsMachineLogs);
  208. ptsMachineLogs.setLogsErrorType(null);//还原为默认值
  209. }
  210. //修改机器信息
  211. PtsMachine ptsMachine2 = new PtsMachine();
  212. ptsMachine2.setMachineId(ptsMachine.getMachineId());
  213. if(!isAbnormality){
  214. ptsMachine2.setMachineProcessState(2);//2表示机器生产过程中出现异常
  215. }
  216. ptsMachine2.setMachineUpdateTime(new Date());
  217. ptsMachine2.setMachineProduceId(produce.getProduceId());
  218. machineService.updateMachine(ptsMachine2);
  219. //截取条形码尾号(4位)
  220. rj.addResponseKeyValue("barcodeTail",berQrcode.substring(berQrcode.length()-4, berQrcode.length()));
  221. return rj;
  222. }
  223. private static Date timeConversions(String time){
  224. if(time == null || time.equals("")){
  225. return new Date();
  226. }
  227. //08311112
  228. Calendar date = Calendar.getInstance();
  229. String year = String.valueOf(date.get(Calendar.YEAR));//年
  230. String months = null;//月
  231. String sky = null;//天
  232. String when = null;//时
  233. String subdivision = null;//分
  234. months = time.substring(0,2);
  235. sky = time.substring(2,4);
  236. when = time.substring(4,6);
  237. subdivision = time.substring(6,8);
  238. time = year + "-" + months + "-" + sky + " " + when + ":" + subdivision;
  239. Date dates = new Date();
  240. try
  241. {
  242. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  243. dates = sdf.parse(time);
  244. }
  245. catch (ParseException e)
  246. {
  247. System.out.println(e.getMessage());
  248. }
  249. return dates;
  250. }
  251. private String productModel = "1X";//产品型号
  252. private String productFeatures = "A";//产品特性
  253. private String softwareVersion = "30";//软件版本
  254. //生成条形码
  255. public String generationBarCode(Produce produce){
  256. java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM");
  257. java.util.Date currTime = new java.util.Date();
  258. String curTime = formatter.format(currTime);
  259. Calendar cal = Calendar.getInstance();
  260. int year = cal.get(Calendar.YEAR);
  261. int month = cal.get(Calendar.MONTH) + 1;
  262. //获取当前月机器总数
  263. Integer number = machineService.selectMonthCount(curTime);
  264. String num = null;
  265. switch(String.valueOf(number+1).length()){
  266. case 0:
  267. num = "0001";
  268. break;
  269. case 1:
  270. num = "000"+String.valueOf(number);
  271. break;
  272. case 2:
  273. num = "00"+String.valueOf(number);
  274. break;
  275. case 3:
  276. num = "0"+String.valueOf(number);
  277. break;
  278. case 4:
  279. num = String.valueOf(number);
  280. break;
  281. }
  282. String months = String.valueOf(month);
  283. if(month < 10){
  284. months = "0"+months;
  285. }
  286. productModel = produce.getProduceModel();
  287. productFeatures = produce.getProduceFeature();
  288. //拼接
  289. String barcode = productModel+productFeatures+softwareVersion+String.valueOf(year).substring(2,4)+months+num;
  290. return barcode;
  291. }
  292. }