package com.iamberry.rst.controllers.pts; import com.iamberry.rst.core.pts.*; import com.iamberry.rst.core.tools.QRCJson; import com.iamberry.rst.core.tools.WeixinUtil; import com.iamberry.rst.faces.pts.*; import com.iamberry.wechat.tools.NameUtils; import com.iamberry.wechat.tools.ResponseJson; import com.iamberry.wechat.tools.ResultInfo; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; /** * Created by LJK on 2017/8/29. */ @Controller @RequestMapping("/mcahine") public class MachineController { @Autowired private ProduceService produceService; @Autowired private MachineService machineService; @Autowired private DeviceService deviceService; @Autowired private PtsEmployeeService ptsEmployeeService; @Autowired private MachineLogsService machineLogsService; @ResponseBody @RequestMapping("/uploadProcessOptions") public ResponseJson uploadProcessOptions(HttpServletRequest request){ ResponseJson rj = new ResponseJson(); String nodeList = request.getParameter("nodeList"); //获取员工id if(nodeList == null || nodeList.equals("")){ rj.setResultCode(500); rj.setResultMsg("200"); rj.setResultMsg("ERROR"); return rj; } JSONObject query = JSONObject.fromObject(nodeList); Integer employeeId = query.getInt("employeeId");//员工id String produceNo = query.getString("produceId");//产品编号 String nfcId = query.getString("nfcId");//NFCID(卡片id) JSONArray nodes = query.getJSONArray("nodes");//选项集合(包含一个或多个工序选项,详情见示例) //根据卡片id与生产时间判断数据库是否存在相同的数据 JSONObject machineJsonObject = nodes.getJSONObject(0); String ProcessTime = machineJsonObject.getString("logsProcessTime"); //工序执行时间 (时间戳) Date ProcessDate = timeConversions(ProcessTime); PtsMachine machine = new PtsMachine(); machine.setMachineNfcId(nfcId); machine.setMachineCreateTime(ProcessDate); Integer ishave = machineService.getMachineIsHave(machine); if(ishave > 0){ rj.setResultCode(500); rj.setResultMsg("500"); rj.setResultMsg("此卡片内容已生成二维码"); return rj; } Produce produce = produceService.getProduce(produceNo);//根据产品编号获取产品信息 //生成条形码,二维码 String berQrcode = generationBarCode(produce); String json = String.format(NameUtils.QR_LIMIT_STR_SCENE, ResultInfo.barCodePrefix+berQrcode); QRCJson qrc = WeixinUtil.createQrcode(json); PtsMachine ptsMachine = new PtsMachine(); if (!(qrc == null || qrc.getUrl() == null || qrc.getUrl().isEmpty())) { ptsMachine.setMachineQrcode(qrc.getUrl());//二维码 ptsMachine.setMachineBarcode(berQrcode);//条形码 ptsMachine.setMachineStatus(1);//机器状态 ptsMachine.setMachineProducedTime(new Date());//生产时间 ptsMachine.setMachineIsPrint(1);//是否打印1:未打印2:已打印 ptsMachine.setMachineCompoundImg("合成的图片url"); ptsMachine.setMachineProcessState(1);//生成流程状态1.正常2.异常 ptsMachine.setMachineCreateTime(new Date());//创建时间 ptsMachine.setMachineProduceType(produce.getProduceType());//产品类型 ptsMachine.setMachineNfcId(nfcId); ptsMachine.setMachineHardwareVersion("30"); ptsMachine.setMachineSoftwareVersion("30"); ptsMachine.setMachineProduceId(1); machineService.addMachine(ptsMachine); } boolean isAbnormality = true;//状态是否异常 PtsMachineLogs ptsMachineLogs = new PtsMachineLogs(); for(int i = 0;i< nodes.size();i++){ JSONObject jsonObject = nodes.getJSONObject(i); String processNo = jsonObject.getString("processId"); //工序编号 String nodeNo = jsonObject.getString("nodeId"); //工序选项编号 String logsProcessTime = jsonObject.getString("logsProcessTime"); //工序执行时间 (时间戳) Date logsProcessDate = timeConversions(logsProcessTime); /*Date logsProcessDate = new Date(logsProcessTime);*/ ProduceProcess produceProcess = produceService.getProduceProcess(produce.getProduceId(),processNo); ProcessNode processNode = produceService.getprocessNode(produceProcess.getProcessId(),nodeNo); PtsDevice ptsDevice = deviceService.getDevice(produceProcess.getDriveId()); PtsEmployee ptsEmployee =ptsEmployeeService.getPtsEmployeeById(produceProcess.getEmployeeId()); ptsMachineLogs.setDeviceId(produceProcess.getDriveId()); ptsMachineLogs.setEmployeeId(produceProcess.getEmployeeId()); ptsMachineLogs.setProduceId(produce.getProduceId()); ptsMachineLogs.setProcessId(produceProcess.getProcessId()); ptsMachineLogs.setMachineId(ptsMachine.getMachineId()); ptsMachineLogs.setEmployeeName(ptsEmployee.getEmployeeName()); ptsMachineLogs.setProduceName(produce.getProduceName()); ptsMachineLogs.setProcessName(produceProcess.getProcessName()); ptsMachineLogs.setDeviceName(ptsDevice.getDeviceName()); ptsMachineLogs.setProcessNodeId(processNode.getNodeId()); ptsMachineLogs.setProcessNodeName(processNode.getNodeDes()); if(i == 0){//如果当前循环的是第一条数据则排序必须是1,否则为异常 if(produceProcess.getProcessSort() == 1){ if(processNode.getNodeStatus() == 0){//工序选项状态为异常则机器表状态也是异常 isAbnormality = false; } ptsMachineLogs.setLogsProcessStatus(processNode.getNodeStatus()); }else{ ptsMachineLogs.setLogsProcessStatus(0); isAbnormality = false; } }else{//默认为正常 ptsMachineLogs.setLogsProcessStatus(processNode.getNodeStatus()); } ptsMachineLogs.setLogsProcessPrompt(processNode.getNodeStatus() == 0?"检查不通过": null); ptsMachineLogs.setLogsProcessTime(logsProcessDate); ptsMachineLogs.setLogsCreateTime(new Date()); //根据上一条工序选项信息判断当前工序是否正常,如果当前为修理工序则忽略,如果上一条为修理工序则查询上上一条 if(i > 0){ int num = 0; ProduceProcess produceProcess2 = null;//当前工序的上一条非修理工序 JSONObject jsonObject2;//上一级工序信息 String processNo2 = null;//上一级工序编号 //先判断当前的上一次是否是修理工序,如果不是则不用执行下面的循环,否则需要循环判断 jsonObject2 = nodes.getJSONObject(i-1); if(jsonObject2 != null){ processNo2 = jsonObject2.getString("processId"); produceProcess2 = produceService.getProduceProcess(produce.getProduceId(),processNo2); //判断当前工序是否是修理工序,如果是,则修改上一条为次品 if(produceProcess.getProcessType() == 2){ ptsMachineLogs.setLogsErrorType(2);//异常类型 1:流程异常 2:次品异常 ptsMachineLogs.setLogsProcessPrompt("次品异常"); machineLogsService.updateMachineLogs(ptsMachineLogs); isAbnormality = false; ptsMachineLogs.setLogsId(null); ptsMachineLogs.setLogsErrorType(null); ptsMachineLogs.setLogsProcessPrompt(null); }else{ //判断是否是修理工序 1:生产工序 2:修理工序 if(produceProcess2.getProcessType() == 1){ if(produceProcess.getProcessSort() - produceProcess2.getProcessSort() != 1){ ptsMachineLogs.setLogsProcessStatus(0); ptsMachineLogs.setLogsErrorType(1);//异常类型 1:流程异常 2:次品异常 ptsMachineLogs.setLogsProcessPrompt("流程异常"); isAbnormality = false; } }else{ for(int j = i-1;j<= i-1;j--){ if(num == i){ break;//只能循环 i 次,超出则跳出当前循环 } jsonObject2 = nodes.getJSONObject(j); if(jsonObject2 != null){ processNo2 = jsonObject2.getString("processId"); produceProcess2 = produceService.getProduceProcess(produce.getProduceId(),processNo2); if(produceProcess2.getProcessType() == 1){//判断是否是修理工序 1:生产工序 2:修理工序 if(produceProcess.getProcessSort() > produceProcess2.getProcessSort()){ ptsMachineLogs.setLogsProcessStatus(0); ptsMachineLogs.setLogsErrorType(1);//异常类型 1:流程异常 2:次品异常 ptsMachineLogs.setLogsProcessPrompt("流程异常"); isAbnormality = false; } break; } } num++; } } } } } //执行添加日志操作 machineLogsService.addMachineLogs(ptsMachineLogs); ptsMachineLogs.setLogsErrorType(null);//还原为默认值 } //修改机器信息 PtsMachine ptsMachine2 = new PtsMachine(); ptsMachine2.setMachineId(ptsMachine.getMachineId()); if(!isAbnormality){ ptsMachine2.setMachineProcessState(2);//2表示机器生产过程中出现异常 } ptsMachine2.setMachineUpdateTime(new Date()); ptsMachine2.setMachineProduceId(produce.getProduceId()); machineService.updateMachine(ptsMachine2); //截取条形码尾号(4位) rj.addResponseKeyValue("barcodeTail",berQrcode.substring(berQrcode.length()-4, berQrcode.length())); return rj; } private static Date timeConversions(String time){ if(time == null || time.equals("")){ return new Date(); } //08311112 Calendar date = Calendar.getInstance(); String year = String.valueOf(date.get(Calendar.YEAR));//年 String months = null;//月 String sky = null;//天 String when = null;//时 String subdivision = null;//分 months = time.substring(0,2); sky = time.substring(2,4); when = time.substring(4,6); subdivision = time.substring(6,8); time = year + "-" + months + "-" + sky + " " + when + ":" + subdivision; Date dates = new Date(); try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); dates = sdf.parse(time); } catch (ParseException e) { System.out.println(e.getMessage()); } return dates; } private String productModel = "1X";//产品型号 private String productFeatures = "A";//产品特性 private String softwareVersion = "30";//软件版本 //生成条形码 public String generationBarCode(Produce produce){ java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM"); java.util.Date currTime = new java.util.Date(); String curTime = formatter.format(currTime); Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; //获取当前月机器总数 Integer number = machineService.selectMonthCount(curTime); String num = null; switch(String.valueOf(number+1).length()){ case 0: num = "0001"; break; case 1: num = "000"+String.valueOf(number); break; case 2: num = "00"+String.valueOf(number); break; case 3: num = "0"+String.valueOf(number); break; case 4: num = String.valueOf(number); break; } String months = String.valueOf(month); if(month < 10){ months = "0"+months; } productModel = produce.getProduceModel(); productFeatures = produce.getProduceFeature(); //拼接 String barcode = productModel+productFeatures+softwareVersion+String.valueOf(year).substring(2,4)+months+num; return barcode; } }