package com.example.erp.service.pp; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.example.erp.common.Constants; import com.example.erp.common.Result; import com.example.erp.entity.pp.FlowCard; import com.example.erp.entity.sd.*; import com.example.erp.entity.userInfo.Log; import com.example.erp.entity.userInfo.SysError; import com.example.erp.exception.ServiceException; import com.example.erp.mapper.pp.FlowCardMapper; import com.example.erp.mapper.pp.ReportingWorkMapper; import com.example.erp.mapper.sd.*; import com.example.erp.service.userInfo.LogService; import com.example.erp.service.userInfo.SysErrorService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.util.List; import java.util.Map; import com.fasterxml.jackson.core.type.TypeReference; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.io.IOException; import java.sql.Date; import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; import static com.example.erp.service.sd.OrderService.getOrderProcessDetails; @Service @DS("pp") public class FlowCardService { final FlowCardMapper flowCardMapper; final OrderGlassDetailMapper orderGlassDetailMapper; final OrderProcessDetailMapper orderProcessDetailMapper; final LogService logService; private final ProductMapper productMapper; private final ProductDetailMapper productDetailMapper; private final OrderDetailMapper orderDetailMapper; private final OrderMapper orderMapper; private final ReportingWorkMapper reportingWorkMapper; @Autowired SysErrorService sysErrorService; public FlowCardService(FlowCardMapper flowCardMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, LogService logService, ProductMapper productMapper, ProductDetailMapper productDetailMapper, OrderDetailMapper orderDetailMapper, OrderMapper orderMapper,ReportingWorkMapper reportingWorkMapper) { this.flowCardMapper = flowCardMapper; this.orderGlassDetailMapper = orderGlassDetailMapper; this.orderProcessDetailMapper = orderProcessDetailMapper; this.logService = logService; this.productMapper = productMapper; this.productDetailMapper = productDetailMapper; this.orderDetailMapper = orderDetailMapper; this.orderMapper = orderMapper; this.reportingWorkMapper = reportingWorkMapper; } //将层数字符串用逗号隔开 public static String splitTechNumbers(String input) { if (input == null || input.isEmpty()) { return ""; } List result = new ArrayList<>(); for (int i = 0; i < input.length(); i++) { // 特殊处理 "10" if (input.charAt(i) == '1' && i + 1 < input.length() && input.charAt(i + 1) == '0') { result.add("10"); i++; // 跳过下一个字符 } else { result.add(String.valueOf(input.charAt(i))); } } return String.join(",", result); } //流程卡管理查询 public Map selectProcessCard(Integer pageNum, Integer pageSize,List selectDate, FlowCard flowCard) { Integer offset = (pageNum - 1) * pageSize; String endDate = LocalDate.now().toString(); String startDate = LocalDate.now().minusDays(15).toString(); if(selectDate !=null && selectDate.size()==2){ if(!selectDate.get(0).isEmpty()){ startDate = selectDate.get(0); } if(!selectDate.get(1).isEmpty()){ endDate = selectDate.get(1); } } Map map = new HashMap<>(); map.put("data", flowCardMapper.selectFlowCard(offset, pageSize, startDate, endDate, flowCard)); map.put("total", flowCardMapper.getPageTotal(offset, pageSize, startDate, endDate, flowCard)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } //分架查询 public Map selectAddProcess(List selectDate, FlowCard flowCard) { String endDate = LocalDate.now().toString(); String startDate = LocalDate.now().minusDays(15).toString(); if(selectDate !=null && selectDate.size()==2){ if(!selectDate.get(0).isEmpty()){ startDate = selectDate.get(0); } if(!selectDate.get(1).isEmpty()){ endDate = selectDate.get(1); } } Map map = new HashMap<>(); map.put("data", flowCardMapper.selectFlowCardMp( startDate, endDate, flowCard)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } //分架明细查询 public Map detailsSelectSv(String orderId, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.detailsSelectMp(orderId, flowCard)); return map; } //删除流程卡 public Boolean deleteFlowCardSv(String orderId, String processId, String userId, String userName) { if (!orderId.isEmpty() && !processId.isEmpty()) { //判断该流程卡是否报工 Integer count = flowCardMapper.reportingWorkCount(processId); if (count == 0) { //修改分架状态 flowCardMapper.updateDeleteState(orderId, processId); //删除报工流程明细表数据 flowCardMapper.deleteReportingWork(processId); //删除分架明细 flowCardMapper.deleteFlowCardMp(orderId, processId); //删除排序表数据 flowCardMapper.deleteflowCardSort(orderId, processId); //判断该订单流程卡是否全部删除 Integer flowNumber = flowCardMapper.selectFlowCardCount(orderId); if (flowNumber == 0) { //修改订单表分架状态为0,全部删除 flowCardMapper.updateProcessingCard(orderId, 0); } else { //修改订单表分架状态为1,删除部分 flowCardMapper.updateProcessingCard(orderId, 1); } //保存日志 Log log = new Log(); log.setContent(orderId + processId); log.setFunction("deleteFlowCardSv流程卡删除"); log.setOperatorId(userId); log.setOperator(userName); logService.saveLog(log); return true; } else { return false; } } else { return false; } } //分架新增明细查询 public Map selectNoCardSv(String orderId, String productionId, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.selectNoCardMp(orderId, productionId, flowCard)); map.put("maxFlowCard", flowCardMapper.selectMaxFlowCard(orderId, productionId)); map.put("orderOtherMoney", flowCardMapper.selectorderOtherMoney()); return map; } //修改排版状态 public Boolean updateLayoutStatusSv(String processId, Integer state) { if (!processId.isEmpty()) { flowCardMapper.updateLayoutStatusMp(processId, state); return true; } else { return false; } } //保存流程卡数据 @Transactional(rollbackFor = Exception.class) public Boolean addFlowCardSv(String orderId, Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } String productionId = ""; if (object.get("productionId") != null) { productionId = object.get("productionId").toString(); } List FlowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowCard")), FlowCard.class); if (!FlowCardList.isEmpty()) { for (FlowCard flowCard : FlowCardList) { //查询每个序号的层数 Integer layer = flowCardMapper.selectLayer(productionId, flowCard.getOrderNumber()); //添加流程卡数据 flowCardMapper.addFlowCardMp(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getLandingSequence(), flowCard.getQuantity(), productionId, userName, layer); //修改分架状态,将状态改为1 flowCardMapper.updateFlowState(productionId, flowCard.getOrderNumber()); //查询该订单未分架数量 Integer FlowCount = flowCardMapper.selectFlowCount(orderId); if (FlowCount == 0) { //修改订单表分架状态为2 flowCardMapper.updateProcessingCard(orderId, 2); } else { //修改订单表分架状态为1,未全部分架完成 flowCardMapper.updateProcessingCard(orderId, 1); } //查询订单小片表获取工艺传入小片工艺表 List orderGlassDetailList = orderGlassDetailMapper.selectList( new QueryWrapper() .eq("order_id", orderId) .eq("order_number", flowCard.getOrderNumber()) ); List orderProcessDetailList = getOrderProcessDetails(orderGlassDetailList); orderProcessDetailList.forEach( orderGlassDetail -> orderGlassDetail.setProcessId(flowCard.getProcessId())); //赋值订单工艺表 orderProcessDetailMapper.insertOrderProcessDetail(orderProcessDetailList); } //保存日志 Log log = new Log(); log.setContent(object.toString()); log.setFunction("addFlowCardSv流程卡新增"); log.setOperatorId((String) object.get("userId")); log.setOperator((String) object.get("userName")); logService.saveLog(log); } else { saveState = false; } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("updateFinishedGoodsInventoryAllocate"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map selectSchedulingSv(String selectTime1, String selectTime2, String orderId, String processes, Integer state, FlowCard flowCard) { Map map = new HashMap<>(); if (state == 2) {//已排产 map.put("data", flowCardMapper.selectOkSchedulingMp(selectTime1, selectTime2, orderId, processes, flowCard)); } else if (state == 1) {//未排产 map.put("data", flowCardMapper.selectNoSchedulingMp(selectTime1, selectTime2, orderId, processes, flowCard)); } return map; } //首次查询排版数据 public Map selectLastScheduling(String selectTime1, String selectTime2, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.selectLastSchedulingMp(selectTime1, selectTime2, flowCard)); return map; } public Object flowCardDetailSv(String processId, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.flowCardDetailMp(processId, flowCard)); map.put("merge", flowCardMapper.flowCardDetailMergeMp(processId)); return map; } public Object selectPrintFlowCardSv(List selectDate, String orderId, String project, String userId, Integer state, FlowCard flowCard) { if ("null".equals(orderId)) { orderId = ""; } if ("null".equals(project)) { project = ""; } String endDate = LocalDate.now().toString(); String startDate = LocalDate.now().minusDays(15).toString(); if(selectDate !=null && selectDate.size()==2){ if(!selectDate.get(0).isEmpty()){ startDate = selectDate.get(0); } if(!selectDate.get(1).isEmpty()){ endDate = selectDate.get(1); } } Map map = new HashMap<>(); map.put("data", flowCardMapper.selectPrintFlowCardMp(startDate, endDate, orderId, project,state, flowCard)); String roleId = flowCardMapper.selectUserMp(userId); map.put("user", roleId); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Object selectPrintFlowCard(List selectDate) { String endDate = LocalDate.now().toString(); String startDate = LocalDate.now().minusDays(15).toString(); if(selectDate !=null && selectDate.size()==2){ if(!selectDate.get(0).isEmpty()){ startDate = selectDate.get(0); } if(!selectDate.get(1).isEmpty()){ endDate = selectDate.get(1); } } Map map = new HashMap<>(); map.put("data", flowCardMapper.selectPrintFlowCard(startDate, endDate)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Object selectPrintSv(Map object, String inquiryMode) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); if ("1".equals(inquiryMode)) {//合并流程卡 itemmap.put("detail", flowCardMapper.selectPrintMp(flowCard.getOrderId())); } else if ("3".equals(inquiryMode)) {//合并流程卡不按配置显示 itemmap.put("detail", flowCardMapper.selectPrintAllMp(flowCard.getOrderId())); } else {//非合并流程卡 itemmap.put("detail", flowCardMapper.selectPrintNotMp(flowCard.getOrderId())); } list.add(itemmap); } } map.put("data", list); map.put("type", flowCardMapper.selectType()); return map; } private static Map parseJson(String json) { ObjectMapper objectMapper = new ObjectMapper(); try { return objectMapper.readValue(json, new TypeReference>() { }); } catch (IOException e) { e.printStackTrace(); return null; } } public Map getSelectPrintingSv(Map object, String printMerge, String printLike, String merge, String flashback, String compound, String landingSequence) { if (printMerge == null) { printMerge = ""; } if (printLike == null) { printLike = ""; } if (merge == null) { merge = ""; } Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { Set processedKeys = new HashSet<>(); for (FlowCard flowCard : flowCardList) { String processId = flowCard.getProcessId(); Integer orderNumber = flowCard.getOrderNumber(); String uniqueKey = processId + "|" + orderNumber; // 用特殊字符连接防止冲突 Map itemmap = new HashMap<>(); //流程卡表头表尾数据 //是否传入合并层数 if (printMerge.equals("") || printMerge.equals("null")) { //是否包含切割 //boolean containsCutting = flowCard.getProcess().contains("切割"); String processSub = flowCard.getProcess().split("->")[0]; //获取工序对应的别称 String processName = flowCardMapper.getProcessName(processSub); //processName.equals("stepC") || processName.equals("stepD") if (processName.equals("stepC") || processName.equals("stepD")) {//工艺是否包含夹胶中空,流程卡查询合并 itemmap.put("detail", flowCardMapper.getPrimaryListLimt(flowCard.getProcessId(), String.valueOf("null".equals(compound) ? flowCard.getTechnologyNumber()//正常层 : compound ),//同架层 flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId())); if (compound == null || "null".equals(compound) || compound.trim().isEmpty()){ List> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), splitTechNumbers(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,landingSequence); itemmap.put("detailList", detailList); }else {//有需要同架的层 List> detailList = flowCardMapper.getDetailCompoundList(flowCard.getProcessId(), splitTechNumbers(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,splitTechNumbers(compound),landingSequence); itemmap.put("detailList", detailList); } } else { if (merge.equals("1") && flowCard.getMerge().equals(1)) {//未启用,配置文件flowCardMerge值为1 // 检查是否已经处理过该 processId,如果处理过则跳过 if (processedKeys.contains(uniqueKey)) { continue; } // 将该 processId 加入已处理集合 processedKeys.add(uniqueKey); itemmap.put("detail", flowCardMapper.getPrimaryList(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListMerge(flowCard.getProcessId(), flowCard.getProcess(),flashback,landingSequence); itemmap.put("detailList", detailList); } else { itemmap.put("detail", flowCardMapper.getPrimaryListLimt(flowCard.getProcessId(), String.valueOf("null".equals(compound) ? flowCard.getTechnologyNumber()//正常层 : compound ),//同架层 flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId())); if (compound == null || "null".equals(compound) || compound.trim().isEmpty()){ List> detailList = flowCardMapper.getDetailListLike(flowCard.getProcessId(), splitTechNumbers(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,landingSequence); itemmap.put("detailList", detailList); }else {//有需要同架的层 List> detailList = flowCardMapper.getDetailListLikeCompound(flowCard.getProcessId(), splitTechNumbers(flowCard.getTechnologyNumber()), flowCard.getProcess(),flashback,splitTechNumbers(compound),landingSequence); itemmap.put("detailList", detailList); } } } } //工艺流程 //List> processList = flowCardMapper.getProcessList(flowCard.getProcessId(), flowCard.getTechnologyNumber()); String input = flowCard.getProcess(); String delimiter = "->"; // 分割字符串 String[] parts = input.split(delimiter); // 创建 List> List> processList = new ArrayList<>(); // 遍历分割后的部分并将其存入 List> for (int i = 0; i < parts.length; i++) { Map maps = new HashMap<>(); maps.put("id", i); // 添加一个索引字段 maps.put("process", parts[i]); // 添加实际的值 processList.add(maps); } itemmap.put("processList", processList); // itemmap.put("numberList", numberList); itemmap.put("count", flowCardMapper.countFlowCard(flowCard.getOrderId())); itemmap.put("remarkList", flowCardMapper.remakList(flowCard.getProcessId())); list.add(itemmap); } } map.put("data", list); //初始化值 printLike = null; return map; } public Map getSelectPrintProject(String printProject, String merge, String flashback, String landingSequence) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 if (merge == null) { merge = ""; } List flowCardList = flowCardMapper.getFlowCardListPrintProject(printProject); if (!flowCardList.isEmpty()) { Set processedKeys = new HashSet<>(); for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); String processId = flowCard.getProcessId(); Integer orderNumber = flowCard.getOrderNumber(); String uniqueKey = processId + "|" + orderNumber; // 用特殊字符连接防止冲突 //是否包含切割 //boolean containsCutting = flowCard.getProcess().contains("切割"); String processSub = flowCard.getProcess().substring(0, 2); //获取工序对应的别称 String processName = flowCardMapper.getProcessName(processSub); if (processName.equals("stepC") || processName.equals("stepD")) {//工艺是否包含夹胶中空 itemmap.put("detail", flowCardMapper.getPrimaryListLimt(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId())); if (flowCard.getPatchState().equals(0)) { List> detailList = flowCardMapper.getDetailList(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess(), flashback, landingSequence); itemmap.put("detailList", detailList); } else { List> detailList = flowCardMapper.getDetailLists(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess(), flowCard.getOrderNumber()); itemmap.put("detailList", detailList); } } else { if (flowCard.getPatchState().equals(0)) { if (merge.equals("1") && flowCard.getMerge().equals(1)) { // 检查是否已经处理过该 processId,如果处理过则跳过 if (processedKeys.contains(uniqueKey)) { continue; } // 将该 processId 加入已处理集合 processedKeys.add(uniqueKey); itemmap.put("detail", flowCardMapper.getPrimaryList(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListMerge(flowCard.getProcessId(), flowCard.getProcess(), flashback, landingSequence); itemmap.put("detailList", detailList); } else { itemmap.put("detail", flowCardMapper.getPrimaryList(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListLike(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getProcess(), flashback, landingSequence); itemmap.put("detailList", detailList); } } else { itemmap.put("detail", flowCardMapper.getPrimaryLists(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getGlassChild(), flowCard.getProcess(), flowCard.getOrderId(), flowCard.getQuantity())); List> detailList = flowCardMapper.getDetailListLikes(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getProcess(), printProject, flowCard.getQuantity()); itemmap.put("detailList", detailList); } } //工艺流程 //List> processList = flowCardMapper.getProcessList(flowCard.getProcessId(), flowCard.getTechnologyNumber()); String input = flowCard.getProcess(); String delimiter = "->"; // 分割字符串 String[] parts = input.split(delimiter); // 创建 List> List> processList = new ArrayList<>(); // 遍历分割后的部分并将其存入 List> for (int i = 0; i < parts.length; i++) { Map maps = new HashMap<>(); maps.put("id", i); // 添加一个索引字段 maps.put("process", parts[i]); // 添加实际的值 processList.add(maps); } itemmap.put("processList", processList); // itemmap.put("numberList", numberList); if (flowCard.getPatchState().equals(0)) { itemmap.put("count", flowCardMapper.countFlowCard(flowCard.getOrderId())); } else { itemmap.put("count", flowCardList.size()); } itemmap.put("state", flowCard.getPatchState()); itemmap.put("remarkList", flowCardMapper.remakList(flowCard.getProcessId())); list.add(itemmap); } } map.put("data", list); return map; } public Boolean updateComposingSv(Map object) { List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("composing")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { //先获取排版状态 Integer layoutStatus = flowCardMapper.getLayoutStatus(flowCard.getProcessId()); //2优化占用 if (layoutStatus!=2){ flowCardMapper.updateComposing(flowCard.getProcessId()); } else { return false; } } //保存日志 Log log = new Log(); log.setContent(object.toString()); log.setFunction("FlowCardSv流程卡排版状态"); log.setOperatorId((String) object.get("userId")); log.setOperator((String) object.get("userName")); logService.saveLog(log); return true; } else { return false; } } public Boolean updateProcessCardRack(Map object) { List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("composing")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { flowCardMapper.updateProcessCardRack(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getRack()); } return true; } else { return false; } } public Map getSelectPrintLabelSv(String projectNo, String type) { Map map = new HashMap<>(); if (Objects.equals(type, "1")) { map.put("data", flowCardMapper.getPrintLabel(projectNo)); } else if (Objects.equals(type, "2")) { map.put("data", flowCardMapper.getPrintLabel2(projectNo)); } else if (Objects.equals(type, "3")) { map.put("data", flowCardMapper.getPrintLabel3(projectNo)); } return map; } public Map getSelectPrintLabelSv1(Map object) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); itemmap.put("data", flowCardMapper.getPrintLabel1(flowCard.getProcessId(), flowCard.getTechnologyNumber())); list.add(itemmap); } } map.put("data", list); return map; } public Map getSelectPrintLabelDetails(Map object) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); itemmap.put("data", flowCardMapper.getPrintLabelDetail(flowCard)); list.add(itemmap); } } map.put("data", list); return map; } public Map printFlowCardDetailsSv(String processId, String technologyNumber, String process, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.printFlowCardDetailsMp(processId, technologyNumber, process, flowCard)); return map; } public Boolean printSortSv(Map object) { List FlowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowCard")), FlowCard.class); if (!FlowCardList.isEmpty()) { for (FlowCard flowCard : FlowCardList) { //判断保存的数据是否已存在 Integer count = flowCardMapper.printAddSortCountMp(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getTechnologyNumber(), flowCard.getSort(), flowCard.getProcess()); if (count > 0) { flowCardMapper.printUpdateSortMp(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getTechnologyNumber(), flowCard.getSort(), flowCard.getProcess()); } else { flowCardMapper.printAddSortMp(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getTechnologyNumber(), flowCard.getSort(), flowCard.getProcess()); } } } return true; } public Map getSelectPrintCustomLabelSv(String type, Integer lableType, Map object) { //根据mse传过来的值,如果不存在 赋值false String isRepeat = Optional.ofNullable(object.get("isRepeat")) .map(Object::toString) .orElse("false"); Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { Set processedKeys = new HashSet<>(); if (lableType != 2) {//成品标签 for (FlowCard flowCard : flowCardList) { String processId = flowCard.getProcessId(); Integer orderNumber = flowCard.getOrderNumber(); String uniqueKey = processId + "|" + orderNumber; // 用特殊字符连接防止冲突 if (isRepeat=="false"){//根据mse传过来的值判断是否去除重复 // 检查是否已经处理过该 processId,如果处理过则跳过 if (processedKeys.contains(uniqueKey)) { continue; } } Map itemmap = new HashMap<>(); Integer sumQuantity = flowCardMapper.getSumQuantity(flowCard.getOrderId()); List> details = flowCardMapper.getPrintCustomData(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getPrintQuantity()); for (Map detail : details) { detail.put("sumQuantity", sumQuantity); } itemmap.put("data", details); list.add(itemmap); // 将该 processId 加入已处理集合 processedKeys.add(uniqueKey); } } else {//小片标签 for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); String orderNumber = ""; if (flowCard.getOrderNumber() != null) { orderNumber = String.valueOf(flowCard.getOrderNumber()); } // 判断是否为非空字符串 if (orderNumber != null && !orderNumber.trim().isEmpty()) { List> customDataSemi =flowCardMapper.getPrintCustomDataSemi( flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess(), flowCard.getOrderNumber(), flowCard.getPrintQuantity()); for (Map dataMap : customDataSemi) { dataMap.put("newList", flowCardMapper.getgetPrintCustomDataSemiSp( flowCard.getProcessId(), dataMap.get("technologyNumber").toString(), flowCard.getOrderNumber() )); } itemmap.put("data", customDataSemi); } else { //用于天津现场流程卡打印界面的小片标签打印 itemmap.put("data", flowCardMapper.getPrintCustomDataSemiTj( flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess(), flowCard.getPrintQuantity() )); } list.add(itemmap); } } } map.put("data", list); map.put("title", flowCardMapper.getPrintTitle(type)); return map; } public Map getSelectPrintCustomLabelSv2(String type, Integer lableType, Map object) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { Set processedKeys = new HashSet<>(); if (lableType != 2) {//成品标签 for (FlowCard flowCard : flowCardList) { String processId = flowCard.getProcessId(); Integer orderNumber = flowCard.getOrderNumber(); String uniqueKey = processId + "|" + orderNumber; // 用特殊字符连接防止冲突 // 检查是否已经处理过该 processId,如果处理过则跳过 if (processedKeys.contains(uniqueKey)) { continue; } Map itemmap = new HashMap<>(); itemmap.put("data", flowCardMapper.getPrintCustomData2(flowCard.getProcessId())); list.add(itemmap); // 将该 processId 加入已处理集合 processedKeys.add(uniqueKey); } } else {//小片标签 for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); itemmap.put("data", flowCardMapper.getPrintCustomDataSemi(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess(), flowCard.getOrderNumber(), flowCard.getPrintQuantity())); list.add(itemmap); } } } map.put("data", list); map.put("title", flowCardMapper.getPrintTitle(type)); return map; } public Object getCustomLabelDetailSv(String name, String form, String id, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.getCustomLabelDetailMp(name, form, id, flowCard)); return map; } public Boolean updatePrintStateSv(Integer printState, Map object) { List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { // 更新打印状态 flowCardMapper.updatePrintStateMp(printState, flowCard.getProcessId(), flowCard.getTechnologyNumber()); } return true; } else { return false; } } public Map printFlowCardOrderSortSv(String orderId, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.printFlowCardOrderSortMp(orderId, flowCard)); return map; } public Boolean printOrderSort(Map object) { List FlowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowCard")), FlowCard.class); if (!FlowCardList.isEmpty()) { for (FlowCard flowCard : FlowCardList) { flowCardMapper.printOrderSortMp(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getTechnologyNumber(), flowCard.getSort()); } } return true; } public Map getSelectPrintingRefundSv(Map object, String printMerge, String printLike, String mergeTechnologyNumber) { if (printMerge == null) { printMerge = ""; } if (printLike == null) { printLike = ""; } Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); //流程卡表头表尾数据 //是否传入合并层数 if (printMerge.equals("") || printMerge.equals("null")) { itemmap.put("detail", flowCardMapper.getPrimaryListRefund(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), mergeTechnologyNumber, flowCard.getPatchReason(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListRefund(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), flowCard.getPatchReason()); itemmap.put("detailList", detailList); } else { //流程卡明细数据 if (printLike.equals("") || printLike.equals("null")) { itemmap.put("detail", flowCardMapper.getPrimaryListMergeRefund(flowCard.getProcessId(), printMerge, flowCard.getOrderNumber(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListRefund(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), flowCard.getPatchReason()); itemmap.put("detailList", detailList); } else { itemmap.put("detail", flowCardMapper.getPrimaryListRefund(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), mergeTechnologyNumber, flowCard.getPatchReason(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListLikeRefund(flowCard.getProcessId(), printMerge, flowCard.getOrderNumber(), flowCard.getReportingWorkId()); itemmap.put("detailList", detailList); } } //工艺流程 List> processList = flowCardMapper.getProcessList(flowCard.getProcessId(), flowCard.getTechnologyNumber()); //工序列表 List> processNameList = flowCardMapper.getProcessNameList(); itemmap.put("processList", processList); itemmap.put("processNameList", processNameList); // itemmap.put("numberList", numberList); list.add(itemmap); } } map.put("data", list); //初始化值 printLike = null; return map; } public Map getSelectPrinReworkSv(Map object, String printMerge, String printLike) { if (printMerge == null) { printMerge = ""; } if (printLike == null) { printLike = ""; } Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); //流程卡表头表尾数据 //是否传入合并层数 if (printMerge.equals("") || printMerge.equals("null")) { itemmap.put("detail", flowCardMapper.getPrimaryListRework(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListRework(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getOrderNumber(), flowCard.getReportingWorkId()); itemmap.put("detailList", detailList); } else { //流程卡明细数据 if (printLike.equals("") || printLike.equals("null")) { itemmap.put("detail", flowCardMapper.getPrimaryListMergeRework(flowCard.getProcessId(), printMerge, flowCard.getOrderNumber(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListRework(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getOrderNumber(), flowCard.getReportingWorkId()); itemmap.put("detailList", detailList); } else { itemmap.put("detail", flowCardMapper.getPrimaryListRework(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), flowCard.getOrderId())); List> detailList = flowCardMapper.getDetailListLikeRework(flowCard.getProcessId(), printMerge, flowCard.getOrderNumber(), flowCard.getReportingWorkId()); itemmap.put("detailList", detailList); } } //工艺流程 List> processList = flowCardMapper.getProcessList(flowCard.getProcessId(), flowCard.getTechnologyNumber()); itemmap.put("processList", processList); // itemmap.put("numberList", numberList); list.add(itemmap); } } map.put("data", list); //初始化值 printLike = null; return map; } public Object selectPrintDetailsSv(Map object, String inquiryMode, Integer type) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); if (type == 1) {//明细打印 itemmap.put("detail", flowCardMapper.selectPrintDetailsMp(flowCard.getOrderId())); } else if (type == 2) {//明细分架打印 itemmap.put("detail", flowCardMapper.selectPrintDetailsMp1(flowCard.getOrderId())); }else if (type == 3) {//订单打印 itemmap.put("detail", flowCardMapper.selectPrintDetailsMp2(flowCard.getOrderId())); } list.add(itemmap); } } map.put("data", list); map.put("orderOtherMoney", flowCardMapper.selectorderOtherMoney()); map.put("type", flowCardMapper.selectType()); return map; } public Map getSelectPrintCustomLabelDetailsSv(String type, Integer lableType, Map object) { String landingSequence = ""; if (object.get("landingSequence") != null) { landingSequence = object.get("landingSequence").toString(); } Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { Set processedKeys = new HashSet<>(); if (lableType != 2) {//成品标签 for (FlowCard flowCard : flowCardList) { String orderId = flowCard.getOrderId(); String processId = flowCard.getProcessId(); String orderNumber = flowCard.getOrderNumber().toString(); String uniqueKey = processId + "|" + orderNumber; // 用特殊字符连接防止冲突 if (processId!=null){ // 检查是否已经处理过该 processId,如果处理过则跳过 if (processedKeys.contains(uniqueKey)) { continue; } Map itemmap = new HashMap<>(); Integer sumQuantity = flowCardMapper.getSumQuantity(flowCard.getOrderId()); List> details = flowCardMapper.getPrintCustomDataDetails(flowCard.getProcessId(), flowCard.getOrderNumber(), flowCard.getPrintQuantity()); for (Map detail : details) { detail.put("sumQuantity", sumQuantity); } itemmap.put("data", details); list.add(itemmap); // 将该 processId 加入已处理集合 processedKeys.add(uniqueKey); } else{ Map itemmap = new HashMap<>(); itemmap.put("data", flowCardMapper.getPrintOrderDataDetails(flowCard.getOrderId(), flowCard.getOrderNumber(), flowCard.getPrintQuantity())); list.add(itemmap); } } } else {//小片标签 for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); itemmap.put("data", flowCardMapper.getPrintCustomDataSemi(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getProcess(), flowCard.getOrderNumber(), flowCard.getPrintQuantity())); list.add(itemmap); } } } if (!"1".equals(landingSequence)) { // 构造一个先按短边、再按长边的比较器 Comparator> comparator = Comparator .comparingDouble((Map m) -> { Map first = ((List>)m.get("data")).get(0); double w = ((Number) first.get("width")).doubleValue(); double h = ((Number) first.get("height")).doubleValue(); return Math.min(w, h); }) .thenComparingDouble(m -> { Map first = ((List>)m.get("data")).get(0); double w = ((Number) first.get("width")).doubleValue(); double h = ((Number) first.get("height")).doubleValue(); return Math.max(w, h); }); // 对整个 list 排序,并整体反转,短边大→前,短边相同时长边大→前 list.sort(comparator.reversed()); } map.put("data", list); map.put("title", flowCardMapper.getPrintTitle(type)); return map; } public Map getPrintCustomDataProjectNo(String type, String projectNo) { Map map = new HashMap<>(); map.put("data", flowCardMapper.getPrintCustomDataProjectNo(projectNo)); map.put("title", flowCardMapper.getPrintTitle(type)); return map; } public Object selectSortTableSv(Map object) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); itemmap.put("data", flowCardMapper.selectSortTableMp(flowCard.getOrderId())); list.add(itemmap); } } map.put("data", list); return map; } public String mergeFlowCard(Map object, Integer merge) { String returns = "false"; List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowCard")), FlowCard.class); if (!flowCardList.isEmpty()) { List> flowCardList1 = flowCardMapper.selectFlowCardMerge(flowCardList.get(0).getProcessId()); if (merge == 0){ int index = 1; for (int i = 0; i < flowCardList1.size(); i++) { if (Integer.valueOf(flowCardList1.get(i).get("count2").toString()) > 1) { List technologyNumber = Arrays.stream(flowCardList1.get(i).get("count1").toString().split(",")) .map(Integer::parseInt) .collect(Collectors.toList()); flowCardMapper.updateFlowCardMerge(flowCardList.get(0).getProcessId(), technologyNumber, index); index += 1; returns = "true"; } } }else {//取消合并 flowCardMapper.updateFlowCardIsMerge(flowCardList.get(0).getProcessId()); returns = "true"; } } return returns; } public List getProcessCard(Map processCards) { String processCard = processCards.get("processCard"); if (!processCard.contains("/")) { throw new ServiceException(Constants.Code_600, "错误的流程卡号,请检查!"); } String[] processCardList = processCard.split("/"); List result = IntStream.range(0, processCardList[1].length()) .mapToObj(i -> String.valueOf(processCardList[1].charAt(i))) .collect(Collectors.toList()); List flowCardList = flowCardMapper.selectList( new QueryWrapper() .eq("process_id", processCardList[0]) .in("technology_number", result) ); for (FlowCard flowCard : flowCardList) { flowCard.setOrderGlassDetail( orderGlassDetailMapper.selectOne( new QueryWrapper() .eq("order_id", flowCard.getOrderId()) .eq("order_number", flowCard.getOrderNumber()) .eq("technology_number", flowCard.getTechnologyNumber()) ) ); String str = flowCard.getOrderGlassDetail().getGlassChild(); String delimiter = "mm"; int index = str.indexOf(delimiter); Integer subString = Integer.valueOf(str.substring(0, index).trim()); flowCard.getOrderGlassDetail().setThickness(subString); } return flowCardList; } public Map getProcessCardAll(Map processCards) { String processCard = processCards.get("processCard"); if (!processCard.contains("/")) { throw new ServiceException(Constants.Code_600, "错误的流程卡号,请检查!"); } String[] processCardList = processCard.split("/"); List result = IntStream.range(0, processCardList[1].length()) .mapToObj(i -> String.valueOf(processCardList[1].charAt(i))) .collect(Collectors.toList()); List flowCardList = flowCardMapper.selectList( new QueryWrapper() .eq("process_id", processCardList[0]) .in("technology_number", result) ); for (FlowCard flowCard : flowCardList) { flowCard.setOrderGlassDetail( orderGlassDetailMapper.selectOne( new QueryWrapper() .eq("order_id", flowCard.getOrderId()) .eq("order_number", flowCard.getOrderNumber()) .eq("technology_number", flowCard.getTechnologyNumber()) ) ); String str = flowCard.getOrderGlassDetail().getGlassChild(); String delimiter = "mm"; int index = str.indexOf(delimiter); Integer subString = Integer.valueOf(str.substring(0, index).trim()); flowCard.getOrderGlassDetail().setThickness(subString); } OrderDetail orderDetail = orderDetailMapper .selectOne(new QueryWrapper() .eq("order_id", flowCardList.get(0).getOrderId()) .eq("order_number", flowCardList.get(0).getOrderNumber()) ); Product product = productMapper .selectOne(new QueryWrapper() .eq("id",orderDetail.getProductId())); product.setProductDetails(productDetailMapper .selectList(new QueryWrapper() .eq("prod_id",orderDetail.getProductId()) ) ); Order order = orderMapper. selectOne(new QueryWrapper() .eq("order_id", flowCardList.get(0).getOrderId())); order.setMoney(null); Map map = new HashMap<>(); map.put("product",product); map.put("flowCard",flowCardList); map.put("order",order); return map; } public Boolean checkboxDeleteSv(Map object) { String userName = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } String userId = ""; if (object.get("userId") != null) { userId = object.get("userId").toString(); } List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("composing")), FlowCard.class); for (FlowCard flowCard : flowCardList) { //查询是否报工 Integer count = flowCardMapper.reportingWorkCount(flowCard.getProcessId()); if (count == 0) { //修改分架状态 flowCardMapper.updateDeleteState(flowCard.getOrderId(), flowCard.getProcessId()); //删除报工流程明细表数据 flowCardMapper.deleteReportingWork(flowCard.getProcessId()); //删除分架明细 flowCardMapper.deleteFlowCardMp(flowCard.getOrderId(), flowCard.getProcessId()); //删除排序表数据 flowCardMapper.deleteflowCardSort(flowCard.getOrderId(), flowCard.getProcessId()); //判断该订单流程卡是否全部删除 Integer flowNumber = flowCardMapper.selectFlowCardCount(flowCard.getOrderId()); if (flowNumber == 0) { //修改订单表分架状态为0,全部删除 flowCardMapper.updateProcessingCard(flowCard.getOrderId(), 0); } else { //修改订单表分架状态为1,删除部分 flowCardMapper.updateProcessingCard(flowCard.getOrderId(), 1); } //保存日志 Log log = new Log(); log.setContent(flowCard.getOrderId() + flowCard.getProcessId()); log.setFunction("checkboxDeleteSv流程卡删除"); log.setOperatorId(userId); log.setOperator(userName); logService.saveLog(log); } else { return false; } } return true; } public Map getPrintProjectDetails(String projectNo) { Map map = new HashMap<>(); map.put("data", flowCardMapper.getPrintProjectDetailsMp(projectNo)); return map; } public Map selectPrintProjectDetailSmallPiece(Map object) throws JsonProcessingException { Map map = new HashMap<>(); String projectNo=object.get("projectNo").toString(); String stockIdsStr=object.get("stockId").toString(); ObjectMapper objectMapper = new ObjectMapper(); if (stockIdsStr != null && !stockIdsStr.isEmpty()) { List list = objectMapper.readValue(stockIdsStr, new TypeReference>() {}); map.put("data", flowCardMapper.getPrintProjectDetailsMpSp(projectNo,list)); } return map; } public Map getPrintCustomDataProjectNoDetailSv(String type, Integer detailType, Map object) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); //是否是工程明细打印 if (detailType == 0) {//工程打印明细 itemmap.put("data", flowCardMapper.getPrintCustomDataProjectDetail(flowCard.getProjectNo(), flowCard.getStockId(),flowCard.getPolysId())); } //非工程打印 else if (detailType == 1) { itemmap.put("data", flowCardMapper.getPrintCustomDataProject(flowCard.getProjectNo())); } else { itemmap.put("data", flowCardMapper.getPrintCustomDataProject(flowCard.getProjectNo())); } list.add(itemmap); } } map.put("data", list); map.put("title", flowCardMapper.getPrintTitle(type)); return map; } public Boolean updateProcessSv(String processId,String orderNumber, String technologyNumber, String orderId, String Orderprocess, Map object) { List resultList = new ArrayList<>(); //获取已报工工艺流程 String processOk = flowCardMapper.getProcessOk(processId,orderNumber,technologyNumber); if (processOk != null && !processOk.isEmpty()){ List okList = Arrays.asList(processOk.split("->")); List orderList = Arrays.asList(Orderprocess.split("->")); // 判断 processOk 的每个工序是否都包含在 orderProcess 中 for (String p : okList) { if (!orderList.contains(p)) { return false; } } for (String process : okList) { List details = flowCardMapper.getProcessDetail(processId,orderNumber, technologyNumber, process); if (details != null && !details.isEmpty()) { resultList.addAll(details); } } } //删除小片工艺表对应的数据 flowCardMapper.deleteProcessMp(processId, technologyNumber); //重新插入修改好工艺流程卡的数据 List newCraftList = (List) object.get("newCraft"); List numberList = (List) object.get("technologyNumber"); // 判断 newCraftList 是否为空 if (newCraftList != null) { for (String number : numberList) { //修改订单小片表工艺流程 flowCardMapper.updateOrderProcessMp(orderId, number, technologyNumber, Orderprocess); for (String process : newCraftList) { flowCardMapper.updateProcessMp(processId, technologyNumber, process, number); } } } //将原来已报工的数据更新 if (resultList != null && !resultList.isEmpty()) { for (OrderProcessDetail d : resultList) { flowCardMapper.updateOrderProcessDetail(d.getProcessId(),d.getOrderNumber(),d.getTechnologyNumber(), d.getReportingWorkNumCount(),d.getReportingWorkNum(),d.getBrokenNum(),d.getProcess()); } } return true; } public Integer updateProjectLabelPrintCount(String projectNo) { flowCardMapper.updateProjectLabelPrintCount(projectNo); return flowCardMapper.selectProjectLabelPrintCount(projectNo); } public Integer updateProjectProcessPrintCount(String projectNo) { flowCardMapper.updateProjectProcessPrintCount(projectNo); return flowCardMapper.selectProjectProcessPrintCount(projectNo); } public Map flowCardDetail(Map object) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { Map itemmap = new HashMap<>(); itemmap.put("detail", flowCardMapper.getFlowCardDetail(flowCard.getProcessId())); list.add(itemmap); } } map.put("data", list); return map; } public Object processCardAutoRack(Map object) { String orderId = object.get("orderId").toString(); String productionId = object.get("productionId").toString(); Integer inMaxQuantity = Integer.parseInt(object.get("inMaxQuantity").toString()); Float inWeight = Float.parseFloat(object.get("inWeight").toString()); Float shelfThickness = Float.parseFloat(object.get("shelfThickness").toString()); Float spacerThickness = Float.parseFloat(object.get("spacerThickness").toString()); Float inLenMax = Float.parseFloat(object.get("inLenMax").toString()); Float inLenMin = Float.parseFloat(object.get("inLenMin").toString()); Float inShortMax = Float.parseFloat(object.get("inShortMax").toString()); Float inShortMin = Float.parseFloat(object.get("inShortMin").toString()); /*String orderId = "NG25000004"; String productionId = "NG25000004A"; Integer inMaxQuantity = 1; Float inWeight = 4000.0f; Float shelfThickness = 2000.0f; Float maxHeight = 1520.0f; Float maxWid = 400.0f; Float spacerThickness = 0.0f;//垫片厚度*/ Map thickness = flowCardMapper.getGlassThicknessByProdutionId(orderId, productionId); //成品玻璃总厚度 Float glassTotalThickness = Float.parseFloat(thickness.get("totalThickness").toString()); //成品玻璃厚度 Float glassThickness = Float.parseFloat(thickness.get("thickness").toString()); //获取此工程号订单明细信息 List orderDetails = flowCardMapper.getOrderDetailByProductionId(orderId, productionId,"scope",inLenMax,inLenMin,inShortMax,inShortMin,glassThickness); List orderDetailsNotScope = flowCardMapper.getOrderDetailByProductionId(orderId, productionId,"notScope",inLenMax,inLenMin,inShortMax,inShortMin,glassThickness); //根据玻璃厚度和垫片厚度当前架子最大可放数量 Integer shelfMaxQuantityByThickness = (int) (shelfThickness / (glassTotalThickness + spacerThickness)); //用于接收最终生成的流程卡 List orderDetailList = new ArrayList<>(); //流程卡自增符号 int flowCardNo = 1; // 当前架子剩余可放数量 Integer shelfQuantity = 0; for (OrderDetail orderDetail : orderDetails) { //架子根据尺寸重量最大能放多少 int shelfQuantityByWeight = (int) (inWeight / (orderDetail.getHeight() * orderDetail.getWidth() * glassThickness * 2.5 / 1000000) ); //当前订单明细剩余数量 if (shelfQuantity == 0) { shelfQuantity =Math.min( Math.min(shelfMaxQuantityByThickness,inMaxQuantity),shelfQuantityByWeight); }else if(shelfQuantity>0){//架子剩余数量大于0时,判断当前架子剩余重量,是否支持最新序号的的成品重量 String FlowCardId = orderDetailList.get(orderDetailList.size() - 1).getProcessId(); double flowCardWeight = 0.0; for (OrderDetail orderDetail1 : orderDetailList) { if (orderDetail1.getProcessId().equals(FlowCardId)) { flowCardWeight += orderDetail1.getHeight()*orderDetail1.getQuantity()* orderDetail1.getWidth()* glassThickness* 2.5 / 1000000; } } if(flowCardWeight>0){ flowCardWeight = inWeight - flowCardWeight; //按照当前流程卡剩余重量,计算当前流程卡剩余数量 int remainingQuantity = (int) (flowCardWeight / (orderDetail.getHeight() * orderDetail.getWidth() * glassThickness * 2.5 / 1000000)); shelfQuantity =Math.min(Math.min(Math.min(shelfQuantityByWeight, Math.min(inMaxQuantity, shelfMaxQuantityByThickness)),shelfQuantity),remainingQuantity); if (shelfQuantity == 0) { shelfQuantity = Math.min(shelfQuantityByWeight, Math.min(inMaxQuantity, shelfMaxQuantityByThickness)); flowCardNo += 1; } } } //取最小值 //Integer maxQuantity = 0; while (orderDetail.getQuantity() > 0) { OrderDetail newOrderDetail = new OrderDetail(); //当死循环中,当前架子剩余数量为0时,重新计算架子剩余数量 if (shelfQuantity == 0) { shelfQuantity = Math.min(Math.min(shelfMaxQuantityByThickness,inMaxQuantity),shelfQuantityByWeight); } String processId = productionId + String.format("%03d", flowCardNo); //取最小值 //maxQuantity = Math.min(shelfQuantity, Math.min(inMaxQuantity, shelfMaxQuantityByThickness)); //maxQuantity = Math.min(shelfQuantity, shelfMaxQuantityByThickness); /*System.out.println("订单序号:"+orderDetail.getOrderNumber()); System.out.println(shelfQuantity + "," + "," + shelfMaxQuantityByThickness); System.out.println(flowCardNo + "," + maxQuantity); System.out.println("------");*/ if(shelfQuantity<=0){ return false; } if (orderDetail.getQuantity() > shelfQuantity) { newOrderDetail.setProcessId(processId); newOrderDetail.setLongSide(orderDetail.getLongSide()); newOrderDetail.setShortSide(orderDetail.getShortSide()); newOrderDetail.setBuildingNumber(orderDetail.getBuildingNumber()); newOrderDetail.setQuantity(Long.valueOf(shelfQuantity)); newOrderDetail.setHeight(orderDetail.getHeight()); newOrderDetail.setWidth(orderDetail.getWidth()); newOrderDetail.setOrderNumber(orderDetail.getOrderNumber()); newOrderDetail.setShape(orderDetail.getShape()); newOrderDetail.setLandingSequence(flowCardNo); orderDetailList.add(newOrderDetail); orderDetail.setQuantity(orderDetail.getQuantity() - shelfQuantity); orderDetail.setBaiscQuantity(String.valueOf(Integer.valueOf(orderDetail.getBaiscQuantity())-shelfQuantity)); flowCardNo += 1; shelfQuantity = shelfQuantity - shelfQuantity; } else { newOrderDetail.setProcessId(processId); newOrderDetail.setLongSide(orderDetail.getLongSide()); newOrderDetail.setShortSide(orderDetail.getShortSide()); newOrderDetail.setBuildingNumber(orderDetail.getBuildingNumber()); newOrderDetail.setQuantity(orderDetail.getQuantity()); newOrderDetail.setHeight(orderDetail.getHeight()); newOrderDetail.setWidth(orderDetail.getWidth()); newOrderDetail.setOrderNumber(orderDetail.getOrderNumber()); newOrderDetail.setShape(orderDetail.getShape()); newOrderDetail.setLandingSequence(flowCardNo); newOrderDetail.setBaiscQuantity(String.valueOf(orderDetail.getBaiscQuantity())); orderDetailList.add(newOrderDetail); //当前架子剩余数量 shelfQuantity = shelfQuantity - Math.toIntExact(orderDetail.getQuantity()); if (shelfQuantity == 0) { flowCardNo += 1; } orderDetail.setQuantity(0L); } } } Map map = new HashMap<>(); Collections.reverse(orderDetailList); map.put("orderDetailList", orderDetailList); map.put("orderDetailsNotScope", orderDetailsNotScope); return map; } public Boolean revokeComposingSv(Map object) { List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("composing")), FlowCard.class); if (!flowCardList.isEmpty()) { for (FlowCard flowCard : flowCardList) { //获取没有工程号的条数,已生成工程号不能撤回 Integer count = flowCardMapper.selectProjectNo(flowCard.getProcessId()); if (count == 0){ flowCardMapper.revokeComposing(flowCard.getProcessId()); } else { return false; } } return true; } else { return false; } } public List exportDateProcessSv(Map dates) { List date= (List) dates.get("date"); return flowCardMapper.exportDateProcessMp(date); } public Map selectSortingCardSv(String orderId, String productionId, String flashback, String optionVal, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.selectSortingCardMp(orderId, productionId,flashback,optionVal, flowCard)); map.put("maxFlowCard", flowCardMapper.selectMaxFlowCard(orderId, productionId)); map.put("orderOtherMoney", flowCardMapper.selectorderOtherMoney()); return map; } public Boolean updateTerminationSv(String processId, Integer orderNumber, Integer value) { if (processId!=""){ flowCardMapper.updateTerminationMp(processId,orderNumber,value); //获取终止数量与流程卡数量比较 Map data = flowCardMapper.getTerminationQuantity(processId,orderNumber); Integer terminationNum = (Integer) data.get("termination_quantity"); Integer totalNum = (Integer) data.get("quantity"); if (terminationNum==totalNum){ flowCardMapper.updateTerminationStatus(processId,orderNumber); } return true; }else { return false; } } public Boolean updateTerminationNoSv(String processId, Integer orderNumber) { if (processId!=""){ flowCardMapper.updateTerminationNoMp(processId,orderNumber); return true; }else { return false; } } public Map selectCompletedSv(String processId, Integer orderNumber, String process) { Map map = new HashMap<>(); String[] processList = process.split("->"); //获取工艺流程第一个工序 String interceptProcess = processList[0]; map.put("data", flowCardMapper.selectCompletedMp(processId, orderNumber,interceptProcess)); return map; } // public Map getSelectPrintingConsolidatedSv(Map object, String printMerge, String printLike, String mergeTechnologyNumber) { // if (printMerge == null) { // printMerge = ""; // } // if (printLike == null) { // printLike = ""; // } // Map map = new HashMap<>(); // List> list = new ArrayList>();//最终结果 // List flowCardList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FlowCard.class); // if (!flowCardList.isEmpty()) { // Set processedKeys = new HashSet<>(); // for (FlowCard flowCard : flowCardList) { // String batch = flowCard.getOrder().getBatch(); // String glassChild = flowCard.getGlassChild(); // Map itemmap = new HashMap<>(); // //流程卡表头表尾数据 // itemmap.put("detail", flowCardMapper.getPrimaryListRefund(flowCard.getProcessId(), String.valueOf(flowCard.getTechnologyNumber()), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), mergeTechnologyNumber, flowCard.getPatchReason(), flowCard.getOrderId())); // // List> detailList = flowCardMapper.getDetailListRefund(flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), flowCard.getPatchReason()); // itemmap.put("detailList", detailList); // //工艺流程 // List> processList = flowCardMapper.getProcessList(flowCard.getProcessId(), flowCard.getTechnologyNumber()); // //工序列表 // List> processNameList = flowCardMapper.getProcessNameList(); // itemmap.put("processList", processList); // itemmap.put("processNameList", processNameList); // // itemmap.put("numberList", numberList); // list.add(itemmap); // // } // } // map.put("data", list); // //初始化值 // printLike = null; // return map; // } public Map getSelectPrintingConsolidatedSv(Map object, String printMerge, String printLike, String mergeTechnologyNumber) { if (printMerge == null) printMerge = ""; if (printLike == null) printLike = ""; Map map = new HashMap<>(); List> list = new ArrayList<>(); List flowCardList = JSONArray.parseArray( JSONObject.toJSONString(object.get("printList")), FlowCard.class); if (!flowCardList.isEmpty()) { // 用 Map 保存每个 key 对应的合并 detailList Map>> keyToDetails = new LinkedHashMap<>(); // 用 Map 保存每个 key 对应的第一个 flowCard,用于生成 itemmap 表头等信息 Map keyToFirstFlowCard = new HashMap<>(); for (FlowCard flowCard : flowCardList) { String batch = flowCard.getBatch(); String glassChild = flowCard.getProductName(); String key = batch + "_" + glassChild; List> currentDetailList = flowCardMapper.getDetailListRefund( flowCard.getProcessId(), flowCard.getTechnologyNumber(), flowCard.getOrderNumber(), flowCard.getReportingWorkId(), flowCard.getPatchReason() ); for (Map detail : currentDetailList) { detail.put("processId", flowCard.getProcessId()); detail.put("technologyNumber", flowCard.getTechnologyNumber()); } // 合并 detailList 到对应 key keyToDetails.computeIfAbsent(key, k -> new ArrayList<>()).addAll(currentDetailList); // 保存第一次出现的 flowCard,用于生成 itemmap keyToFirstFlowCard.putIfAbsent(key, flowCard); } // 遍历合并后的 key,生成 itemmap for (Map.Entry>> entry : keyToDetails.entrySet()) { String key = entry.getKey(); List> mergedDetailList = entry.getValue(); FlowCard firstFlowCard = keyToFirstFlowCard.get(key); Map itemmap = new HashMap<>(); itemmap.put("detailList", mergedDetailList); // 表头表尾 itemmap.put("detail", flowCardMapper.getPrimaryListRefundHB( firstFlowCard.getProcessId(), String.valueOf(firstFlowCard.getTechnologyNumber()), firstFlowCard.getOrderNumber(), firstFlowCard.getReportingWorkId(), mergeTechnologyNumber, firstFlowCard.getPatchReason(), firstFlowCard.getOrderId() )); // 工艺流程 List> processList = flowCardMapper.getProcessList( firstFlowCard.getProcessId(), firstFlowCard.getTechnologyNumber() ); // 工序列表 List> processNameList = flowCardMapper.getProcessNameList(); itemmap.put("processList", processList); itemmap.put("processNameList", processNameList); list.add(itemmap); } } map.put("data", list); return map; } public Result selectProcessCardProgressSv(Map object) { String orderId = object.get("orderId"); String processId = object.get("processId"); String orderNumber = object.get("orderNumber"); String technologyNumber = object.get("technologyNumber"); String process = object.get("process"); Result result = new Result(); //当流程卡和订单号都为空时,返回提示信息 if (orderId == null &&processId == null){ result.setCode(Constants.Code_600); result.setMsg("Please enter at least one parameter for the order number and the process card."); return result; } return result.success( orderProcessDetailMapper .selectProcessCardProgressSv( orderId, processId, orderNumber, technologyNumber, process) ); } }