Browse Source

aps-导入导出修改

sucheng 3 months ago
parent
commit
2b53691473

+ 3 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationProcessEquDao.java

@@ -144,7 +144,9 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
 
     List<ApsProcessOperationProcessEquDoAndWidthVo> getAllWaitDoList();
 
-    List<DeviceCodeAndNameDownVo> selectAllDevice();
+    List<DeviceCodeAndNameDownVo> selectAllDevice(@Param("tenantId") String tenantId);
+
+    List<RollerTypeDownVo> selectAllRollerType(@Param("tenantId") String tenantId);
 }
 
 

+ 1 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/listener/SpecificRowDropDownHandler.java

@@ -66,7 +66,7 @@ public class SpecificRowDropDownHandler implements CellWriteHandler {
             );
 
             DataValidation validation = helper.createValidation(constraint, addressList);
-            validation.setSuppressDropDownArrow(false);  // 显示下拉箭头
+            validation.setSuppressDropDownArrow(true);  // 显示下拉箭头
             sheet.addValidationData(validation);
         }
     }

+ 50 - 11
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java

@@ -2625,16 +2625,18 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             res.add(workShopExportVo);
         }
 
+        String tenantId = CXCommonUtils.getCurrentUserFactoryId(null);
         // 动态选项提供者(可以从数据库或其他服务获取)
         //查询设备信息,组装数据
-        List<DeviceCodeAndNameDownVo> devices = this.baseMapper.selectAllDevice();
-        String deviceExpression = "下拉选!$A$2:$A$" + (devices.size() + 1);
-        List<String> deviceList = devices.stream().map(DeviceCodeAndNameDownVo::getDevice).collect(Collectors.toList());
-        Supplier<List<String>> statusOptions = () -> deviceList;
-//        Supplier<List<String>> statusOptions = () -> Arrays.asList("Z-03-01-003(03#冷轧机)");
+        List<DeviceCodeAndNameDownVo> devices = this.baseMapper.selectAllDevice(tenantId);
+        String deviceExpression = "设备下拉选!$A$2:$A$" + (devices.size() + 1);
+
+        //辊类型下拉选
+        List<RollerTypeDownVo> rollerTypes = this.baseMapper.selectAllRollerType(tenantId);
+        String rollerExpression = "辊下拉选!$A$2:$A$" + (rollerTypes.size() + 1);
 
         // 只对第2行和第4行设置下拉(relativeRowIndex从0开始)
-        IntPredicate rowFilter = rowIndex -> rowIndex == 0 || rowIndex == 1;
+        IntPredicate rowFilter = rowIndex -> rowIndex != 0;
 
         // 设置响应头
         String fileName = "车间作业跟踪导出数据_" + System.currentTimeMillis() + ".xlsx";
@@ -2648,19 +2650,30 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         WriteSheet writeSheet1 = EasyExcel.writerSheet("车间作业跟踪")
                 .head(WorkShopExportVo.class)
                 .registerWriteHandler(new SpecificRowDropDownHandler(
-                        1, // 第2列(索引1)
+                        1, // 第2列(索引1)设备编号
                         rowFilter,
                         null,
                         deviceExpression
                 ))
+                .registerWriteHandler(new SpecificRowDropDownHandler(
+                        12, // 第13列(索引12)辊类型
+                        rowFilter,
+                        null,
+                        rollerExpression
+                ))
                 .build();
         excelWriter.write(res, writeSheet1);
 
         // 第二个Sheet:设备列表(直接写入字符串列表)
-        WriteSheet deviceSheet = EasyExcel.writerSheet(1, "下拉选")
+        WriteSheet deviceSheet = EasyExcel.writerSheet(1, "设备下拉选")
                 .head(DeviceCodeAndNameDownVo.class)
                 .build();
         excelWriter.write(devices, deviceSheet);
+        // 第三个Sheet:辊列表(直接写入字符串列表)
+        WriteSheet rollerSheet = EasyExcel.writerSheet(2, "辊下拉选")
+                .head(RollerTypeDownVo.class)
+                .build();
+        excelWriter.write(rollerTypes, rollerSheet);
         excelWriter.finish();
 //        // 写入Excel
 //        EasyExcel.write(response.getOutputStream(), WorkShopExportVo.class)
@@ -2804,8 +2817,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             }
 
             //计算作业时长
-            int workTime = (int) DateUtil.between(equDo.getPlanstartdate(), equDo.getPlanenddate(), DateUnit.MINUTE);
-
+//            int workTime = (int) DateUtil.between(equDo.getPlanstartdate(), equDo.getPlanenddate(), DateUnit.MINUTE);
+            int workTime = Math.abs(Integer.parseInt(workShopExportVo.getTime()));
             if (!resMap.containsKey(aspCheckItemsDo.getId())) {
                 if (workShopExportVo.getPlanstartdate() == null) {
                     errorMessageList.add("第" + num + "行是该设备第一个作业,计划开工时间不能为空;");
@@ -2840,7 +2853,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                         }
                     }
                 }
