|
@@ -0,0 +1,916 @@
|
|
|
+package com.zkqy.amichi.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
+import com.alibaba.fastjson2.JSON;
|
|
|
+import com.alibaba.fastjson2.JSONArray;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
+import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
|
|
+import com.zkqy.amichi.domain.*;
|
|
|
+import com.zkqy.amichi.jd.domain.JdProductionOrder;
|
|
|
+import com.zkqy.amichi.jd.domain.MaterialRetentionLogVo;
|
|
|
+import com.zkqy.amichi.mapper.*;
|
|
|
+import com.zkqy.amichi.service.RkService;
|
|
|
+import com.zkqy.amichi.utils.WarehouseEntryNumberGenerator;
|
|
|
+import com.zkqy.common.utils.DateUtils;
|
|
|
+import com.zkqy.execution.produce.dispersed.mapper.BpmExecuteNodeLogMapper;
|
|
|
+import com.zkqy.execution.produce.dispersed.mapper.BpmExecuteProcessMapper;
|
|
|
+import com.zkqy.system.mapper.SysDictDataMapper;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.core.io.Resource;
|
|
|
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class rkServiceImpl implements RkService {
|
|
|
+
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private StationInformationMapper stationInformationMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ReportInformationSheetMapper reportInformationSheetMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExceptionReportInformationSheetMapper exceptionReportInformationSheetMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProductionPlanningManagementMapper productionPlanningManagementMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BpmExecuteProcessMapper bpmExecuteProcessMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BpmExecuteNodeLogMapper bpmExecuteNodeLogMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PlanTaskDetailsServiceImpl planTaskDetailsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProductionCardFlowMapper productionCardFlowMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RingScanInformationMapper ringScanInformationMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TerminalInformationMapper terminalInformationMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MaterialRetentionLogMapper materialRetentionLogMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RingScanInformationFirstMapper ringScanInformationFirstMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RingTerminalMapper ringTerminalMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RingScanInformationProdOrderScanningMapper prodOrderScanningMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PlanTaskDetailsMapper planTaskDetailsMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ ProcedureListErpMapper procedureListErpMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ ProcedureListMapper procedureListMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
|
|
+
|
|
|
+ @Value("classpath:processReport.json")
|
|
|
+ private Resource processReport;
|
|
|
+
|
|
|
+
|
|
|
+ @Value("classpath:storage.json")
|
|
|
+ private Resource storage;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ SysDictDataMapper dictDataMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ WarehouseEntryNumberGenerator warehouseEntryNumberGenerator;
|
|
|
+
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ ProductionReportingRecordMapper productionReportingRecordMapper;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断走入库还是走生产汇报的逻辑
|
|
|
+ * 前置一直在更新,包装检验,或者试机的数量,如果满足就创建生产汇报单据
|
|
|
+ * 前置也在更新,可入库的数量,如果满足就下推生产入库单。
|
|
|
+ * @param productionOrderNumber
|
|
|
+ * type 1入成品 type 2 入利库 type 3走工序汇报逻辑,实际我并没有获取这个参数
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String generateWarehouseWarrant(String productionOrderNumber,String gxName,String type,RingScanInformation ringScanInformation){
|
|
|
+ if(gxName.equals("入库")){
|
|
|
+ RingScanInformationFirst newRingScanInformationFirst = new RingScanInformationFirst();
|
|
|
+ newRingScanInformationFirst.setProductionOrderNumber(productionOrderNumber);
|
|
|
+ //查询第一次新增时确定的是试机入库还是包装入库
|
|
|
+ List<RingScanInformationFirst> ringScanInformationFirsts1 = ringScanInformationFirstMapper.selectRingScanInformationFirstList(newRingScanInformationFirst);
|
|
|
+ if(ringScanInformationFirsts1.size()>0) {
|
|
|
+ RingScanInformationFirst ringScanInformationFirst = ringScanInformationFirsts1.get(0);
|
|
|
+ //包装或者检验
|
|
|
+ String packingOrInspection = ringScanInformationFirst.getPackingOrInspection();
|
|
|
+ if(packingOrInspection.equals("1")){//检查包装检验 --够了--下推入库单
|
|
|
+ PlanTaskDetails planTaskDetails=new PlanTaskDetails();
|
|
|
+ planTaskDetails.setDemandDocument(productionOrderNumber);
|
|
|
+ //查询即将入库的产品信息
|
|
|
+ List<PlanTaskDetails> planTaskDetails1 = planTaskDetailsMapper.selectPlanTaskDetailsList(planTaskDetails);
|
|
|
+ if(ringScanInformationFirst.getRks().equals(ringScanInformationFirst.getProductionOrderTotalQuantity())){
|
|
|
+ //加更正生产订单状态
|
|
|
+ planTaskDetails.setStatus("2");//生产完成
|
|
|
+ int i2 = planTaskDetailsMapper.updatePlanTaskDetailsByDemandDocument(planTaskDetails);
|
|
|
+ }
|
|
|
+ //入库 typ 1 入成品 type 入利库
|
|
|
+ Map<String,String> ac= erpWareHouSing(planTaskDetails1.get(0), type, ringScanInformation, "单量推送");
|
|
|
+ if(ac.get("msg").equals("未查询到生产汇报信息")){
|
|
|
+ return "未查询到生产汇报信息";
|
|
|
+ }
|
|
|
+ if(ac.get("msg").equals("入库单创建失败")){
|
|
|
+ return "入库单创建失败"+ac.get("error");
|
|
|
+ }
|
|
|
+ if(ac.get("msg").equals("入库单提交失败")){
|
|
|
+ return "入库单提交失败";
|
|
|
+ }
|
|
|
+ if(ac.get("msg").equals("入库单审核失败")){
|
|
|
+ return "入库单审核失败";
|
|
|
+ }
|
|
|
+ return "入库成功";
|
|
|
+ }else if(packingOrInspection.equals("2")){ //试机数量 --够了--下推入库单
|
|
|
+ //入库数量等于生产订单总数那么就发起入库申请
|
|
|
+ if(ringScanInformationFirst.getRks().equals(ringScanInformationFirst.getProductionOrderTotalQuantity())){
|
|
|
+ PlanTaskDetails planTaskDetails=new PlanTaskDetails();
|
|
|
+ planTaskDetails.setDemandDocument(productionOrderNumber);
|
|
|
+ int i = planTaskDetailsMapper.updatePlanTaskDetailsByDemandDocument(planTaskDetails);
|
|
|
+ //查询即将入库的产品信息
|
|
|
+ List<PlanTaskDetails> planTaskDetails1 = planTaskDetailsMapper.selectPlanTaskDetailsList(planTaskDetails);
|
|
|
+ //入库 typ 1 入成品 type 入利库
|
|
|
+ Map<String,String> ac= erpWareHouSing(planTaskDetails1.get(0), type, ringScanInformation, "全量推送");
|
|
|
+ if(ac.get("msg").equals("未查询到生产汇报信息")){
|
|
|
+ return "未查询到生产汇报信息";
|
|
|
+ }
|
|
|
+ if(ac.get("msg").equals("入库单创建失败")){
|
|
|
+ return "入库单创建失败"+ac.get("error");
|
|
|
+ }
|
|
|
+ if(ac.get("msg").equals("入库单提交失败")){
|
|
|
+ return "入库单创建失败";
|
|
|
+ }
|
|
|
+ if(ac.get("msg").equals("入库单审核失败")){
|
|
|
+ return "入库单审核失败";
|
|
|
+ }
|
|
|
+ //加更正生产订单状态
|
|
|
+ planTaskDetails.setStatus("2");//生产完成
|
|
|
+ int i2 = planTaskDetailsMapper.updatePlanTaskDetailsByDemandDocument(planTaskDetails);
|
|
|
+ return "入库成功";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "正在入库";
|
|
|
+ }else if(type.equals("3")||type.equals("4")){//等于代表走工序汇报逻辑 1 和 2代表入的什么仓库(1:成品 2:利库) 3和4 代表走工序汇报逻辑(3:成品 4:利库)
|
|
|
+ RingScanInformationFirst newRingScanInformationFirst = new RingScanInformationFirst();
|
|
|
+ newRingScanInformationFirst.setProductionOrderNumber(productionOrderNumber);
|
|
|
+ //查询第一次新增时确定的是试机入库还是包装入库
|
|
|
+ List<RingScanInformationFirst> ringScanInformationFirsts1 = ringScanInformationFirstMapper.selectRingScanInformationFirstList(newRingScanInformationFirst);
|
|
|
+ if(ringScanInformationFirsts1.size()>0){
|
|
|
+ RingScanInformationFirst ringScanInformationFirst = ringScanInformationFirsts1.get(0);
|
|
|
+ String packingOrInspection = ringScanInformationFirst.getPackingOrInspection();
|
|
|
+ //改当前生产订单的状态
|
|
|
+ PlanTaskDetails planTaskDetails=new PlanTaskDetails();
|
|
|
+ planTaskDetails.setDemandDocument(productionOrderNumber);
|
|
|
+ //查询即将入库的产品信息
|
|
|
+ List<PlanTaskDetails> planTaskDetails1 = planTaskDetailsMapper.selectPlanTaskDetailsList(planTaskDetails);
|
|
|
+ //检查包装或者试机数量
|
|
|
+ if(packingOrInspection.equals("1")){//检查成品检验 --如果够了-下推生产汇报单
|
|
|
+ //看包装跟当前生产订单总数量是否相等
|
|
|
+ if(ringScanInformationFirst.getPackingQuantity().equals(ringScanInformationFirst.getProductionOrderTotalQuantity())){
|
|
|
+ //加更正生产订单状态
|
|
|
+ planTaskDetails.setStatus("2");//生产完成
|
|
|
+ int i2 = planTaskDetailsMapper.updatePlanTaskDetailsByDemandDocument(planTaskDetails);
|
|
|
+ //扣料操作
|
|
|
+ String s = this.sweepingMaterial(ringScanInformation.getOrderNumber(), ringScanInformation.getProductionOrderNumber(), //订单号 生产订单号
|
|
|
+ ringScanInformation.getProcessName(), ringScanInformation.getNativeNumbering());//工序 流转卡信息
|
|
|
+ }
|
|
|
+ //工序汇报 0 为单个推送
|
|
|
+ erpProcessReport(planTaskDetails1.get(0),type,"单量推送",ringScanInformation);
|
|
|
+ System.out.println("工序汇报单量推送");
|
|
|
+ }else if(packingOrInspection.equals("2")){ //试机数量--下推生产汇报单
|
|
|
+ //看包装跟当前生产订单总数量是否相等
|
|
|
+ if(ringScanInformationFirst.getInspectionQuantity().equals(ringScanInformationFirst.getProductionOrderTotalQuantity())){
|
|
|
+ //生产汇报 1为批量推送
|
|
|
+ String aa = erpProcessReport(planTaskDetails1.get(0), type, "全量推送", ringScanInformation);
|
|
|
+ //扣料操作
|
|
|
+ String s = this.sweepingMaterial(ringScanInformation.getOrderNumber(), ringScanInformation.getProductionOrderNumber(), //订单号 生产订单号
|
|
|
+ ringScanInformation.getProcessName(), ringScanInformation.getNativeNumbering());//工序 流转卡信息
|
|
|
+ //加更正生产订单状态
|
|
|
+ planTaskDetails.setStatus("2");//生产完成
|
|
|
+ int i2 = planTaskDetailsMapper.updatePlanTaskDetailsByDemandDocument(planTaskDetails);
|
|
|
+ System.out.println("工序汇报全量推送");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "工序汇报成功";
|
|
|
+ }
|
|
|
+ return "有问题请联系管理员";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生产汇报单是否下推提交审核成功
|
|
|
+ * txfs:判断是成品检验还是试机检验
|
|
|
+ * @param planTaskDetails1
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String erpProcessReport(PlanTaskDetails planTaskDetails1,String type,String txfs,RingScanInformation ringScanInformation) {
|
|
|
+ //生产汇报
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
+ try {
|
|
|
+ Map<String, Object> jsonData = objectMapper.readValue(processReport.getInputStream(), Map.class);
|
|
|
+ //得到Model
|
|
|
+ String model1 = objectMapper.writeValueAsString(jsonData.get("Model"));
|
|
|
+ Map<String,Object> modelMap = objectMapper.readValue(model1, Map.class);
|
|
|
+ String localDateTimeStr = DateUtils.toLocalDateTimeStr(LocalDateTime.now());
|
|
|
+ modelMap.put("FDate",localDateTimeStr);
|
|
|
+ //得到FEntity
|
|
|
+ String fEntityString = objectMapper.writeValueAsString(modelMap.get("FEntity"));
|
|
|
+ List<Map> list = objectMapper.readValue(fEntityString, List.class);
|
|
|
+ Map map = list.get(0);
|
|
|
+ String fMaterialId = map.get("FMaterialId").toString();
|
|
|
+ map.put("FSrcEntryId",planTaskDetails1.getFtreeEntityFentryid());
|
|
|
+ String fMaterialIdString = objectMapper.writeValueAsString(map.get("FMaterialId"));
|
|
|
+ Map<String,String > map1 = objectMapper.readValue(fMaterialIdString, Map.class);
|
|
|
+ map1.put("FNumber",planTaskDetails1.getMaterialId());
|
|
|
+ map.put("FMaterialId",map1);
|
|
|
+
|
|
|
+ //生产车间信息
|
|
|
+ boolean present = Optional.ofNullable(planTaskDetails1.getShopCoding()).filter(a -> !a.isEmpty()).isPresent();
|
|
|
+ if(present){
|
|
|
+ HashMap<String, String> shopCoding = new HashMap<>();
|
|
|
+ shopCoding.put("FNumber",planTaskDetails1.getShopCoding());
|
|
|
+ map.put("FWorkshipId",shopCoding);
|
|
|
+ }
|
|
|
+
|
|
|
+ map.put("FMoBillNo",planTaskDetails1.getDemandDocument());
|
|
|
+ map.put("FSrcBillNo",planTaskDetails1.getDemandDocument()); //生产订单号
|
|
|
+ map.put("FReqBillNo",ringScanInformation.getOverNumber()); //订单号
|
|
|
+ map.put("FStartTime",localDateTimeStr);
|
|
|
+ map.put("FEndTime",localDateTimeStr);
|
|
|
+ HashMap fbomdIdMap=new HashMap();
|
|
|
+ fbomdIdMap.put("FNumber",planTaskDetails1.getFbomIdFnumber());
|
|
|
+ map.put("FBomId",fbomdIdMap);
|
|
|
+ HashMap FStockId=new HashMap();
|
|
|
+ if(type.equals("3")){
|
|
|
+ FStockId.put("FNumber","CK007"); //成品仓
|
|
|
+ }else if(type.equals("4")) {
|
|
|
+ FStockId.put("FNumber","CK006"); //利库仓
|
|
|
+ }
|
|
|
+
|
|
|
+ map.put("FStockId",FStockId);
|
|
|
+ String FSNUnitIDJson = objectMapper.writeValueAsString( map.get("FSNUnitID"));
|
|
|
+ Map<String,String > FSNUnitIDMap = objectMapper.readValue(FSNUnitIDJson, Map.class);
|
|
|
+ FSNUnitIDMap.put("FNumber",planTaskDetails1.getFunitidfNumber());
|
|
|
+ map.put("FReqBillNo",planTaskDetails1.getFsrcbillno()); //源单编号
|
|
|
+ map.put("FSrcInterId",planTaskDetails1.getFid());
|
|
|
+ map.put("FMoId",planTaskDetails1.getFid());
|
|
|
+ map.put("FMoEntryId",planTaskDetails1.getFtreeEntityFentryid());
|
|
|
+ map.put("FMOMAINENTRYID",planTaskDetails1.getFtreeEntityFentryid());
|
|
|
+
|
|
|
+ if(txfs.equals("全量推送")){
|
|
|
+ //序列号单据体---循环
|
|
|
+ ProductionCardFlow productionCardFlow=new ProductionCardFlow();
|
|
|
+ productionCardFlow.setDemandDocumentNumber(planTaskDetails1.getDemandDocument());//流转卡序列号
|
|
|
+ List<ProductionCardFlow> productionCardFlows = productionCardFlowMapper.selectProductionCardFlowList(productionCardFlow);
|
|
|
+
|
|
|
+ map.put("FSNQty",productionCardFlows.size()); //序列号数量
|
|
|
+ map.put("FFinishQty",planTaskDetails1.getQuantity()); //完成数量
|
|
|
+ map.put("FFinishQty",planTaskDetails1.getQuantity()); //合格数量
|
|
|
+
|
|
|
+ List<Map> list1=new ArrayList<>();
|
|
|
+ //String FSerialSubEntity = map.get("FSerialSubEntity").toString();
|
|
|
+ String FSerialSubEntityJson = objectMapper.writeValueAsString( map.get("FSerialSubEntity"));
|
|
|
+ List<Map> fSerialSubEntitylist = objectMapper.readValue(FSerialSubEntityJson, List.class);
|
|
|
+ productionCardFlows.forEach(item->{
|
|
|
+ try {
|
|
|
+ // 将 fSerialSubEntitylist.get(0) 转换为 JSON 字符串,再反序列化为新的 Map
|
|
|
+ String map2Json = objectMapper.writeValueAsString(fSerialSubEntitylist.get(0));
|
|
|
+ Map<String, Object> map2 = objectMapper.readValue(map2Json, Map.class);
|
|
|
+
|
|
|
+ // 修改 map2 中的 FSerialNo
|
|
|
+ map2.put("FSerialNo", item.getSerialNumber());
|
|
|
+
|
|
|
+ // 处理 FSerialId
|
|
|
+ Map<String, String> fSerialIdMap = null;
|
|
|
+ if (map2.get("FSerialId") != null) {
|
|
|
+ String fSerialIdJson = objectMapper.writeValueAsString(map2.get("FSerialId"));
|
|
|
+ fSerialIdMap = objectMapper.readValue(fSerialIdJson, Map.class);
|
|
|
+ } else {
|
|
|
+ fSerialIdMap = new HashMap<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 修改 FSerialId 中的 FNUMBER
|
|
|
+ fSerialIdMap.put("FNUMBER", item.getSerialNumber());
|
|
|
+ map2.put("FSerialId", fSerialIdMap);
|
|
|
+
|
|
|
+ // 将修改后的 map2 添加到 list1
|
|
|
+ list1.add(map2);
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ map.put("FSerialSubEntity",list1);
|
|
|
+ }else if(txfs.equals("单量推送")) { //==等于0的情况
|
|
|
+ //序列号单据体---循环
|
|
|
+ ProductionCardFlow productionCardFlow=new ProductionCardFlow();
|
|
|
+ productionCardFlow.setSerialNumber(ringScanInformation.getNativeNumbering());//流转卡序列号
|
|
|
+ List<ProductionCardFlow> productionCardFlows = productionCardFlowMapper.selectProductionCardFlowList(productionCardFlow);
|
|
|
+
|
|
|
+ map.put("FSNQty","1"); //序列号数量
|
|
|
+ map.put("FFinishQty","1"); //完成数量
|
|
|
+ map.put("FFinishQty","1"); //合格数量
|
|
|
+
|
|
|
+ List<Map> list1=new ArrayList<>();
|
|
|
+ String FSerialSubEntityJson = objectMapper.writeValueAsString( map.get("FSerialSubEntity"));
|
|
|
+ List<Map> fSerialSubEntitylist = objectMapper.readValue(FSerialSubEntityJson, List.class);
|
|
|
+ productionCardFlows.forEach(item->{
|
|
|
+ try {
|
|
|
+ // 将 fSerialSubEntitylist.get(0) 转换为 JSON 字符串,再反序列化为新的 Map
|
|
|
+ String map2Json = objectMapper.writeValueAsString(fSerialSubEntitylist.get(0));
|
|
|
+ Map<String, Object> map2 = objectMapper.readValue(map2Json, Map.class);
|
|
|
+
|
|
|
+ // 修改 map2 中的 FSerialNo
|
|
|
+ map2.put("FSerialNo", item.getSerialNumber());
|
|
|
+
|
|
|
+ // 处理 FSerialId
|
|
|
+ Map<String, String> fSerialIdMap = null;
|
|
|
+ if (map2.get("FSerialId") != null) {
|
|
|
+ String fSerialIdJson = objectMapper.writeValueAsString(map2.get("FSerialId"));
|
|
|
+ fSerialIdMap = objectMapper.readValue(fSerialIdJson, Map.class);
|
|
|
+ } else {
|
|
|
+ fSerialIdMap = new HashMap<>();
|
|
|
+ }
|
|
|
+ // 修改 FSerialId 中的 FNUMBER
|
|
|
+ fSerialIdMap.put("FNUMBER", item.getSerialNumber());
|
|
|
+ map2.put("FSerialId", fSerialIdMap);
|
|
|
+
|
|
|
+ // 将修改后的 map2 添加到 list1
|
|
|
+ list1.add(map2);
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ map.put("FSerialSubEntity",list1);
|
|
|
+ }
|
|
|
+ //表连接关系
|
|
|
+ String FEntity_LinkJSON = objectMapper.writeValueAsString(map.get("FEntity_Link"));
|
|
|
+ List<Map> FEntity_LinkJSONList = objectMapper.readValue(FEntity_LinkJSON, List.class);
|
|
|
+ Map map3 = FEntity_LinkJSONList.get(0);
|
|
|
+ map3.put("FEntity_Link_FSBillId",planTaskDetails1.getFid());
|
|
|
+ map3.put("FEntity_Link_FSId",planTaskDetails1.getFtreeEntityFentryid());
|
|
|
+ List<Map> list2=new ArrayList<>();
|
|
|
+ list2.add(map3);
|
|
|
+ map.put("FEntity_Link",list2);
|
|
|
+ List<Map> FEntityList=new ArrayList<>();
|
|
|
+ FEntityList.add(map);
|
|
|
+ modelMap.put("FEntity",FEntityList);
|
|
|
+
|
|
|
+ //转成String 字符
|
|
|
+
|
|
|
+ jsonData.put("Model", modelMap);
|
|
|
+
|
|
|
+ String zxJson = objectMapper.writeValueAsString(jsonData);
|
|
|
+ //生产用料清单结果
|
|
|
+ K3CloudApi api = new K3CloudApi();
|
|
|
+ try {
|
|
|
+ //执行JSO结果
|
|
|
+ String resultJsonJG = api.save("PRD_MORPT", zxJson);
|
|
|
+ //分析结构
|
|
|
+ Map resultString = objectMapper.readValue(resultJsonJG, Map.class);
|
|
|
+
|
|
|
+ String result = objectMapper.writeValueAsString(resultString.get("Result"));
|
|
|
+ Map<String,Object> resultMap= objectMapper.readValue(result, Map.class);
|
|
|
+ String number = resultMap.get("Number").toString();//编号
|
|
|
+
|
|
|
+ String s4 = documentExecutionJudgment1(objectMapper, resultJsonJG, "工序创建成功", "工序汇报提交失败");
|
|
|
+ if(s4.equals("工序汇报提交失败")){
|
|
|
+ return resultJsonJG;
|
|
|
+ }
|
|
|
+ //执行提交
|
|
|
+ String tjQuery="{\n" +
|
|
|
+ " \"Numbers\": [],\n" +
|
|
|
+ " \"Ids\": \"\",\n" +
|
|
|
+ " \"SelectedPostId\": 0,\n" +
|
|
|
+ " \"NetworkCtrl\": \"\",\n" +
|
|
|
+ " \"IgnoreInterationFlag\": \"true\"\n" +
|
|
|
+ "}";
|
|
|
+ Map map4 = objectMapper.readValue(tjQuery, Map.class);
|
|
|
+
|
|
|
+ List<String> numberjson = new ArrayList<>();
|
|
|
+ numberjson.add(number);
|
|
|
+ map4.put("Numbers",numberjson);
|
|
|
+ String tjExeJSON = objectMapper.writeValueAsString(map4);
|
|
|
+ String s1 = api.submit("PRD_MORPT",tjExeJSON);
|
|
|
+ String s3 = documentExecutionJudgment1(objectMapper, s1, "工序汇提交成功", "工序汇报提交失败");
|
|
|
+ if(s3.equals("工序汇报提交失败")){
|
|
|
+ return s1;
|
|
|
+ }
|
|
|
+ //执行审核
|
|
|
+ String shQuery="{\n" +
|
|
|
+ " \"Numbers\": [],\n" +
|
|
|
+ " \"Ids\": \"\",\n" +
|
|
|
+ " \"InterationFlags\": \"\",\n" +
|
|
|
+ " \"NetworkCtrl\": \"\",\n" +
|
|
|
+ " \"IsVerifyProcInst\": \"\",\n" +
|
|
|
+ " \"IgnoreInterationFlag\": \"true\",\n" +
|
|
|
+ " \"UseBatControlTimes\": \"false\"\n" +
|
|
|
+ "}";
|
|
|
+
|
|
|
+ Map map5 = objectMapper.readValue(shQuery, Map.class);
|
|
|
+ List<String> number2json = new ArrayList<>();
|
|
|
+ number2json.add(number);
|
|
|
+ map5.put("Numbers",number2json);
|
|
|
+ String shExeJSON = objectMapper.writeValueAsString(map4);
|
|
|
+ String s2 = api.audit("PRD_MORPT",shExeJSON);
|
|
|
+ String s = documentExecutionJudgment1(objectMapper, s2, "工序汇报审核成功", "工序汇报审核失败");
|
|
|
+ if(s.equals("工序汇报审核失败")){
|
|
|
+ return s2;
|
|
|
+ }
|
|
|
+ if(s.equals("工序汇报审核成功")){
|
|
|
+ //添加一张审核记录表,单据编号,序列号,数量
|
|
|
+ ProductionReportingRecord productionReportingRecord=new ProductionReportingRecord();
|
|
|
+ if(txfs.equals("全量推送")) {
|
|
|
+ //序列号单据体---循环
|
|
|
+ ProductionCardFlow productionCardFlow = new ProductionCardFlow();
|
|
|
+ productionCardFlow.setDemandDocumentNumber(planTaskDetails1.getDemandDocument());//流转卡序列号
|
|
|
+ List<ProductionCardFlow> productionCardFlows = productionCardFlowMapper.selectProductionCardFlowList(productionCardFlow);
|
|
|
+ if(productionCardFlows.size()>0){
|
|
|
+ //单据编号
|
|
|
+ productionReportingRecord.setNumber(number);
|
|
|
+ //整体的所有序列号
|
|
|
+ productionReportingRecord.setXlhArray(productionCardFlows.stream().map(ProductionCardFlow::getSerialNumber).collect(Collectors.joining(",")));
|
|
|
+ productionReportingRecord.setType("2");//试机检验
|
|
|
+ }
|
|
|
+ productionReportingRecordMapper.insertProductionReportingRecord(productionReportingRecord);
|
|
|
+ }else if(txfs.equals("单量推送")) {
|
|
|
+ //序列号单据体---循环
|
|
|
+ ProductionCardFlow productionCardFlow=new ProductionCardFlow();
|
|
|
+ productionCardFlow.setSerialNumber(ringScanInformation.getNativeNumbering());//流转卡序列号
|
|
|
+ List<ProductionCardFlow> productionCardFlows = productionCardFlowMapper.selectProductionCardFlowList(productionCardFlow);
|
|
|
+ if (productionCardFlows.size()>0){
|
|
|
+ //单据编号
|
|
|
+ productionReportingRecord.setNumber(number);
|
|
|
+ //只有一个序列号
|
|
|
+ productionReportingRecord.setXlh(productionCardFlows.get(0).getSerialNumber());
|
|
|
+ productionReportingRecord.setType("1");//成品检验
|
|
|
+ productionReportingRecordMapper.insertProductionReportingRecord(productionReportingRecord);
|
|
|
+ System.out.println("保存工序汇报单据数据成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ }
|
|
|
+ return "汇报成功";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 操作ERP生产入库单
|
|
|
+ * @param planTaskDetails1
|
|
|
+ * planTaskDetails1 产品信息
|
|
|
+ * type 入那个库
|
|
|
+ * ringScanInformation 扫描信息
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map<String,String> erpWareHouSing(PlanTaskDetails planTaskDetails1,String type,RingScanInformation ringScanInformation,String isDOrQ){
|
|
|
+ //生产汇报
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
+ //生产用料清单结果
|
|
|
+ K3CloudApi api = new K3CloudApi();
|
|
|
+ try {
|
|
|
+ String nr="";
|
|
|
+ if(isDOrQ.equals("单量推送")){
|
|
|
+ //当前扫描的序列号信息
|
|
|
+ String nativeNumbering = ringScanInformation.getNativeNumbering();
|
|
|
+ ProductionReportingRecord productionReportingRecord=new ProductionReportingRecord();
|
|
|
+ productionReportingRecord.setXlh(nativeNumbering);
|
|
|
+ List<ProductionReportingRecord> productionReportingRecords = productionReportingRecordMapper.selectProductionReportingRecordList(productionReportingRecord);
|
|
|
+ if(productionReportingRecords.size()>0){
|
|
|
+ //查询生产汇报工序的基本信息
|
|
|
+ nr="{\n" +
|
|
|
+ " \"FormId\": \"PRD_MORPT\",\n" +
|
|
|
+ " \"FieldKeys\": \"fbillno,fid,FSrcBillNo,FEntity_FEntryId,FDate,FUnitID.FNumber\",\n" +
|
|
|
+ " \"FilterString\": [{\"Left\":\"\",\"FieldName\":\"FBillNo\",\"Compare\":\"17\",\"Value\":\""+productionReportingRecords.get(0).getNumber()+"\",\"Right\":\"\",\"Logic\":0}],\n" +
|
|
|
+ " \"OrderString\": \"\",\n" +
|
|
|
+ " \"TopRowCount\": 0,\n" +
|
|
|
+ " \"StartRow\": 0,\n" +
|
|
|
+ " \"Limit\": 2000,\n" +
|
|
|
+ " \"SubSystemId\": \"\"\n" +
|
|
|
+ "}";
|
|
|
+ }else{
|
|
|
+ Map<String,String> abc= new HashMap<>();
|
|
|
+ abc.put("msg","未查询到生产汇报信息");
|
|
|
+ return abc;
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //查询生产汇报工序的基本信息
|
|
|
+ nr="{\n" +
|
|
|
+ " \"FormId\": \"PRD_MORPT\",\n" +
|
|
|
+ " \"FieldKeys\": \"fbillno,fid,FSrcBillNo,FEntity_FEntryId,FDate,FUnitID.FNumber\",\n" +
|
|
|
+ " \"FilterString\": [{\"Left\":\"\",\"FieldName\":\"FSrcBillNo\",\"Compare\":\"17\",\"Value\":\""+planTaskDetails1.getDemandDocument()+"\",\"Right\":\"\",\"Logic\":0}],\n" +
|
|
|
+ " \"OrderString\": \"\",\n" +
|
|
|
+ " \"TopRowCount\": 0,\n" +
|
|
|
+ " \"StartRow\": 0,\n" +
|
|
|
+ " \"Limit\": 2000,\n" +
|
|
|
+ " \"SubSystemId\": \"\"\n" +
|
|
|
+ "}";
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询结果
|
|
|
+ String nrString = api.billQuery(nr);
|
|
|
+ List<Map> mapList1 = JSONArray.parseArray(nrString, Map.class);
|
|
|
+ Map map2 = mapList1.get(0);
|
|
|
+ String fbillno = map2.get("fbillno").toString();
|
|
|
+ String fid = map2.get("fid").toString();
|
|
|
+ String FEntityFEntryId = map2.get("FEntity.FEntryId").toString();
|
|
|
+ String FDate = map2.get("FDate").toString();
|
|
|
+ String FSrcBillNo = map2.get("FSrcBillNo").toString();
|
|
|
+ String FUnitIDFNumber = map2.get("FUnitID.FNumber").toString();
|
|
|
+ //生成入库单
|
|
|
+ Map<String, Object> jsonData2 = objectMapper.readValue(storage.getInputStream(), LinkedHashMap.class);
|
|
|
+ //得到Model
|
|
|
+ String model2 = objectMapper.writeValueAsString(jsonData2.get("Model"));
|
|
|
+ LinkedHashMap map6 = JSONObject.parseObject(model2, LinkedHashMap.class);
|
|
|
+ map6.put("FDate",DateUtils.toLocalDateTimeStr(LocalDateTime.now()));
|
|
|
+ String fEntity1 = objectMapper.writeValueAsString(map6.get("FEntity"));
|
|
|
+ List<LinkedHashMap> mapList = JSONArray.parseArray(fEntity1, LinkedHashMap.class);
|
|
|
+ LinkedHashMap map7 = mapList.get(0);
|
|
|
+ map7.put("F_PONP_HBRQ",FDate);
|
|
|
+
|
|
|
+ map7.put("FSrcEntryId",FEntityFEntryId);
|
|
|
+ map7.put("FSrcInterId",fid);
|
|
|
+ map7.put("FSrcBillNo",fbillno);
|
|
|
+ map7.put("FMoBillNo",planTaskDetails1.getDemandDocument());
|
|
|
+ map7.put("FMoId",planTaskDetails1.getFid());
|
|
|
+ map7.put("FMoEntryId",planTaskDetails1.getFtreeEntityFentryid());
|
|
|
+ map7.put("FReqBillNo",planTaskDetails1.getFsrcbillno()); //订单号
|
|
|
+ map7.put("FMOMAINENTRYID",planTaskDetails1.getFtreeEntityFentryid());
|
|
|
+ HashMap<String, String> fStockId = new HashMap<>();
|
|
|
+ if(type.equals("1")){
|
|
|
+ fStockId.put("FNumber","CK007"); //成品仓
|
|
|
+ }else {
|
|
|
+ fStockId.put("FNumber","CK006"); //利库仓
|
|
|
+ }
|
|
|
+ map7.put("FStockId",fStockId);
|
|
|
+ HashMap<String, String> fNumber = new HashMap<>();
|
|
|
+ fNumber.put("FNumber",planTaskDetails1.getMaterialId());
|
|
|
+ map7.put("FMaterialId",fNumber);
|
|
|
+
|
|
|
+ //生产车间信息
|
|
|
+ boolean present = Optional.ofNullable(planTaskDetails1.getShopCoding()).filter(a -> !a.isEmpty()).isPresent();
|
|
|
+ if(present){
|
|
|
+ HashMap<String, String> shopCoding = new HashMap<>();
|
|
|
+ shopCoding.put("FNumber",planTaskDetails1.getShopCoding());
|
|
|
+ map7.put("FWorkshipId",shopCoding);
|
|
|
+ }
|
|
|
+
|
|
|
+ HashMap<String, String> fUnitIDfNumber = new HashMap<>();
|
|
|
+ fUnitIDfNumber.put("FNumber",FUnitIDFNumber);
|
|
|
+ map7.put("FUnitID",fUnitIDfNumber);
|
|
|
+
|
|
|
+ HashMap<String, String> fBaseUnitIdFNumber = new HashMap<>();
|
|
|
+ fBaseUnitIdFNumber.put("FNumber",FUnitIDFNumber);
|
|
|
+ map7.put("FBaseUnitId",fBaseUnitIdFNumber);
|
|
|
+
|
|
|
+ if(isDOrQ.equals("全量推送")){
|
|
|
+ //序列号单据体---循环
|
|
|
+ ProductionCardFlow productionCardFlow=new ProductionCardFlow();
|
|
|
+ productionCardFlow.setDemandDocumentNumber(planTaskDetails1.getDemandDocument());//流转卡序列号
|
|
|
+ List<ProductionCardFlow> productionCardFlows = productionCardFlowMapper.selectProductionCardFlowList(productionCardFlow);
|
|
|
+ map7.put("FSNQty",productionCardFlows.size()); //序列号数量
|
|
|
+ map7.put("FMustQty",productionCardFlows.size()); //应收实收
|
|
|
+ map7.put("FRealQty",productionCardFlows.size()); //实收
|
|
|
+
|
|
|
+ map7.put("FBaseMustQty",productionCardFlows.size()); //基本单位实收数量
|
|
|
+ map7.put("FBaseRealQty",productionCardFlows.size()); //基本单位库存实收数量
|
|
|
+ List<Map> list1=new ArrayList<>();
|
|
|
+ String FSerialSubEntityJson = objectMapper.writeValueAsString( map7.get("FSerialSubEntity"));
|
|
|
+ List<Map> fSerialSubEntitylist = objectMapper.readValue(FSerialSubEntityJson, List.class);
|
|
|
+ productionCardFlows.forEach(item->{
|
|
|
+ try {
|
|
|
+ // 将 fSerialSubEntitylist.get(0) 转换为 JSON 字符串,再反序列化为新的 Map
|
|
|
+ String map2Json = objectMapper.writeValueAsString(fSerialSubEntitylist.get(0));
|
|
|
+ Map<String, Object> map2two = objectMapper.readValue(map2Json, Map.class);
|
|
|
+
|
|
|
+ // 修改 map2 中的 FSerialNo
|
|
|
+ map2two.put("FSerialNo", item.getSerialNumber());
|
|
|
+
|
|
|
+ // 处理 FSerialId
|
|
|
+ Map<String, String> fSerialIdMap = null;
|
|
|
+ if (map2two.get("FSerialId") != null) {
|
|
|
+ String fSerialIdJson = objectMapper.writeValueAsString(map2two.get("FSerialId"));
|
|
|
+ fSerialIdMap = objectMapper.readValue(fSerialIdJson, Map.class);
|
|
|
+ } else {
|
|
|
+ fSerialIdMap = new HashMap<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 修改 FSerialId 中的 FNUMBER
|
|
|
+ fSerialIdMap.put("FNumber", item.getSerialNumber());
|
|
|
+ map2two.put("FSerialId", fSerialIdMap);
|
|
|
+
|
|
|
+ // 将修改后的 map2 添加到 list1
|
|
|
+ list1.add(map2two);
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }else if(isDOrQ.equals("单量推送")) {
|
|
|
+ //序列号单据体---循环
|
|
|
+ ProductionCardFlow productionCardFlow=new ProductionCardFlow();
|
|
|
+ productionCardFlow.setSerialNumber(ringScanInformation.getNativeNumbering());//流转卡序列号
|
|
|
+ List<ProductionCardFlow> productionCardFlows = productionCardFlowMapper.selectProductionCardFlowList(productionCardFlow);
|
|
|
+ map7.put("FSNQty","1"); //序列号数量
|
|
|
+ map7.put("FMustQty","1"); //应收实收
|
|
|
+ map7.put("FRealQty","1"); //实收
|
|
|
+
|
|
|
+ map7.put("FBaseMustQty","1"); //基本单位实收数量
|
|
|
+ map7.put("FBaseRealQty","1"); //基本单位库存实收数量
|
|
|
+ List<Map> list1=new ArrayList<>();
|
|
|
+ String FSerialSubEntityJson = objectMapper.writeValueAsString( map7.get("FSerialSubEntity"));
|
|
|
+ List<Map> fSerialSubEntitylist = objectMapper.readValue(FSerialSubEntityJson, List.class);
|
|
|
+ productionCardFlows.forEach(item->{
|
|
|
+ try {
|
|
|
+ // 将 fSerialSubEntitylist.get(0) 转换为 JSON 字符串,再反序列化为新的 Map
|
|
|
+ String map2Json = objectMapper.writeValueAsString(fSerialSubEntitylist.get(0));
|
|
|
+ Map<String, Object> map2two = objectMapper.readValue(map2Json, Map.class);
|
|
|
+
|
|
|
+ // 修改 map2 中的 FSerialNo
|
|
|
+ map2two.put("FSerialNo", item.getSerialNumber());
|
|
|
+
|
|
|
+ // 处理 FSerialId
|
|
|
+ Map<String, String> fSerialIdMap = null;
|
|
|
+ if (map2two.get("FSerialId") != null) {
|
|
|
+ String fSerialIdJson = objectMapper.writeValueAsString(map2two.get("FSerialId"));
|
|
|
+ fSerialIdMap = objectMapper.readValue(fSerialIdJson, Map.class);
|
|
|
+ } else {
|
|
|
+ fSerialIdMap = new HashMap<>();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 修改 FSerialId 中的 FNUMBER
|
|
|
+ fSerialIdMap.put("FNumber", item.getSerialNumber());
|
|
|
+ map2two.put("FSerialId", fSerialIdMap);
|
|
|
+
|
|
|
+ // 将修改后的 map2 添加到 list1
|
|
|
+ list1.add(map2two);
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ map7.put("FSerialSubEntity",list1);
|
|
|
+ System.out.println("入库单量推送流转卡逻辑");
|
|
|
+ }
|
|
|
+ List<Map> fEntityLinkList=new ArrayList<>();
|
|
|
+ String FenJson="{\n" +
|
|
|
+ "\"FEntity_Link_FRuleId\": \"PRD_MO2INSTOCK\",\n" +
|
|
|
+ "\"FEntity_Link_FSTableName\": \"T_PRD_MORPTENTRY\",\n" +
|
|
|
+ "\"FEntity_Link_FSBillId\": \"168691\",\n" +
|
|
|
+ "\"FEntity_Link_FSId\": \"168691\"\n" +
|
|
|
+ "}";
|
|
|
+ Map<String,String> map8 = JSONObject.parseObject(FenJson, Map.class);
|
|
|
+ map8.put("FEntity_Link_FSBillId",fid);
|
|
|
+ map8.put("FEntity_Link_FSId",FEntityFEntryId);
|
|
|
+ fEntityLinkList.add(map8);
|
|
|
+ map7.put("FEntity_Link",fEntityLinkList);
|
|
|
+ List<LinkedHashMap> map7List = new ArrayList<>();
|
|
|
+ map7List.add(map7);
|
|
|
+ map6.put("FEntity",map7List);
|
|
|
+
|
|
|
+ jsonData2.put("Model",map6);
|
|
|
+
|
|
|
+ String rkdcrateJosn = api.save("PRD_INSTOCK",JSONObject.toJSONString(jsonData2));
|
|
|
+ Map<String, String> stringStringMap1 = documentExecutionJudgment(objectMapper, rkdcrateJosn, "生成入库单创建", "入库单创建失败");
|
|
|
+ if(stringStringMap1.get("msg").equals("入库单创建失败")){
|
|
|
+ return stringStringMap1;
|
|
|
+ }
|
|
|
+ //解析入库单创建结果
|
|
|
+ Map rkdCrateJsonResultString = objectMapper.readValue(rkdcrateJosn, Map.class);
|
|
|
+ String rkdCrateResultJson = objectMapper.writeValueAsString(rkdCrateJsonResultString.get("Result"));
|
|
|
+ Map<String,String> rkdResultMap= objectMapper.readValue(rkdCrateResultJson, Map.class);
|
|
|
+ String rkdNumber = rkdResultMap.get("Number");//编号
|
|
|
+
|
|
|
+ //提交
|
|
|
+ String rkdtj="{\n" +
|
|
|
+ " \"Numbers\": [],\n" +
|
|
|
+ " \"Ids\": \"\",\n" +
|
|
|
+ " \"SelectedPostId\": 0,\n" +
|
|
|
+ " \"NetworkCtrl\": \"\",\n" +
|
|
|
+ " \"IgnoreInterationFlag\": \"\"\n" +
|
|
|
+ "}";
|
|
|
+ Map<String, Object> jsonData3 = objectMapper.readValue(rkdtj, Map.class);
|
|
|
+ List<String> list5 =new ArrayList<>();
|
|
|
+ list5.add(rkdNumber);
|
|
|
+ jsonData3.put("Numbers",list5);
|
|
|
+ String tkdtjR = api.submit("PRD_INSTOCK",JSONObject.toJSONString(jsonData3));
|
|
|
+ Map<String, String> stringStringMap2 = documentExecutionJudgment(objectMapper, tkdtjR, "入库单提交成功", "入库单提交失败");
|
|
|
+ if(stringStringMap2.get("msg").equals("入库单提交失败")){
|
|
|
+ return stringStringMap2;
|
|
|
+ }
|
|
|
+
|
|
|
+ //审核
|
|
|
+ String rkdsh="{\n" +
|
|
|
+ " \"Numbers\": [],\n" +
|
|
|
+ " \"Ids\": \"\",\n" +
|
|
|
+ " \"InterationFlags\": \"\",\n" +
|
|
|
+ " \"NetworkCtrl\": \"\",\n" +
|
|
|
+ " \"IsVerifyProcInst\": \"\",\n" +
|
|
|
+ " \"IgnoreInterationFlag\": \"\",\n" +
|
|
|
+ " \"UseBatControlTimes\": \"false\"\n" +
|
|
|
+ "}";
|
|
|
+ Map<String, Object> jsonData4 = objectMapper.readValue(rkdsh, Map.class);
|
|
|
+ jsonData4.put("Number",list5);
|
|
|
+
|
|
|
+ String rkdshR = api.audit("PRD_INSTOCK",JSONObject.toJSONString(jsonData3));
|
|
|
+ Map<String, String> stringStringMap = documentExecutionJudgment(objectMapper, rkdshR, "入库单审核成功", "入库单审核失败");
|
|
|
+ if(stringStringMap.get("msg").equals("入库单审核失败")){
|
|
|
+ return stringStringMap;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ Map<String,String> abc=new HashMap<>();
|
|
|
+ abc.put("msg", "入库单创建失败");
|
|
|
+ abc.put("error","入库单创建失败");
|
|
|
+ return abc;
|
|
|
+ }
|
|
|
+ Map<String,String> abc=new HashMap<>();
|
|
|
+ abc.put("msg","入库成功");
|
|
|
+ return abc;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * erp创建单据是否成功
|
|
|
+ * @param objectMapper
|
|
|
+ * @param resultJson
|
|
|
+ * @param
|
|
|
+ * @param msg2
|
|
|
+ * @return
|
|
|
+ * @throws JsonProcessingException
|
|
|
+ */
|
|
|
+
|
|
|
+ private Map<String,String> documentExecutionJudgment(ObjectMapper objectMapper, String resultJson,String msg1,String msg2) throws JsonProcessingException {
|
|
|
+ Map s2Map = objectMapper.readValue(resultJson, Map.class);
|
|
|
+ String result = objectMapper.writeValueAsString(s2Map.get("Result"));
|
|
|
+ System.out.println(result+"执行结果");
|
|
|
+ Map<String,Object> s2MapResultJsonMap= objectMapper.readValue(result, Map.class);
|
|
|
+ //判断是否成功
|
|
|
+ String responseStatus3 = objectMapper.writeValueAsString(s2MapResultJsonMap.get("ResponseStatus"));
|
|
|
+ Map map11 = objectMapper.readValue(responseStatus3, Map.class);
|
|
|
+ String isSuccess3 = map11.get("IsSuccess").toString();
|
|
|
+ String isSuccess4= map11.get("Errors").toString();
|
|
|
+ if(isSuccess3.equals("true")){
|
|
|
+ HashMap hashMap=new HashMap();
|
|
|
+ hashMap.put("msg",msg1);
|
|
|
+ return hashMap;
|
|
|
+ }else {
|
|
|
+ System.out.println(isSuccess4);
|
|
|
+ HashMap hashMap=new HashMap();
|
|
|
+ hashMap.put("msg",msg2);
|
|
|
+ hashMap.put("error",isSuccess4);
|
|
|
+ return hashMap;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private String documentExecutionJudgment1(ObjectMapper objectMapper, String resultJson,String msg1,String msg2) throws JsonProcessingException {
|
|
|
+ Map s2Map = objectMapper.readValue(resultJson, Map.class);
|
|
|
+ String result = objectMapper.writeValueAsString(s2Map.get("Result"));
|
|
|
+ System.out.println(result+"执行结果");
|
|
|
+ Map<String,Object> s2MapResultJsonMap= objectMapper.readValue(result, Map.class);
|
|
|
+ //判断是否成功
|
|
|
+ String responseStatus3 = objectMapper.writeValueAsString(s2MapResultJsonMap.get("ResponseStatus"));
|
|
|
+ Map map11 = objectMapper.readValue(responseStatus3, Map.class);
|
|
|
+ String isSuccess3 = map11.get("IsSuccess").toString();
|
|
|
+ String isSuccess4= map11.get("Errors").toString();
|
|
|
+ if(isSuccess3.equals("true")){
|
|
|
+// HashMap hashMap=new HashMap();
|
|
|
+// hashMap.put("msg",);
|
|
|
+ return msg1;
|
|
|
+ }else {
|
|
|
+ System.out.println(isSuccess4);
|
|
|
+// HashMap hashMap=new HashMap();
|
|
|
+// hashMap.put("msg",msg1);
|
|
|
+// hashMap.put("error",isSuccess4);
|
|
|
+ return msg2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String sweepingMaterial(String orderNumber,String productNumber,String gxm,String lxkNumber) {
|
|
|
+ //查询条件
|
|
|
+ String queryString = "{\n" +
|
|
|
+ " \"FormId\": \"PRD_MO\",\n" +
|
|
|
+ " \"FieldKeys\": \"FBillNo\",\n" +
|
|
|
+ " \"FilterString\": [{\"Left\":\"\",\"FieldName\":\"FSerialNo\",\"Compare\":\"67\",\"Value\":\"" + lxkNumber + "\",\"Right\":\"\",\"Logic\":0}],\n" +
|
|
|
+ " \"OrderString\": \"\",\n" +
|
|
|
+ " \"TopRowCount\": 0,\n" +
|
|
|
+ " \"StartRow\": 0,\n" +
|
|
|
+ " \"Limit\": 2000,\n" +
|
|
|
+ " \"SubSystemId\": \"\"\n" +
|
|
|
+ "}";
|
|
|
+ //查询条件
|
|
|
+ Map<String, Object> map = JSON.parseObject(queryString, Map.class);
|
|
|
+ K3CloudApi api = new K3CloudApi();
|
|
|
+ List<JdProductionOrder> jdProductionOrders;
|
|
|
+ try {
|
|
|
+ String resultJson = api.billQuery(JSON.toJSONString(map));
|
|
|
+ //如果查询的数据为空
|
|
|
+ if (resultJson == "" || resultJson == "[]") {
|
|
|
+ return "不能添加这次扫描记录";
|
|
|
+ } else {
|
|
|
+ //转换实体类对象
|
|
|
+ jdProductionOrders = JSON.parseArray(resultJson, JdProductionOrder.class);
|
|
|
+ //按照流转卡把信息查询出来了
|
|
|
+ if (jdProductionOrders.size() > 0) {
|
|
|
+ //单据编号
|
|
|
+ String documentNumber = jdProductionOrders.get(0).getDocumentNumber();
|
|
|
+ //这个生产订单生产的数量
|
|
|
+ //String quantity = jdProductionOrders.get(0).getQuantity();
|
|
|
+ //根据生产订单号查询生产用料清单
|
|
|
+ String productionMaterialsListQuery = "{\n" +
|
|
|
+ " \"FormId\": \"PRD_PPBOM\",\n" +
|
|
|
+ " \"FieldKeys\": \"FMaterialID.FNumber,FMaterialName,FMaterialModel,FMaterialModel2,FDescription,FMaterialID2.FNumber,FMaterialName1,FMaterialModel1,FUnitID2.FName,FMustQty,FMEMO1,FNumerator,FMaterialType,FProcessID.FName\",\n" +
|
|
|
+ " \"FilterString\": [],\n" +
|
|
|
+ " \"OrderString\": \"\",\n" +
|
|
|
+ " \"TopRowCount\": 0,\n" +
|
|
|
+ " \"StartRow\": 0,\n" +
|
|
|
+ " \"Limit\": 2000,\n" +
|
|
|
+ " \"SubSystemId\": \"\"\n" +
|
|
|
+ "}";
|
|
|
+ //查询生产用料清单
|
|
|
+ Map<String, Object> map2 = JSON.parseObject(productionMaterialsListQuery, Map.class);
|
|
|
+
|
|
|
+ String filterString = map2.get("FilterString").toString();
|
|
|
+
|
|
|
+ List<Map> mapList = JSON.parseArray(filterString, Map.class);
|
|
|
+
|
|
|
+ //循环条件
|
|
|
+ String ddh = "{\"Left\":\"\",\"FieldName\":\"FMOBillNO\",\"Compare\":\"67\",\"Value\":\"11\",\"Right\":\"\",\"Logic\":0}";
|
|
|
+ Map ddhObj = JSONObject.parseObject(ddh, Map.class);
|
|
|
+ ddhObj.put("Value", productNumber);
|
|
|
+ mapList.add(ddhObj);
|
|
|
+ map2.put("FilterString", mapList);//从新绑定条件
|
|
|
+
|
|
|
+
|
|
|
+ //全部MES工序
|
|
|
+ List<ProcedureList> procedureLists = procedureListMapper.selectProcedureListMap();
|
|
|
+
|
|
|
+ Map<String, String> gxMap = procedureLists.stream()
|
|
|
+ .filter(procedureList ->
|
|
|
+ procedureList.getElpname() != null && !procedureList.getElpname().isEmpty()) // 过滤条件
|
|
|
+ .collect(Collectors.toMap(ProcedureList::getElpname, ProcedureList::getProcedurName));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //生产用料清单结果
|
|
|
+ String resultJsonJG = api.billQuery(JSON.toJSONString(map2));
|
|
|
+ //json转Java实体类对象
|
|
|
+ List<MaterialRetentionLogVo> materialRetentionLogVos = JSON.parseArray(resultJsonJG, MaterialRetentionLogVo.class);
|
|
|
+ //赋值一些默认值
|
|
|
+ List<MaterialRetentionLogVo> collect = materialRetentionLogVos.parallelStream().map(item -> {
|
|
|
+ item.setCkNumber("CK005");
|
|
|
+ item.setDeliveryWarehouse("车间仓");
|
|
|
+ item.setFlowSequenceNumber(lxkNumber);//流转序列号
|
|
|
+ boolean present = Optional.ofNullable(gxMap.get(item.getProcess())).filter(a->!a.isEmpty()).isPresent();
|
|
|
+ if(present){
|
|
|
+ item.setMesprocess(gxMap.get(item.getProcess())); //工序
|
|
|
+ }else {
|
|
|
+ item.setMesprocess("未知工序");
|
|
|
+ }
|
|
|
+ item.setOrderNumber(orderNumber); //订单
|
|
|
+ item.setProductionOrderNumber(productNumber); //生产订单
|
|
|
+ item.setCreateTime(new DateTime());//创建时间
|
|
|
+ return item;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ //分子数量基本的扣料单位
|
|
|
+ int i = materialRetentionLogMapper.insertMaterialRetentionLogBatch(collect);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception ex) {
|
|
|
+ throw new RuntimeException(ex);
|
|
|
+ }
|
|
|
+ return productNumber + gxm + "扣料成功";
|
|
|
+ }
|
|
|
+
|
|
|
+}
|