Browse Source

aps-分卷批次号按分切来完成/报工记录列表优化testin1908/1780/1869

zhoudazhuang 7 months ago
parent
commit
8157af3b62
16 changed files with 1124 additions and 83 deletions
  1. 16 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationSplitDao.java
  2. 8 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportCheckoutDao.java
  3. 8 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportMachiningDao.java
  4. 10 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportOutputDao.java
  5. 16 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProcessOperationSplitService.java
  6. 1 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportCheckoutService.java
  7. 1 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportMachiningService.java
  8. 2 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportOutputService.java
  9. 20 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationSplitServiceImpl.java
  10. 8 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportCheckoutServiceImpl.java
  11. 8 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportMachiningServiceImpl.java
  12. 253 75
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportOutputServiceImpl.java
  13. 66 8
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportRecordsServiceImpl.java
  14. 360 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/utils/StringUtil.java
  15. 208 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProcessOperationSplitDo.java
  16. 139 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsReportRecordsDo.java

+ 16 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationSplitDao.java

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.rongwei.bsentity.domain.ApsProcessOperationSplitDo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 工序作业-分切车次 Mapper 接口
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-12-27
+ */
+public interface ApsProcessOperationSplitDao extends BaseMapper<ApsProcessOperationSplitDo> {
+
+}

+ 8 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportCheckoutDao.java

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.domain.ApsReportCheckoutDo;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * <p>
@@ -13,4 +14,11 @@ import com.rongwei.bsentity.domain.ApsReportCheckoutDo;
  */
 public interface ApsReportCheckoutDao extends BaseMapper<ApsReportCheckoutDo> {
 
+    /**
+     * 查询检测参数
+     * @param reportId
+     * @return
+     */
+    @Select("SELECT GROUP_CONCAT( CONCAT( CHECKITEM, '=', CHECKPARAMETER ) ) AS 'JCCS' FROM aps_report_checkout WHERE DELETED = '0' AND MAINID = #{mainid} GROUP BY MAINID")
+    String selectJccsByReportId(String reportId);
 }

+ 8 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportMachiningDao.java

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.domain.ApsReportMachiningDo;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * <p>
@@ -13,4 +14,11 @@ import com.rongwei.bsentity.domain.ApsReportMachiningDo;
  */
 public interface ApsReportMachiningDao extends BaseMapper<ApsReportMachiningDo> {
 
+    /**
+     * 查询加工参数
+     * @param reportId
+     * @return
+     */
+    @Select("SELECT GROUP_CONCAT( CONCAT( MATCHING, '=', MATCHINGPARAMETER ) ) AS 'JGCS' FROM aps_report_machining WHERE DELETED = '0' AND MAINID = #{reportId} GROUP BY MAINID")
+    String selectJgcsByReportId(String reportId);
 }

+ 10 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportOutputDao.java

@@ -23,6 +23,16 @@ public interface ApsReportOutputDao extends BaseMapper<ApsReportOutputDo> {
             "\tAND d1.DICTTYPE = 'quality_defects' \n" +
             "\tAND d2.ID != '724201d3c3454297bf90aa2df0335c1b'")
     List<SysDictDo> getQualityDefectsDictsByType();
+
+    @Select("SELECT\n" +
+            "  GROUP_CONCAT(\n" +
+            "  CONCAT( OUTPUTDESCRIPT, '*', t.count_per_desc, '卷' )) AS OUTPUTDESC \n" +
+            "FROM\n" +
+            "  ( SELECT MAINID, ifnull( OUTPUTDESC, OUTPUTMATERIAL ) OUTPUTDESCRIPT, COUNT(*) count_per_desc FROM aps_report_output WHERE DELETED = '0' GROUP BY MAINID, OUTPUTDESCRIPT ) t \n" +
+            "  WHERE MAINID = #{reportId}\n" +
+            "GROUP BY\n" +
+            "  MAINID")
+    String selectDescByReportId(String reportId);
 }
 
 

+ 16 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProcessOperationSplitService.java

@@ -0,0 +1,16 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.rongwei.bsentity.domain.ApsProcessOperationSplitDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 工序作业-分切车次 服务类
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-12-27
+ */
+public interface ApsProcessOperationSplitService extends IService<ApsProcessOperationSplitDo> {
+
+}

+ 1 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportCheckoutService.java

@@ -8,4 +8,5 @@ import com.rongwei.bsentity.domain.ApsReportCheckoutDo;
  */
 public interface ApsReportCheckoutService extends IService<ApsReportCheckoutDo> {
 
+    String selectJccsByReportId(String reportId);
 }

+ 1 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportMachiningService.java

@@ -8,4 +8,5 @@ import com.rongwei.bsentity.domain.ApsReportMachiningDo;
  */
 public interface ApsReportMachiningService extends IService<ApsReportMachiningDo> {
 
+    String selectJgcsByReportId(String reportId);
 }

+ 2 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportOutputService.java

@@ -18,5 +18,7 @@ public interface ApsReportOutputService extends IService<ApsReportOutputDo> {
 
     List<SysDictDo> getQualityDefectsDictsByType();
 
+    String selectDescByReportId(String reportId);
+
 //    R insertMyReportOutputWithOutBatchNumber(InsertMyReportOutputReq req);
 }

+ 20 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationSplitServiceImpl.java

@@ -0,0 +1,20 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.rongwei.bsentity.domain.ApsProcessOperationSplitDo;
+import com.rongwei.bscommon.sys.dao.ApsProcessOperationSplitDao;
+import com.rongwei.bscommon.sys.service.ApsProcessOperationSplitService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 工序作业-分切车次 服务实现类
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-12-27
+ */
+@Service
+public class ApsProcessOperationSplitServiceImpl extends ServiceImpl<ApsProcessOperationSplitDao, ApsProcessOperationSplitDo> implements ApsProcessOperationSplitService {
+
+}

+ 8 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportCheckoutServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.ApsReportCheckoutDao;
 import com.rongwei.bscommon.sys.service.ApsReportCheckoutService;
 import com.rongwei.bsentity.domain.ApsReportCheckoutDo;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -13,6 +14,13 @@ import org.springframework.stereotype.Service;
 public class ApsReportCheckoutServiceImpl extends ServiceImpl<ApsReportCheckoutDao, ApsReportCheckoutDo>
 implements ApsReportCheckoutService {
 
+    @Autowired
+    private ApsReportCheckoutDao apsReportCheckoutDao;
+
+    @Override
+    public String selectJccsByReportId(String reportId) {
+        return apsReportCheckoutDao.selectJccsByReportId(reportId);
+    }
 }
 
 

+ 8 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportMachiningServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.ApsReportMachiningDao;
 import com.rongwei.bscommon.sys.service.ApsReportMachiningService;
 import com.rongwei.bsentity.domain.ApsReportMachiningDo;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -13,6 +14,13 @@ import org.springframework.stereotype.Service;
 public class ApsReportMachiningServiceImpl extends ServiceImpl<ApsReportMachiningDao, ApsReportMachiningDo>
 implements ApsReportMachiningService {
 
+    @Autowired
+    private ApsReportMachiningDao apsReportMachiningDao;
+
+    @Override
+    public String selectJgcsByReportId(String reportId) {
+        return apsReportMachiningDao.selectJgcsByReportId(reportId);
+    }
 }
 
 

+ 253 - 75
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportOutputServiceImpl.java