-                needUpdate.setPlanenddate(DateUtil.offsetMinute(workShopExportVo.getPlanstartdate(), workTime));
+                needUpdate.setPlanenddate(DateUtil.offsetMinute(needUpdate.getPlanstartdate(), workTime));
                 apsProcessOperationProcessEquDos.add(needUpdate);
             }
         }
@@ -2892,7 +2905,33 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     wrapper.eq(ApsProcessOperationProcessEquDo::getId, equDo.getId())
                             .eq(ApsProcessOperationProcessEquDo::getWorkstatus, "待开工");
                     apsProcessOperationProcessEquService.update(wrapper);
+
+                    ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = this.getById(equDo.getId());
+                    //冲突更新
+                    //原明细详情
+                    ApsProcessOperationProcessEquDoAndWidthVo oldEqu = apsProcessOperationProcessEquDoList.stream().filter(item -> item.getId().equals(equDo.getId())).findFirst().orElse(null);
+                    Date planstartdate = null;
+                    Date planenddate = null;
+                    String processDeviceId = null;
+                    String processway = "非合并加工";
+                    if (oldEqu != null) {
+                        planstartdate = oldEqu.getPlanstartdate();
+                        planenddate = oldEqu.getPlanenddate();
+                        processDeviceId = oldEqu.getProcessdeviceid();
+                        processway = oldEqu.getProcessway();
+                    }
+                    checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
+                            planstartdate, planenddate, processDeviceId, processway, new LinkedList<>());
+                    // 判断是否存在设备不可用
+                    apsProcessOperationProcessEquDo = this.getById(apsProcessOperationProcessEquDo.getId());
+                    inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
+                            apsProcessOperationProcessEquDo.getProcessdeviceid(),
+                            apsProcessOperationProcessEquDo.getPlanstartdate(),
+                            apsProcessOperationProcessEquDo.getPlanenddate(),
+                            new LinkedList<>());
                 }
+
+
                 if (!processIdList.isEmpty()) {
                     //更新对应工序作业的 计划完工时间和计划开工时间
                     this.baseMapper.updateProcessPlanTimeByProcessIds(processIdList);

+ 15 - 2
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -684,7 +684,8 @@
             resultType="com.rongwei.bsentity.vo.ApsProcessOperationProcessEquDoAndWidthVo">
         SELECT
             apope.*,
-            apoom.PROWIDTH AS 'width'
+            apoom.PROWIDTH AS 'width',
+            apo.PROCESSWAY AS 'processway'
         FROM
             aps_process_operation_process_equ apope
                 JOIN aps_process_operation apo ON apope.PROCESSID = apo.ID
@@ -696,6 +697,18 @@
           AND apope.WORKSTATUS = '待开工'
     </select>
     <select id="selectAllDevice" resultType="com.rongwei.bsentity.vo.DeviceCodeAndNameDownVo">
-        select CONCAT(CHECKITEMCODE,'(',CHECKITEMNAME,')') AS 'device' from asp_check_items where DELETED = 0 AND CHECKITEMCODE != '' AND CHECKITEMCODE is not null
+        SELECT
+            CONCAT( CHECKITEMCODE, '(', CHECKITEMNAME, ')' ) AS 'device'
+        FROM
+            asp_check_items
+        WHERE
+            DELETED = 0
+          AND CHECKITEMCODE != ''
+          AND CHECKITEMCODE IS NOT NULL
+          AND CHECKITEMTYPE IN ('283','304')
+        AND TENANTID = #{tenantId}
+    </select>
+    <select id="selectAllRollerType" resultType="com.rongwei.bsentity.vo.RollerTypeDownVo">
+        select distinct ROLLERTYPE AS 'rollerType' from aps_roller_type where DELETED = 0 AND TENANTID = #{tenantId}
     </select>
 </mapper>

+ 2 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsProcessOperationProcessEquDoAndWidthVo.java

@@ -13,4 +13,6 @@ import java.math.BigDecimal;
 public class ApsProcessOperationProcessEquDoAndWidthVo extends ApsProcessOperationProcessEquDo {
     //宽
     private BigDecimal width;
+    //加工方式
+    private String processway;
 }

+ 15 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/RollerTypeDownVo.java

@@ -0,0 +1,15 @@
+package com.rongwei.bsentity.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2025/4/20
+ */
+@Data
+public class RollerTypeDownVo {
+    //辊类型
+    @ExcelProperty("辊类型")
+    private String rollerType;
+}