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.AsyncQueryExecutor; import com.example.erp.dto.pp.PatchLogAddDTO; import com.example.erp.dto.pp.PatchLogDTO; import com.example.erp.entity.pp.FlowCard; import com.example.erp.entity.pp.PatchLog; import com.example.erp.entity.pp.ReportingWork; import com.example.erp.entity.userInfo.Log; import com.example.erp.entity.userInfo.SysError; import com.example.erp.mapper.pp.FlowCardMapper; import com.example.erp.mapper.pp.PatchLogMapper; import com.example.erp.mapper.pp.ReportingWorkMapper; import com.example.erp.service.userInfo.LogService; import com.example.erp.service.userInfo.SysErrorService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.annotation.PreDestroy; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; import java.util.concurrent.CompletableFuture; @Service @DS("pp") @Transactional(rollbackFor = Exception.class) public class ReplenishService { final PatchLogMapper patchMapper; final SysErrorService sysErrorService; final ReportingWorkMapper reportingWorkMapper; final FlowCardMapper flowCardMapper; final LogService logService; //多线程池 @Resource private AsyncQueryExecutor asyncExecutor; public ReplenishService(PatchLogMapper patchMapper, SysErrorService sysErrorService, ReportingWorkMapper reportingWorkMapper,FlowCardMapper flowCardMapper,LogService logService) { this.patchMapper = patchMapper; this.sysErrorService = sysErrorService; this.reportingWorkMapper = reportingWorkMapper; this.flowCardMapper = flowCardMapper; this.logService = logService; } public List getSelectReplenish(Integer pageNum, Integer pageSize,PatchLogAddDTO patchLogAddDTO) { Integer offset = (pageNum - 1) * pageSize; return patchMapper.getSelectReplenish(offset,pageSize,patchLogAddDTO); } // public Map SelectReplenish(Integer pageNum, Integer pageSize, List selectDate, PatchLogDTO patchLogDTO) { // 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",patchMapper.SelectReplenish(offset,pageSize,startDate,endDate,patchLogDTO)); // map.put("total",patchMapper.SelectReplenishPageTotal(offset,pageSize,startDate,endDate,patchLogDTO)); // // List list = new ArrayList<>(); // list.add(startDate); // list.add(endDate); // map.put("selectDate",list); // return map; // } public Map SelectReplenish( Integer pageNum, Integer pageSize, List selectDate, PatchLogDTO patchLogDTO) { Integer offset = (pageNum - 1) * pageSize; // 默认时间范围:过去15天 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 result = new HashMap<>(); try { // 使用线程池并行执行两个SQL String finalStartDate = startDate; String finalEndDate = endDate; CompletableFuture> dataFuture = asyncExecutor.runAsync(() -> patchMapper.SelectReplenish(offset, pageSize, finalStartDate, finalEndDate, patchLogDTO)); CompletableFuture> totalFuture = asyncExecutor.runAsync(() -> patchMapper.SelectReplenishPageTotal(offset, pageSize, finalStartDate, finalEndDate, patchLogDTO)); // 等待两个任务都完成 CompletableFuture.allOf(dataFuture, totalFuture).join(); result.put("data", dataFuture.get()); result.put("total", totalFuture.get()); // 返回时间段 List list = new ArrayList<>(); list.add(startDate); list.add(endDate); result.put("selectDate", list); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("并行查询补片记录异常:" + e.getMessage(), e); } return result; } public Boolean saveReplenish(Map object) { boolean saveState = true; Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } String oddNumber=orderNumberSetting("补片"); //获取对象集合循环进行新增修改 List patchLoglist = JSONArray.parseArray(JSONObject.toJSONString(object.get("patchLog")), PatchLog.class); if (!patchLoglist.isEmpty()){ for (PatchLog patchLog : patchLoglist) { //添加返工记录,修改次破明细数量 patchMapper.insertReplenish(patchLog,oddNumber); patchMapper.updateDamageDetails(patchLog); patchMapper.updateReportingWorkDetail(patchLog.getReportingWorkId(), Integer.valueOf(patchLog.getOrderSort()),patchLog.getTechnologyNumber()); } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e.toString()); sysError.setFunc("saveOrder"); sysErrorService.insert(sysError); saveState = false; } //保存日志 Log log = new Log(); log.setContent(object.toString()); log.setFunction("saveReplenish补片新增"); log.setOperatorId((String) object.get("userId")); log.setOperator((String) object.get("userName")); logService.saveLog(log); return saveState; } public Boolean updateReplenish(Map object) { boolean saveState = true; Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } //获取对象集合循环进行新增修改 List patchLoglist = JSONArray.parseArray(JSONObject.toJSONString(object.get("patchLog")), PatchLog.class); if (!patchLoglist.isEmpty()){ for (PatchLog patchLog : patchLoglist) { PatchLog patchLog1=patchMapper.selectOne(new QueryWrapper().eq("id",patchLog.getId())); //判断是否已经审核 if(patchLog1.getReviewStatus()==0){ ReportingWork reportingWork = reportingWorkMapper .selectOne(new QueryWrapper() .eq("reporting_work_id",patchLog.getReportingWorkId())); //修改小片流程卡数量 patchMapper.updateOrderProcessDetail(patchLog,reportingWork); //审核 patchMapper.updateReplenish(patchLog,userName); }else{ saveState = false; } Log log = new Log(); log.setContent(object.toString()); log.setFunction("updateReplenish补片审核"); log.setOperatorId((String) object.get("userId")); log.setOperator((String) object.get("userName")); logService.saveLog(log); } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e.toString()); sysError.setFunc("updateReplenish"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public String orderNumberSetting(String type) { //根据类型自动生成不同的操作单号 String alias=""; if(Objects.equals(type, "补片")){ alias="BP"; } //查询当天最新的编号 String str=patchMapper.getMaximum(); if (str == null){ str="00"; } String maximum = str.substring(str.length() - 2); int lastTwoInteger = Integer.parseInt(maximum); //设置两位不够补0 String formattedNumber = String.format("%02d", lastTwoInteger+1); //格式化当前日期 Date currentDate = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd"); String formattedDate = dateFormat.format(currentDate); String oddNumbers = alias+formattedDate+formattedNumber; return oddNumbers; } public Object selectPrintSv(java.sql.Date selectTime1, java.sql.Date selectTime2, FlowCard flowCard) { Map map = new HashMap<>(); map.put("data", flowCardMapper.selectReplenishPrintMp(selectTime1,selectTime2,flowCard)); map.put("type", flowCardMapper.selectType()); return map; } public Map getSelectPrintCustomLabelSv(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()) { for (FlowCard flowCard : flowCardList) { if (lableType != 2){//成品标签 Map itemmap = new HashMap<>(); itemmap.put("data", flowCardMapper.getRepairPrintCustomData(flowCard.getProcessId(),flowCard.getTechnologyNumber(),flowCard.getReportingWorkId(),flowCard.getOrderNumber())); list.add(itemmap); } else{//小片标签 Map itemmap = new HashMap<>(); List> customDataSemi =flowCardMapper.getRepairPrintCustomDataSemi(flowCard.getProcessId(),flowCard.getTechnologyNumber(),flowCard.getReportingWorkId(),flowCard.getOrderNumber()); for (Map dataMap : customDataSemi) { dataMap.put("newList", flowCardMapper.getgetPrintCustomDataSemiSp( flowCard.getProcessId(), dataMap.get("technologyNumber").toString(), flowCard.getOrderNumber() )); } itemmap.put("data", customDataSemi); list.add(itemmap); } } } map.put("data", list); map.put("title", flowCardMapper.getPrintTitle(type)); return map; } public Boolean deleteReplenishSv(Map object) { boolean saveState = true; Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } //获取对象集合循环进行新增修改 List patchLoglist = JSONArray.parseArray(JSONObject.toJSONString(object.get("patchLog")), PatchLog.class); if (!patchLoglist.isEmpty()){ for (PatchLog patchLog : patchLoglist) { PatchLog patchLog1=patchMapper.selectOne(new QueryWrapper().eq("id",patchLog.getId())); //判断是否已经审核 if(patchLog1.getReviewStatus()==0){ //删除补片表对应补片id数据 patchMapper.deleteReplenishMp(patchLog1.getId()); //删除次破明细表 patchMapper.updatePatchDdMp(patchLog1.getReportingWorkId(),patchLog1.getOrderSort(),patchLog1.getTechnologyNumber(),patchLog1.getPatchNum(),patchLog1.getPatchReason()); //修改报工明细表状态 patchMapper.updatePatchBgMp(patchLog1.getReportingWorkId(),patchLog1.getOrderSort(),patchLog1.getTechnologyNumber()); //修改报工主表次破数量 reportingWorkMapper.updateRWPatchNum(patchLog1.getReportingWorkId(),patchLog1.getPatchNum()); //修改报工副表次破数量 reportingWorkMapper.updateRWDPatchNum(patchLog1.getReportingWorkId(),patchLog1.getOrderSort(),patchLog1.getTechnologyNumber(),patchLog1.getPatchNum()); //更新报工流程表数据 reportingWorkMapper.updateReplenishWorkProcess(patchLog1.getProcessId(),patchLog1.getOrderSort(),patchLog1.getTechnologyNumber(),patchLog1.getPatchNum(),patchLog1.getPatchProcesses()); } else{ saveState = false; } } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e.toString()); sysError.setFunc("deleteReplenishSv"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Boolean updateCancelReviewSv(Map object) { boolean saveState = true; Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); //try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } //获取对象集合循环进行新增修改 List patchLoglist = JSONArray.parseArray(JSONObject.toJSONString(object.get("patchLog")), PatchLog.class); if (!patchLoglist.isEmpty()){ for (PatchLog patchLog : patchLoglist) { //查询是否已生成工程号 Integer projectCount = patchMapper.selectProjectCount(patchLog.getProcessId(),patchLog.getPatchId(),patchLog.getTechnologyNumber()); //查询流程卡工艺流程 String technologicalProcess = reportingWorkMapper.SelectTechnologicalProcess(patchLog.getProcessId(), String.valueOf(patchLog.getTechnologyNumber())); if (projectCount == 0){ if (technologicalProcess!=null || !technologicalProcess.equals("")) { String[] processList = technologicalProcess.split("->"); //获取工艺流程第一个工序 String interceptProcess = processList[0]; Integer firstStep=reportingWorkMapper.getFirstStep(patchLog.getProcessId(),patchLog.getOrderSort(),patchLog.getTechnologyNumber(),interceptProcess); if (firstStep>=patchLog.getPatchNum()){ ReportingWork reportingWork = reportingWorkMapper .selectOne(new QueryWrapper().eq("reporting_work_id",patchLog.getReportingWorkId())); //修改小片流程卡数量 patchMapper.updateOrderProcessDetailCancel(patchLog,reportingWork); //审核 patchMapper.updateReplenishCancel(patchLog); } else { saveState = false; } }else{ saveState = false; } Log log = new Log(); log.setContent(object.toString()); log.setFunction("updateCancelReviewSv补片反审"); log.setOperatorId((String) object.get("userId")); log.setOperator((String) object.get("userName")); logService.saveLog(log); } else { saveState = false; } } } return saveState; } }