@@ -1,17 +1,14 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.ApsReportOutputDao;
-import com.rongwei.bscommon.sys.service.ApsProcessOperationOutMaterService;
-import com.rongwei.bscommon.sys.service.ApsProcessOperationService;
-import com.rongwei.bscommon.sys.service.ApsReportRecordsService;
+import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bscommon.sys.utils.QRCodeGenerator;
-import com.rongwei.bsentity.domain.ApsProcessOperationDo;
-import com.rongwei.bsentity.domain.ApsProcessOperationOutMaterDo;
-import com.rongwei.bsentity.domain.ApsReportOutputDo;
-import com.rongwei.bsentity.domain.ApsReportRecordsDo;
+import com.rongwei.bscommon.sys.utils.StringUtil;
+import com.rongwei.bsentity.domain.*;
 import com.rongwei.bsentity.vo.InsertMyReportOutputReq;
 import com.rongwei.commonservice.serial.service.SysSerialNumberService;
 import com.rongwei.rwadmincommon.system.domain.SysDictDo;
@@ -24,10 +21,10 @@ import com.rongwei.safecommon.fegin.CXAdminFeginClient;
 import com.rongwei.safecommon.utils.CXCommonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.rongwei.bscommon.sys.service.ApsReportOutputService;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.Comparator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -53,6 +50,8 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
     private ApsReportOutputDao apsReportOutputDao;
     @Autowired
     private SysSerialNumberService sysSerialNumberService;
+    @Autowired
+    private ApsProcessOperationSplitService apsProcessOperationSplitService;
 
     @Override
     @Transactional
@@ -78,7 +77,12 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
 
                         apsReportOutputDo.setMainid(req.getMainId());
                         apsReportOutputDo.setOutputid(apsProcessOperationOutMaterDo.getId());
-                        apsReportOutputDo.setOutputmaterial(apsProcessOperationOutMaterDo.getOutputmaterial());
+                        /**
+                         * 需求变更:输出物料重新拼接
+                         */
+                        if (ObjectUtil.isNotEmpty(apsProcessOperationOutMaterDo.getOutputmaterial())){
+                            apsReportOutputDo.setOutputmaterial(StringUtil.getSubstringBeforeLastStar(apsProcessOperationOutMaterDo.getOutputmaterial(),"*"));
+                        }
                         apsReportOutputDo.setLevel(req.getLevel());
                         //生成批次号
                         SysSerialVo vo = new SysSerialVo();
@@ -127,7 +131,12 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                         apsReportOutputDo.setId(SecurityUtil.getUUID());
                         apsReportOutputDo.setMainid(req.getMainId());
                         apsReportOutputDo.setOutputid(apsProcessOperationOutMaterDo.getId());
-                        apsReportOutputDo.setOutputmaterial(apsProcessOperationOutMaterDo.getOutputmaterial());
+                        /**
+                         * 需求变更:输出物料重新拼接
+                         */
+                        if (ObjectUtil.isNotEmpty(apsProcessOperationOutMaterDo.getOutputmaterial())){
+                            apsReportOutputDo.setOutputmaterial(StringUtil.getSubstringBeforeLastStar(apsProcessOperationOutMaterDo.getOutputmaterial(),"*"));
+                        }
                         apsReportOutputDo.setLevel(req.getLevel());
                         //生成批次号
                         String code = req.getMark() + req.getYearCode() + req.getMonthCode() + req.getEquipmentCode() + req.getHeatNumber() + j;
@@ -156,7 +165,12 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                 apsReportOutputDo.setId(SecurityUtil.getUUID());
                 apsReportOutputDo.setMainid(req.getMainId());
                 apsReportOutputDo.setOutputid(list.get(0).getId());
-                apsReportOutputDo.setOutputmaterial(list.get(0).getOutputmaterial());
+                /**
+                 * 需求变更:输出物料重新拼接
+                 */
+                if (ObjectUtil.isNotEmpty(list.get(0).getOutputmaterial())){
+                    apsReportOutputDo.setOutputmaterial(StringUtil.getSubstringBeforeLastStar(list.get(0).getOutputmaterial(),"*"));
+                }
                 apsReportOutputDo.setOutputnumber(req.getInputBatchNumber());
                 apsReportOutputDo.setLevel(req.getLevel());
                 apsReportOutputDo.setThickness(list.get(0).getThickness());
@@ -173,30 +187,57 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                 resList.add(apsReportOutputDo);
             } else {//输出物料数量>1,或者单卷输出数量>1
                 //查询工序作业信息
-                ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(req.getProcessId());
+//                ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(req.getProcessId());
+                //查询工序作业分切方式子表
+                List<ApsProcessOperationSplitDo> apsProcessOperationSplitDos = apsProcessOperationSplitService.list(new QueryWrapper<ApsProcessOperationSplitDo>().lambda().eq(ApsProcessOperationSplitDo::getMainid, req.getProcessId()));
                 //分切工序
-                if (apsProcessOperationDo.getProcess().equals("分切")) {
-                    int j = 1;//初始化分切车次
-                    for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : list) {
-                        //每个输出物料的分切车次
-                        Integer splittrainno = apsProcessOperationOutMaterDo.getSplittrainno();
-                        //输出卷数
-                        Integer outval = apsProcessOperationOutMaterDo.getOutval();
-                        //每次分切的卷数
-                        int count = outval / splittrainno;
-                        //分切车次循环
-                        for (int k = 0; k < splittrainno; k++) {
-                            //分卷循环
-                            for (int i = 1; i <= count; i++) {
+//                if ("分切".equals(apsProcessOperationDo.getProcess())) {
+                    /**
+                     * 新增需求:如果输出物料分切方式不为空,则按照分切方式生成分卷批次号
+                     * 分卷批次号={批次号}-{分切车次序列号1-2位}-{分卷序列号1-2位}
+                     * {分切车次序列号1-2位}:表示分切第几车次;
+                     * {分卷序列号1-2位}:表示该料卷的该车次第几个分卷;
+                     * 如果输出物料分切方式为空,或者分切车次=0
+                     * 分卷批次号={批次号}-{分卷序列号1-2位}{分卷序列号1-2位}:表示该料卷的第几个分卷
+                     */
+                    if (ObjectUtil.isNotEmpty(apsProcessOperationSplitDos)){
+                        //根据分切车次排序
+                        apsProcessOperationSplitDos = apsProcessOperationSplitDos.stream().sorted(Comparator.comparing(ApsProcessOperationSplitDo::getSplittrainno)).collect(Collectors.toList());
+                        apsProcessOperationSplitDos.forEach(info->{
+                            autoGenerateOutPutNumber(list,info,resList,req);
+                        });
+                    }else {//非分切工序
+                        //分卷开始初始化值
+                        int j = 1;
+                        for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : list) {
+                            int outval = apsProcessOperationOutMaterDo.getOutval();
+                            for (int i = 1; i <= outval; i++) {
                                 //插入记录物料子表
                                 ApsReportOutputDo apsReportOutputDo = new ApsReportOutputDo();
 
                                 apsReportOutputDo.setMainid(req.getMainId());
                                 apsReportOutputDo.setOutputid(apsProcessOperationOutMaterDo.getId());
-                                apsReportOutputDo.setOutputmaterial(apsProcessOperationOutMaterDo.getOutputmaterial());
+                                /**
+                                 * 需求变更:输出物料重新拼接
+                                 */
+                                if (ObjectUtil.isNotEmpty(apsProcessOperationOutMaterDo.getOutputmaterial())){
+                                    apsReportOutputDo.setOutputmaterial(StringUtil.getSubstringBeforeLastStar(apsProcessOperationOutMaterDo.getOutputmaterial(),"*"));
+                                }
                                 apsReportOutputDo.setLevel(req.getLevel());
                                 //生成批次号
-                                String code = req.getInputBatchNumber() + "-" + j + "-" + i;
+                                //不用走系统生成的批次号了,按照输入的批次号就行分卷就行
+                                String code = req.getInputBatchNumber() + "-" + j;
+                                j++;
+
+//                        //生成批次号
+//                        SysSerialVo vo = new SysSerialVo();
+//                        vo.setModulecode("aps_report_output_" + req.getInputBatchNumber());
+//                        vo.setRuleTemplateStr(req.getInputBatchNumber() + "-" + "@{serialNumber:#00}");
+//                        vo.setResetrule("date:yyyyMM");
+//                        vo.setIfautomaticreset("y");
+//                        vo.setInitValue(0L);
+//                        Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
+//                        String code = codeData.get("code").toString();
 
                                 apsReportOutputDo.setOutputnumber(code);
                                 JSONObject json = new JSONObject();
@@ -213,57 +254,94 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
                                 apsReportOutputDo.setInsepctionlevel(insepctionLevel);
                                 apsReportOutputDo.setQualified(qualified);
                                 resList.add(apsReportOutputDo);
-
                             }
-                            j++;
                         }
                     }
-                } else {//非分切工序
-                    //分卷开始初始化值
-                    int j = 1;
-                    for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : list) {
-                        int outval = apsProcessOperationOutMaterDo.getOutval();
-                        for (int i = 1; i <= outval; i++) {
-                            //插入记录物料子表
-                            ApsReportOutputDo apsReportOutputDo = new ApsReportOutputDo();
-
-                            apsReportOutputDo.setMainid(req.getMainId());
-                            apsReportOutputDo.setOutputid(apsProcessOperationOutMaterDo.getId());
-                            apsReportOutputDo.setOutputmaterial(apsProcessOperationOutMaterDo.getOutputmaterial());
-                            apsReportOutputDo.setLevel(req.getLevel());
-                            //生成批次号
-                            //不用走系统生成的批次号了,按照输入的批次号就行分卷就行
-                            String code = req.getInputBatchNumber() + "-" + j;
-                            j++;
-
-//                        //生成批次号
-//                        SysSerialVo vo = new SysSerialVo();
-//                        vo.setModulecode("aps_report_output_" + req.getInputBatchNumber());
-//                        vo.setRuleTemplateStr(req.getInputBatchNumber() + "-" + "@{serialNumber:#00}");
-//                        vo.setResetrule("date:yyyyMM");
-//                        vo.setIfautomaticreset("y");
-//                        vo.setInitValue(0L);
-//                        Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
-//                        String code = codeData.get("code").toString();
-
-                            apsReportOutputDo.setOutputnumber(code);
-                            JSONObject json = new JSONObject();
-                            json.put("batchNumber", code);
-                            //生成二维码
-                            String qrCode = QRCodeGenerator.stringToQRCodeBase64(json.toJSONString(), 200, 200, "png");
-                            apsReportOutputDo.setQrcode(qrCode);
-
-                            apsReportOutputDo.setId(SecurityUtil.getUUID());
-                            apsReportOutputDo.setThickness(apsProcessOperationOutMaterDo.getThickness());
-                            apsReportOutputDo.setWidth(apsProcessOperationOutMaterDo.getProwidth());
-                            apsReportOutputDo.setLength(apsProcessOperationOutMaterDo.getProlength());
-                            apsReportOutputDo.setWeight(apsProcessOperationOutMaterDo.getSinglerollweight());
-                            apsReportOutputDo.setInsepctionlevel(insepctionLevel);
-                            apsReportOutputDo.setQualified(qualified);
-                            resList.add(apsReportOutputDo);
-                        }
-                    }
-                }
+//                    else {
+//                        int count = 1;
+//                        for (ApsProcessOperationOutMaterDo info : list) {
+//                            //输出卷数
+//                            Integer outval = info.getOutval();
+//                            for (int i = 1; i <= outval; i++) {
+//                                //插入记录物料子表
+//                                ApsReportOutputDo apsReportOutputDo = new ApsReportOutputDo();
+//                                apsReportOutputDo.setMainid(req.getMainId());
+//                                apsReportOutputDo.setOutputid(info.getId());
+//                                /**
+//                                 * 需求变更:输出物料重新拼接
+//                                 */
+//                                if (ObjectUtil.isNotEmpty(info.getOutputmaterial())){
+//                                    apsReportOutputDo.setOutputmaterial(StringUtil.getSubstringBeforeLastStar(info.getOutputmaterial(),"*"));
+//                                }
+//                                apsReportOutputDo.setLevel(req.getLevel());
+//                                //生成批次号
+//                                String code = req.getInputBatchNumber() + "-" + count;
+//                                apsReportOutputDo.setOutputnumber(code);
+//                                JSONObject json = new JSONObject();
+//                                json.put("batchNumber", code);
+//                                //生成二维码
+//                                String qrCode = QRCodeGenerator.stringToQRCodeBase64(json.toJSONString(), 200, 200, "png");
+//                                apsReportOutputDo.setQrcode(qrCode);
+//                                apsReportOutputDo.setId(SecurityUtil.getUUID());
+//                                apsReportOutputDo.setThickness(info.getThickness());
+//                                apsReportOutputDo.setWidth(info.getProwidth());
+//                                apsReportOutputDo.setLength(info.getProlength());
+//                                apsReportOutputDo.setWeight(info.getSinglerollweight());
+//                                apsReportOutputDo.setInsepctionlevel(insepctionLevel);
+//                                apsReportOutputDo.setQualified(qualified);
+//                                resList.add(apsReportOutputDo);
+//                                count++;
+//                            }
+//                        }
+//                    }
+//                    int j = 1;//初始化分切车次
+//                    for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : list) {
+//                        //每个输出物料的分切车次
+//                        Integer splittrainno = apsProcessOperationOutMaterDo.getSplittrainno();
+//                        //输出卷数
+//                        Integer outval = apsProcessOperationOutMaterDo.getOutval();
+//                        //每次分切的卷数
+//                        int count = outval / splittrainno;
+//                        //分切车次循环
+//                        for (int k = 0; k < splittrainno; k++) {
+//                            //分卷循环
+//                            for (int i = 1; i <= count; i++) {
+//                                //插入记录物料子表
+//                                ApsReportOutputDo apsReportOutputDo = new ApsReportOutputDo();
+//
+//                                apsReportOutputDo.setMainid(req.getMainId());
+//                                apsReportOutputDo.setOutputid(apsProcessOperationOutMaterDo.getId());
+//                                /**
+//                                 * 需求变更:输出物料重新拼接
+//                                 */
+//                                if (ObjectUtil.isNotEmpty(apsProcessOperationOutMaterDo.getOutputmaterial())){
+//                                    apsReportOutputDo.setOutputmaterial(StringUtil.getSubstringBeforeLastStar(apsProcessOperationOutMaterDo.getOutputmaterial(),"*"));
+//                                }
+//                                apsReportOutputDo.setLevel(req.getLevel());
+//                                //生成批次号
+//                                String code = req.getInputBatchNumber() + "-" + j + "-" + i;
+//
+//                                apsReportOutputDo.setOutputnumber(code);
+//                                JSONObject json = new JSONObject();
+//                                json.put("batchNumber", code);
+//                                //生成二维码
+//                                String qrCode = QRCodeGenerator.stringToQRCodeBase64(json.toJSONString(), 200, 200, "png");
+//                                apsReportOutputDo.setQrcode(qrCode);
+//
+//                                apsReportOutputDo.setId(SecurityUtil.getUUID());
+//                                apsReportOutputDo.setThickness(apsProcessOperationOutMaterDo.getThickness());
+//                                apsReportOutputDo.setWidth(apsProcessOperationOutMaterDo.getProwidth());
+//                                apsReportOutputDo.setLength(apsProcessOperationOutMaterDo.getProlength());
+//                                apsReportOutputDo.setWeight(apsProcessOperationOutMaterDo.getSinglerollweight());
+//                                apsReportOutputDo.setInsepctionlevel(insepctionLevel);
+//                                apsReportOutputDo.setQualified(qualified);
+//                                resList.add(apsReportOutputDo);
+//
+//                            }
+//                            j++;
+//                        }
+//                    }
+//                }
             }
         }
 
@@ -284,6 +362,106 @@ public class ApsReportOutputServiceImpl extends ServiceImpl<ApsReportOutputDao,
         return apsReportOutputDao.getQualityDefectsDictsByType();
     }
 
+    @Override
+    public String selectDescByReportId(String reportId) {
+        return apsReportOutputDao.selectDescByReportId(reportId);
+    }
+
+    private void autoGenerateOutPutNumber(List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterDos,ApsProcessOperationSplitDo apsProcessOperationSplitDo,List<ApsReportOutputDo> resList,InsertMyReportOutputReq req){
+        String oneMaterId = apsProcessOperationSplitDo.getOutmaterone();
+        Integer oneRollNum = apsProcessOperationSplitDo.getRollnumone();
+        Integer count = 1;
+        if (ObjectUtil.isNotEmpty(oneMaterId)&&oneRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowOneOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(oneMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowOneOutMater.get(0),resList,oneRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String twoMaterId = apsProcessOperationSplitDo.getOutmatertwo();
+        Integer twoRollNum = apsProcessOperationSplitDo.getRollnumtwo();
+        if (ObjectUtil.isNotEmpty(twoMaterId)&&twoRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowTwoOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(twoMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowTwoOutMater.get(0),resList,twoRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String thrMaterId = apsProcessOperationSplitDo.getOutmaterthr();
+        Integer thrRollNum = apsProcessOperationSplitDo.getRollnumthr();
+        if (ObjectUtil.isNotEmpty(thrMaterId)&&thrRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowThrOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(thrMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowThrOutMater.get(0),resList,thrRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String fouMaterId = apsProcessOperationSplitDo.getOutmaterfou();
+        Integer fouRollNum = apsProcessOperationSplitDo.getRollnumfou();
+        if (ObjectUtil.isNotEmpty(fouMaterId)&&fouRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowFouOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(fouMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowFouOutMater.get(0),resList,fouRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String fivMaterId = apsProcessOperationSplitDo.getOutmaterfiv();
+        Integer fivRollNum = apsProcessOperationSplitDo.getRollnumfiv();
+        if (ObjectUtil.isNotEmpty(fivMaterId)&&fivRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowFivOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(fivMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowFivOutMater.get(0),resList,fivRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String sixMaterId = apsProcessOperationSplitDo.getOutmatersix();
+        Integer sixRollNum = apsProcessOperationSplitDo.getRollnumsix();
+        if (ObjectUtil.isNotEmpty(sixMaterId)&&sixRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowSixOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(sixMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowSixOutMater.get(0),resList,sixRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String sevMaterId = apsProcessOperationSplitDo.getOutmatersev();
+        Integer sevRollNum = apsProcessOperationSplitDo.getRollnumsev();
+        if (ObjectUtil.isNotEmpty(sevMaterId)&&sevRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowSevOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(sevMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowSevOutMater.get(0),resList,sevRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String eigMaterId = apsProcessOperationSplitDo.getOutmatereig();
+        Integer eigRollNum = apsProcessOperationSplitDo.getRollnumeig();
+        if (ObjectUtil.isNotEmpty(eigMaterId)&&eigRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowEigOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(eigMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowEigOutMater.get(0),resList,eigRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String ninMaterId = apsProcessOperationSplitDo.getOutmaternin();
+        Integer ninRollNum = apsProcessOperationSplitDo.getRollnumnin();
+        if (ObjectUtil.isNotEmpty(ninMaterId)&&ninRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowNinOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(ninMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowNinOutMater.get(0),resList,ninRollNum,req,apsProcessOperationSplitDo,count);
+        }
+        String tenMaterId = apsProcessOperationSplitDo.getOutmaterten();
+        Integer tenRollNum = apsProcessOperationSplitDo.getRollnumten();
+        if (ObjectUtil.isNotEmpty(tenMaterId)&&tenRollNum!= null){
+            List<ApsProcessOperationOutMaterDo> nowTenOutMater = apsProcessOperationOutMaterDos.stream().filter(p -> p.getId().equals(tenMaterId)).collect(Collectors.toList());
+            count = handleOnePutNumber(nowTenOutMater.get(0),resList,tenRollNum,req,apsProcessOperationSplitDo,count);
+        }
+    }
+
+    private Integer handleOnePutNumber(ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo,List<ApsReportOutputDo> resList,Integer rollNum,InsertMyReportOutputReq req,ApsProcessOperationSplitDo apsProcessOperationSplitDo,Integer count) {
+        for (int i=1;i<=rollNum;i++){
+            //插入记录物料子表
+            ApsReportOutputDo apsReportOutputDo = new ApsReportOutputDo();
+            apsReportOutputDo.setMainid(req.getMainId());
+            apsReportOutputDo.setOutputid(apsProcessOperationOutMaterDo.getId());
+            if (ObjectUtil.isNotEmpty(apsProcessOperationOutMaterDo.getOutputmaterial())){
+                apsReportOutputDo.setOutputmaterial(StringUtil.getSubstringBeforeLastStar(apsProcessOperationOutMaterDo.getOutputmaterial(),"*"));
+            }
+            apsReportOutputDo.setLevel(req.getLevel());
+            //生成批次号
+            String code = req.getInputBatchNumber() + "-" + apsProcessOperationSplitDo.getSplittrainno() + "-" + count;
+            apsReportOutputDo.setOutputnumber(code);
+            JSONObject json = new JSONObject();
+            json.put("batchNumber", code);
+            //生成二维码
+            String qrCode = QRCodeGenerator.stringToQRCodeBase64(json.toJSONString(), 200, 200, "png");
+            apsReportOutputDo.setQrcode(qrCode);
+            apsReportOutputDo.setId(SecurityUtil.getUUID());
+            apsReportOutputDo.setThickness(apsProcessOperationOutMaterDo.getThickness());
+            apsReportOutputDo.setWidth(apsProcessOperationOutMaterDo.getProwidth());
+            apsReportOutputDo.setLength(apsProcessOperationOutMaterDo.getProlength());
+            apsReportOutputDo.setWeight(apsProcessOperationOutMaterDo.getSinglerollweight());
+            apsReportOutputDo.setInsepctionlevel(req.getInsepctionLevel());
+            apsReportOutputDo.setQualified(req.getQualified());
+            resList.add(apsReportOutputDo);
+            count++;
+        }
+        return count;
+    }
+
 //    public R insertMyReportOutputWithOutBatchNumber(InsertMyReportOutputReq req) {
 //        //最终新增的子表数据
 //        List<ApsReportOutputDo> resList = new LinkedList<>();

+ 66 - 8
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportRecordsServiceImpl.java

@@ -93,7 +93,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
     private ApsOrderAlloyCompositionService apsOrderAlloyCompositionService;
     @Autowired
     private SysSerialNumberService sysSerialNumberService;
-
+    @Autowired
+    private AspCheckItemsService aspCheckItemsService;
     @Override
     @Transactional
     public R cancelRecord(Map<String, String> req) {
@@ -377,6 +378,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
 
             //根据作业明细ID查询作业明细详情
             ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(req.getUseDeviceId());
+            //根据加工设备ID查询设备
+            AspCheckItemsDo aspCheckItemsDo = aspCheckItemsService.getById(apsProcessOperationProcessEquDo.getProcessdeviceid());
             //如果已开工卷数!= 已报工卷数,说明已经开工了,提示已开工
             if (!apsProcessOperationProcessEquDo.getStartingroll().equals(apsProcessOperationProcessEquDo.getReportroll())) {
                 return R.error("此作业已开工,请刷新列表后重试");
@@ -509,7 +512,10 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             apsReportRecordsDo.setDeviceparm(equparames);
             //注意事项
             apsReportRecordsDo.setAttention(apsProcessOperationDo.getRemark());
-
+            /**
+             * 新增需求:新增字段保存
+             */
+            insertReportNew(apsReportRecordsDo,apsProductionOrderDo,apsBlankOrderDo,apsProcessOperationDo,apsProcessOperationProcessEquDo,aspCheckItemsDo);
 
             //=================更新工序作业明细的报工ID、已开工卷数============
             //将报工记录ID存入工序作业的设备子表中
@@ -978,9 +984,9 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationDo.getBlankid());
             //查询对应的订单评审信息
             ApsProductionOrderDo apsProductionOrderDo = apsProductionOrderService.getById(apsBlankOrderDo.getProductionorderid());
-            //合并加工作业开工之后进行报工,同步更新一起开工的其他作业的加工参数
+            //合并加工作业开工之后进行报工,同步更新一起开工的其他作业的加工参数//需求变更:前面条件成立的前提下增加查找与当前工序作业炉次号相同的数据
             if (ObjectUtil.isNotEmpty(apsReportMachiningDoList)) {
-                syncOtherEquRecords(apsProcessOperationDo, apsProcessOperationProcessEquDo, nowReportRecordsDo.getProcessequid(), apsReportMachiningDoList, currentUser);
+                syncOtherEquRecords(apsProcessOperationDo, apsProcessOperationProcessEquDo, nowReportRecordsDo.getProcessequid(), apsReportMachiningDoList, currentUser, nowReportRecordsDo.getHeatnumber());
             }
 
             //如果工序作业是否坯料工序=是,检查每个报工输出物料批次号
@@ -1170,7 +1176,15 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             List<String> batchOutPutNumberList = apsReportOutputDoList.stream().map(ApsReportOutputDo::getOutputnumber).collect(Collectors.toList());
             String outPutBatchNumbers = String.join(",", batchOutPutNumberList);
             apsReportRecordsDo.setNeedcheckbatchnumber(outPutBatchNumbers);
-
+            apsReportRecordsDo.setReportwatistestno(outPutBatchNumbers);
+            /**
+             * 新增需求:报工自动填入报工检验记录的加工参数逗号拼接,格式:{加工参数1}={参数值1},{加工参数2}={参数值2},
+             * 自动填入报工检验记录的加工参数逗号拼接,格式:{检查项目1}={检测值1},{检查项目2}={检测值2},
+             */
+            String jgcs = apsReportMachiningService.selectJgcsByReportId(apsReportRecordsDo.getId());
+            String jccs = apsReportCheckoutService.selectJccsByReportId(apsReportRecordsDo.getId());
+            apsReportRecordsDo.setReportjgcs(jgcs);
+            apsReportRecordsDo.setReportjgcs(jccs);
             this.updateById(apsReportRecordsDo);
 
 //        //物理删除原来的报工记录输出物料
@@ -1304,6 +1318,10 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             if (!r1.getCode().equals("200")) {
                 throw new CustomException(r1.getMsg());
             }
+            /**
+             * 新增需求:查询报工表的输出物料
+             */
+            String reportOutputDesc = apsReportOutputService.selectDescByReportId(apsReportRecordsDo.getId());
             //当前登录人
 //        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
             //更新检查记录的检验人、检验时间
@@ -1312,6 +1330,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             needUpdate.setCheckid(currentUser.getId());
             needUpdate.setCheckusername(currentUser.getName());
             needUpdate.setCheckdate(DateUtil.date());
+            needUpdate.setReportoutmaterrequest(reportOutputDesc);
             this.updateById(needUpdate);
         } finally {
             log.debug("报工完毕,从map中清空当前报工记录:{}", apsReportRecordsDo.getId());
@@ -1455,6 +1474,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
 
             //根据作业明细ID查询作业明细详情
             ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(req.getUseDeviceId());
+            //根据加工设备ID查询设备
+            AspCheckItemsDo aspCheckItemsDo = aspCheckItemsService.getById(apsProcessOperationProcessEquDo.getProcessdeviceid());
             //如果已开工卷数!= 已报工卷数,说明已经开工了,提示已开工
             if (!apsProcessOperationProcessEquDo.getStartingroll().equals(apsProcessOperationProcessEquDo.getReportroll())) {
                 return R.error("此作业已开工,请刷新列表后重试");
@@ -1544,6 +1565,10 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             apsReportRecordsDo.setDeviceparm(equparames);
             //注意事项
             apsReportRecordsDo.setAttention(apsProcessOperationDo.getRemark());
+            /**
+             * 新增需求:新增字段保存
+             */
+            insertReportNew(apsReportRecordsDo,apsProductionOrderDo,apsBlankOrderDo,apsProcessOperationDo,apsProcessOperationProcessEquDo,aspCheckItemsDo);
 
             //============开工时,生成炉号和批次号=============
             //获取设备/炉 的炉号(每月、每个设备/炉 更新)
@@ -1943,13 +1968,13 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
 
     /**
      * 更新合并加工的工序作业明细相关的报工记录下面的报工记录加工参数子表数据
-     *
+     * 需求变更:前面条件成立的前提下增加查找与当前工序作业炉次号相同的数据
      * @param apsProcessOperationDo
      * @param apsProcessOperationProcessEquDo
      * @param processEquId
      * @param apsReportMachiningDoList
      */
-    private void syncOtherEquRecords(ApsProcessOperationDo apsProcessOperationDo, ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo, String processEquId, List<ApsReportMachiningDo> apsReportMachiningDoList, SysUserVo currentUser) {
+    private void syncOtherEquRecords(ApsProcessOperationDo apsProcessOperationDo, ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo, String processEquId, List<ApsReportMachiningDo> apsReportMachiningDoList, SysUserVo currentUser, String heatnumber) {
         List<ApsReportMachiningDo> machList = apsReportMachiningService.list();
         List<String> mainRecordIds = machList.stream().map(ApsReportMachiningDo::getMainid).distinct().collect(Collectors.toList());
         if ("合并加工".equals(apsProcessOperationDo.getProcessway())) {
@@ -1960,10 +1985,11 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                     .notIn(ApsProcessOperationProcessEquDo::getId, processEquId)
                     .and(qw -> qw.gt(ApsProcessOperationProcessEquDo::getActualfinishdate, apsProcessOperationProcessEquDo.getActualstartdate()).or().isNull(ApsProcessOperationProcessEquDo::getActualfinishdate)));
             List<String> equIds = list.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList());
-            log.info("待同步工序作业主键数据:{}", equIds);
+            log.info("待同步工序作业明细主键数据:{}", equIds);
             if (!equIds.isEmpty()) {
                 List<ApsReportRecordsDo> recordsDos = this.list(new LambdaQueryWrapper<ApsReportRecordsDo>()
                         .eq(ApsReportRecordsDo::getDeleted, "0")
+                        .eq(ApsReportRecordsDo::getHeatnumber,heatnumber)
                         .in(ApsReportRecordsDo::getProcessequid, equIds)
                         .in(ApsReportRecordsDo::getReportworkstatus, "已开工", "已报工"));
                 recordsDos.forEach(info -> {
@@ -2063,6 +2089,38 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         });
     }
 
+    private void insertReportNew(ApsReportRecordsDo apsReportRecordsDo,ApsProductionOrderDo apsProductionOrderDo,ApsBlankOrderDo apsBlankOrderDo,ApsProcessOperationDo apsProcessOperationDo,ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,AspCheckItemsDo aspCheckItemsDo) {
+        apsReportRecordsDo.setReportorderno(apsProductionOrderDo.getOrderno());
+        apsReportRecordsDo.setReportcustomorderno(apsProductionOrderDo.getCustomorderno());
+        apsReportRecordsDo.setReportcustomname(apsProductionOrderDo.getCustomname());
+        apsReportRecordsDo.setReportoutputorderproduct(apsBlankOrderDo.getOutputorderproduct());
+        apsReportRecordsDo.setReportblanknumber(apsBlankOrderDo.getBlanknumber());
+        apsReportRecordsDo.setReportprocessdevice(apsProcessOperationProcessEquDo.getProcessdevice());
+        apsReportRecordsDo.setReportequparames(apsProcessOperationDo.getChooseequ());
+        apsReportRecordsDo.setReportcheckitemcode(aspCheckItemsDo.getCheckitemcode());
+        apsReportRecordsDo.setReportprocessworkshop(apsProcessOperationProcessEquDo.getProcessworkshop());
+//            apsReportRecordsDo.setReportnextprocess(apsProcessOperationDo.getNextprocess());
+        apsReportRecordsDo.setReportprocess(apsProcessOperationDo.getProcess());
+        apsReportRecordsDo.setReportprocessname(apsProcessOperationDo.getProcessname());
+        apsReportRecordsDo.setReportifblankprocess(apsProcessOperationDo.getIfblankprocess());
+        if (ObjectUtil.isNotEmpty(apsProcessOperationProcessEquDo.getNextprocessesids())){
+            List<String> nextEquIds = Arrays.asList(apsProcessOperationProcessEquDo.getNextprocessesids().split(","));
+            List<ApsProcessOperationProcessEquDo> nextEquDos = (List<ApsProcessOperationProcessEquDo>)apsProcessOperationProcessEquService.listByIds(nextEquIds);
+            List<String> workShops = nextEquDos.stream().map(ApsProcessOperationProcessEquDo::getProcessworkshop).distinct().collect(Collectors.toList());
+            List<String> devices = nextEquDos.stream().map(ApsProcessOperationProcessEquDo::getProcessdevice).distinct().collect(Collectors.toList());
+            apsReportRecordsDo.setReportnextworkshop(String.join(",",workShops));
+            apsReportRecordsDo.setReportnextprocessdevice(String.join(",",devices));
+            List<String> nextProcessIds = nextEquDos.stream().map(ApsProcessOperationProcessEquDo::getProcessid).distinct().collect(Collectors.toList());
+            if (ObjectUtil.isNotEmpty(nextProcessIds)){
+                List<ApsProcessOperationDo> nextProcessDos = (List<ApsProcessOperationDo>)apsProcessOperationService.listByIds(nextProcessIds);
+                List<String> process = nextProcessDos.stream().map(ApsProcessOperationDo::getProcess).distinct().collect(Collectors.toList());
+                List<String> processNames = nextProcessDos.stream().map(ApsProcessOperationDo::getProcessname).distinct().collect(Collectors.toList());
+                apsReportRecordsDo.setReportnextprocess(String.join(",",process));
+                apsReportRecordsDo.setReportnextprocessname(String.join(",",processNames));
+            }
+        }
+    }
+
 
 }
 

+ 360 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/utils/StringUtil.java

@@ -0,0 +1,360 @@
+package com.rongwei.bscommon.sys.utils;
+
+import org.apache.commons.lang3.BooleanUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author bootdo
+ */
+public class StringUtil extends org.apache.commons.lang3.StringUtils {
+
+    public static final char UNDERLINE = '_';
+    // 科学计数法的正则表达式
+    private static String scientificNotationPattern = "^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$";
+
+    /**
+     * 驼峰格式字符串转换为下划线格式字符串
+     *
+     * @param param
+     * @return
+     */
+    public static String camelToUnderline(String param) {
+        if (param == null || "".equals(param.trim())) {
+            return "";
+        }
+        int len = param.length();
+        StringBuilder sb = new StringBuilder(len);
+        for (int i = 0; i < len; i++) {
+            char c = param.charAt(i);
+            if (Character.isUpperCase(c)) {
+                sb.append(UNDERLINE);
+                sb.append(Character.toLowerCase(c));
+            } else {
+                sb.append(c);
+            }
+        }
+        return sb.toString();
+    }
+
+
+    /**
+     * 下划线格式字符串转换为驼峰格式字符串
+     *
+     * @param param
+     * @return
+     */
+    public static String underlineToCamel(String param) {
+        if (param == null || "".equals(param.trim())) {
+            return "";
+        }
+        int len = param.length();
+        StringBuilder sb = new StringBuilder(len);
+        for (int i = 0; i < len; i++) {
+            char c = param.charAt(i);
+            if (c == UNDERLINE) {
+                if (++i < len) {
+                    sb.append(Character.toUpperCase(param.charAt(i)));
+                }
+            } else {
+                sb.append(c);
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 下划线格式字符串转换为驼峰格式字符串2
+     *
+     * @param param
+     * @return
+     */
+    public static String underlineToCamel2(String param) {
+        if (param == null || "".equals(param.trim())) {
+            return "";
+        }
+        StringBuilder sb = new StringBuilder(param);
+        Matcher mc = Pattern.compile("_").matcher(param);
+        int i = 0;
+        while (mc.find()) {
+            int position = mc.end() - (i++);
+            sb.replace(position - 1, position + 1, sb.substring(position, position + 1).toUpperCase());
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 得到二位数的序号
+     *
+     * @param num
+     * @return
+     */
+    public static String getNextCode(Integer num) {
+        if (num == null || num == 0) {
+            return "001";
+        } else if (num > 0 && num < 9) {
+            return "00" + (num + 1) + "";
+        } else if (num == 9) {
+            return "010";
+        } else if (num >= 10 && num < 98) {
+            return "0" + (num + 1) + "";
+        } else if (num == 99) {
+            return "100";
+        } else {
+            return (num + 1) + "";
+        }
+    }
+
+
+    /**
+     * 将传入的对象转换为字符串,当传入的对象为null时返回默认值
+     * bw.ren  2019年6月3日09:46:33
+     *
+     * @param o
+     * @param dv
+     * @return
+     */
+    public static String safeToString(Object o, String dv) {
+        String r = dv;
+        if (o != null) {
+            r = String.valueOf(o);
+        }
+        return r;
+    }
+
+    /**
+     * 获得用户远程地址
+     */
+    public static String getRemoteAddr(HttpServletRequest request) {
+        String remoteAddr = request.getHeader("X-Real-IP");
+        if (isNotBlank(remoteAddr)) {
+            remoteAddr = request.getHeader("X-Forwarded-For");
+        } else if (isNotBlank(remoteAddr)) {
+            remoteAddr = request.getHeader("Proxy-Client-IP");
+        } else if (isNotBlank(remoteAddr)) {
+            remoteAddr = request.getHeader("WL-Proxy-Client-IP");
+        }
+        return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
+    }
+
+    /**
+     * 如果对象为空,则使用defaultVal值
+     * see: ObjectUtils.toString(obj, defaultVal)
+     *
+     * @param obj
+     * @param defaultVal
+     * @return
+     */
+    public static String toString(final Object obj, final String defaultVal) {
+        return obj == null ? defaultVal : obj.toString();
+    }
+
+    /**
+     * 转换为Boolean类型
+     * 'true', 'on', 'y', 't', 'yes' or '1' (case insensitive) will return true. Otherwise, false is returned.
+     */
+    public static Boolean toBoolean(final Object val) {
+        if (val == null) {
+            return false;
+        }
+        return BooleanUtils.toBoolean(val.toString()) || "1".equals(val.toString());
+    }
+
+    public static boolean isNumericzidai(String str) {
+        Pattern pattern = Pattern.compile("-?[0-9]+\\.?[0-9]*");
+        Matcher isNum = pattern.matcher(str);
+        if (!isNum.matches()) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 正则:手机号(简单), 1字头+10位数字即可.
+     *
+     * @param in
+     * @return
+     */
+    public static boolean validateMobilePhone(String in) {
+        Pattern pattern = Pattern.compile("^[1]\\d{10}$");
+        return pattern.matcher(in).matches();
+    }
+
+    /**
+     * 正则:邮箱
+     *
+     * @param in
+     * @return
+     */
+    public static boolean validateEmail(String in) {
+        Pattern pattern = Pattern.compile("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}");
+        return pattern.matcher(in).matches();
+    }
+
+
+
+    /**
+     * 是否是数字
+     * @param value
+     */
+    public static boolean isNum(String value){
+        Pattern p=null;//正则表达式
+        Matcher m=null;//操作符表达式
+        boolean b=false;
+        p=p.compile("^([+-]?)\\d*\\.?\\d+$");
+        m=p.matcher(value);
+        b=m.matches();
+        return b;
+    }
+
+    /**
+     * 根据正则截取字符串
+     * @return
+     */
+    public static String InterceptString(String projectName) {
+        Pattern pattern = Pattern.compile(".*?(?=\\()");
+        Matcher matcher = pattern.matcher(projectName);
+        while(matcher.find()){
+            return matcher.group();
+        }
+        return null;
+    }
+
+    
+    
+    /**
+     * 判断是否是身份证号
+     * @param cardNo
+     * @return
+     */
+    public static boolean isCard(String cardNo){
+        String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +
+                "(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";
+        boolean matches = cardNo.matches(regularExpression);
+        //判断第18位校验值
+        if (matches) {
+            if (cardNo.length() == 18) {
+                try {
+                    char[] charArray = cardNo.toCharArray();
+                    //前十七位加权因子
+                    int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
+                    //这是除以11后,可能产生的11位余数对应的验证码
+                    String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
+                    int sum = 0;
+                    for (int i = 0; i < idCardWi.length; i++) {
+                        int current = Integer.parseInt(String.valueOf(charArray[i]));
+                        int count = current * idCardWi[i];
+                        sum += count;
+                    }
+                    char idCardLast = charArray[17];
+                    int idCardMod = sum % 11;
+                    if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
+                        return true;
+                    } else {
+                        System.out.println("身份证最后一位:" + String.valueOf(idCardLast).toUpperCase() +
+                                "错误,正确的应该是:" + idCardY[idCardMod].toUpperCase());
+                        return false;
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    System.out.println("异常:" + cardNo);
+                    return false;
+                }
+            }
+        }
+        return matches;
+    }
+
+        public static void main(String[] args) {
+            boolean a = isScience("123456");
+            System.out.print(a);
+        }
+
+    /**
+     * 根据正则截取字符串
+     * @return
+     */
+    public static int getArrayElementPosition(String[] actualWeldInfo,String actualWeld) {
+        Arrays.sort(actualWeldInfo);
+        int position = Arrays.binarySearch(actualWeldInfo, actualWeld);
+        return position;
+    }
+
+    /**
+     * 格式化字符串中的小数点
+     */
+    public static String formatDecimal(String str) {
+        str =  str.replaceAll("[.](.*)","");
+        return str;
+    }
+
+    /**
+     * 四舍五入小数
+     */
+    public static String formatDecimalFiveIn(String str) {
+        str =  String.valueOf(Math.round(Float.parseFloat(str)));
+        return str;
+    }
+
+    public static int querySpecificCharacter(String flawInspectCode) {
+        int count = 0;
+        int strLength = flawInspectCode.length();
+        String searchChar = "R";
+        flawInspectCode = flawInspectCode.replace(searchChar, "");
+        int newLength = flawInspectCode.length();
+        count = strLength - newLength;
+        return count;
+    }
+
+    public static String getUUID(){
+        String uuid = UUID.randomUUID().toString().replaceAll("-","");
+        return uuid;
+    }
+
+    /**
+     * 在特定符号前插入字符串
+     * @return
+     */
+    public static String insertSpecificCharacter(String character,String charsToInsert){
+        String formatCharacter = "";
+        if (isNotBlank(character)&&isNotBlank(charsToInsert)){
+            // 在.号之前插入特殊字符
+            int indexOfSpace = character.indexOf(".");
+            if (indexOfSpace != -1) {
+                StringBuilder sb = new StringBuilder();
+                sb.append(character);
+                // 在索引为index处插入字符chars
+                sb.insert(indexOfSpace, charsToInsert);
+                formatCharacter = sb.toString();
+            }
+        }
+        return formatCharacter;
+    }
+
+    /**
+     * 判断是否包含字母
+     * @param ret
+     * @return
+     */
+    public static boolean isScience(String ret) {
+            return ret.matches(scientificNotationPattern);
+        }
+
+    /**
+     * 截取最后特殊符号前的数据
+     * @return
+     */
+    public static String getSubstringBeforeLastStar(String str,String symbol){
+        int lastIndex = str.lastIndexOf(symbol);
+        if (lastIndex!= -1) {
+            return str.substring(0, lastIndex);
+        }
+        return str;
+    }
+
+
+}

+ 208 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProcessOperationSplitDo.java

@@ -0,0 +1,208 @@
+package com.rongwei.bsentity.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 工序作业-分切车次
+ * </p>
+ *
+ * @author fpy
+ * @since 2024-12-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("aps_process_operation_split")
+public class ApsProcessOperationSplitDo extends BaseDo {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId("ID")
+    private String id;
+    @TableField("TENANTID")
+    private String tenantid;
+    /**
+     * 扩展json格式配置
+     */
+    @TableField("ROPTION")
+    private String roption;
+    /**
+     * 坯料ID
+     */
+    @TableField("BLANKID")
+    private String blankid;
+    /**
+     * 生产订单-坯料计划-工序作业ID
+     */
+    @TableField("MAINID")
+    private String mainid;
+    /**
+     * 分切车次
+     */
+    @TableField("SPLITTRAINNO")
+    private Integer splittrainno;
+    /**
+     * 物料1ID
+     */
+    @TableField("OUTMATERONEID")
+    private String outmateroneid;
+    /**
+     * 物料1
+     */
+    @TableField("OUTMATERONE")
+    private String outmaterone;
+    /**
+     * 物料1输出卷数
+     */
+    @TableField("ROLLNUMONE")
+    private Integer rollnumone;
+    /**
+     * 物料2ID
+     */
+    @TableField("OUTMATERTWOID")
+    private String outmatertwoid;
+    /**
+     * 物料2
+     */
+    @TableField("OUTMATERTWO")
+    private String outmatertwo;
+    /**
+     * 物料2输出卷数
+     */
+    @TableField("ROLLNUMTWO")
+    private Integer rollnumtwo;
+    /**
+     * 物料3ID
+     */
+    @TableField("OUTMATERTHRID")
+    private String outmaterthrid;
+    /**
+     * 物料3
+     */
+    @TableField("OUTMATERTHR")
+    private String outmaterthr;
+    /**
+     * 物料3输出卷数
+     */
+    @TableField("ROLLNUMTHR")
+    private Integer rollnumthr;
+    /**
+     * 物料4ID
+     */
+    @TableField("OUTMATERFOUID")
+    private String outmaterfouid;
+    /**
+     * 物料4
+     */
+    @TableField("OUTMATERFOU")
+    private String outmaterfou;
+    /**
+     * 物料4输出卷数
+     */
+    @TableField("ROLLNUMFOU")
+    private Integer rollnumfou;
+    /**
+     * 物料5ID
+     */
+    @TableField("OUTMATERFIVID")
+    private String outmaterfivid;
+    /**
+     * 物料5
+     */
+    @TableField("OUTMATERFIV")
+    private String outmaterfiv;
+    /**
+     * 物料5输出卷数
+     */
+    @TableField("ROLLNUMFIV")
+    private Integer rollnumfiv;
+    /**
+     * 物料6ID
+     */
+    @TableField("OUTMATERSIXID")
+    private String outmatersixid;
+    /**
+     * 物料6
+     */
+    @TableField("OUTMATERSIX")
+    private String outmatersix;
+    /**
+     * 物料6输出卷数
+     */
+    @TableField("ROLLNUMSIX")
+    private Integer rollnumsix;
+    /**
+     * 物料7ID
+     */
+    @TableField("OUTMATERSEVID")
+    private String outmatersevid;
+    /**
+     * 物料7
+     */
+    @TableField("OUTMATERSEV")
+    private String outmatersev;
+    /**
+     * 物料7输出卷数
+     */
+    @TableField("ROLLNUMSEV")
+    private Integer rollnumsev;
+    /**
+     * 物料8ID
+     */
+    @TableField("OUTMATEREIGID")
+    private String outmatereigid;
+    /**
+     * 物料8
+     */
+    @TableField("OUTMATEREIG")
+    private String outmatereig;
+    /**
+     * 物料8输出卷数
+     */
+    @TableField("ROLLNUMEIG")
+    private Integer rollnumeig;
+    /**
+     * 物料9ID
+     */
+    @TableField("OUTMATERNINID")
+    private String outmaterninid;
+    /**
+     * 物料9
+     */
+    @TableField("OUTMATERNIN")
+    private String outmaternin;
+    /**
+     * 物料9输出卷数
+     */
+    @TableField("ROLLNUMNIN")
+    private Integer rollnumnin;
+    /**
+     * 物料10ID
+     */
+    @TableField("OUTMATERTENID")
+    private String outmatertenid;
+    /**
+     * 物料10
+     */
+    @TableField("OUTMATERTEN")
+    private String outmaterten;
+    /**
+     * 物料10输出卷数
+     */
+    @TableField("ROLLNUMTEN")
+    private Integer rollnumten;
+
+
+}

+ 139 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsReportRecordsDo.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 import com.rongwei.rwcommon.base.BaseDo;
@@ -128,6 +129,144 @@ public class ApsReportRecordsDo extends BaseDo implements Serializable {
      */
     private String attention;
 
+    /**
+     * 实际输入卷重(吨)
+     */
+    private BigDecimal actualrollweight;
+
+    /**
+     * 订单单据号
+     */
+    private String reportorderno;
+    /**
+     * 客户名称
+     */
+    private String reportcustomname;
+    /**
+     * 客户订单号
+     */
+    private String reportcustomorderno;
+    /**
+     * 输出订单产品
+     */
+    private String reportoutputorderproduct;
+    /**
+     * 坯料计划编号
+     */
+    private String reportblanknumber;
+    /**
+     * 加工车间ID
+     */
+    private String reportprocessworkshopid;
+    /**
+     * 加工车间
+     */
+    private String reportprocessworkshop;
+    /**
+     * 加工设备ID
+     */
+    private String reportprocessdeviceid;
+    /**
+     * 加工设备
+     */
+    private String reportprocessdevice;
+    /**
+     * 加工设备编号
+     */
+    private String reportcheckitemcode;
+    /**
+     * 设备参数
+     */
+    private String reportequparames;
+    /**
+     * 工序
+     */
+    private String reportprocess;
+    /**
+     * 工序显示名
+     */
+    private String reportprocessname;
+    /**
+     * 下道工序作业ID
+     */
+    private String reportnextprocessid;
+    /**
+     * 下道工序作业
+     */
+    private String reportnextprocess;
+    /**
+     * 下道工序作业显示名
+     */
+    private String reportnextprocessname;
+    /**
+     * 实际输入厚度(mm)
+     */
+    private BigDecimal reportactualrollthickness;
+    /**
+     * 实际输入宽度(mm)
+     */
+    private BigDecimal reportactualrollwidth;
+    /**
+     * 实际输入长度(mm)
+     */
+    private BigDecimal reportactualrolllength;
+    /**
+     * 实际加工设备ID
+     */
+    private String reportactualdeviceid;
+    /**
+     * 实际加工设备
+     */
+    private String reportactualdevice;
+    /**
+     * 实际加工设备编号
+     */
+    private String reportactualdevicecode;
+    /**
+     * 实际加工车间ID
+     */
+    private String reportactualworkshopid;
+    /**
+     * 实际加工车间
+     */
+    private String reportactualworkshop;
+    /**
+     * 加工参数
+     */
+    private String reportjgcs;
+    /**
+     * 检测参数
+     */
+    private String reportjccs;
+    /**
+     * 输出物料
+     */
+    private String reportoutmaterrequest;
+    /**
+     * 下道车间ID
+     */
+    private String reportnextworkshopid;
+    /**
+     * 下道车间
+     */
+    private String reportnextworkshop;
+    /**
+     * 下道设备ID
+     */
+    private String reportnextprocessdeviceid;
+    /**
+     * 下道设备
+     */
+    private String reportnextprocessdevice;
+    /**
+     * 待检验批次号
+     */
+    private String reportwatistestno;
+    /**
+     * 是否坯料工序
+     */
+    private String reportifblankprocess;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }