Jelajahi Sumber

Merge remote-tracking branch 'origin/mode-min-unit' into mode-min-unit

fangpy 6 bulan lalu
induk
melakukan
10c628a93f

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

@@ -110,6 +110,9 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
 
     @Update("update sys_serial_number set CURVALUE = ${nowValue} where MODULECODE = #{moduleCode}")
     void updateSerialNumberCurvalue(@Param("moduleCode") String moduleCode, @Param("nowValue") long nowValue);
+
+    @Select("select * from aps_process_operation_process_equ where DELETED = 0 AND PROCESSDEVICEID = #{processdeviceid} AND ID != #{apsProcessOperationProcessEquDoId} AND WAITREPORTID IS NOT NULL AND WAITREPORTID != '' AND PLANSTARTDATE != #{planstartdate}")
+    int selectOtherDeviceCount(@Param("processdeviceid") String processdeviceid,@Param("apsProcessOperationProcessEquDoId") String apsProcessOperationProcessEquDoId, @Param("planstartdate") Date planstartdate);
 }
 
 

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

@@ -504,6 +504,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         }
         // 作业明细锁定
         if (orderLockVo.getId() != null && orderLockVo.getId().size() > 0) {
+            //校验工序作业状态
+            List<ApsProcessOperationDo> apsProcessOperationDos = new ArrayList<>(apsProcessOperationService.listByIds(orderLockVo.getId()));
+            //解锁的情况下校验 工序作业对应的生产状态
+            boolean b = apsProcessOperationDos.stream().allMatch(info -> COMPLETED.equals(info.getProcessstatus()) ||
+                    PROCESSING.equals(info.getProcessstatus()));
+            if (b) {
+                return R.error("所选作业都已开工,不可以解锁,不能锁定");
+            }
             apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
                     .in(ApsProcessOperationProcessEquDo::getId, orderLockVo.getId())
                     .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, lockMark));
@@ -1748,6 +1756,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
         //获取坯料计划内容
         ApsBlankOrderDo apsBlankOrderDo = req.getApsBlankOrderDo();
+
+        //如果数据库存在此坯料计划 并且 坯料计划的生产状态和数据库的生产状态不一致,提示
+        ApsBlankOrderDo newBlankOrder = this.getById(apsBlankOrderDo.getId());
+        if (ObjectUtil.isNotEmpty(newBlankOrder) && !apsBlankOrderDo.getProductstatus().equals(newBlankOrder.getProductstatus())) {
+            return R.error("该坯料计划状态已被其他人修改,请刷新页面后重新进入");
+        }
+
         //获取当前用户信息
         //获取当前用户的所属工厂
         SysUserVo currentUser = CXCommonUtils.getCurrentUser();

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

@@ -463,6 +463,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
             List<ApsProductDetailDo> productDetailDoList = BeanUtil.copyToList(apsProductDetailVoList, ApsProductDetailDo.class);
             //================循环校验坯料计划===============
             for (int i = 0; i < apsBlankOrderDoList.size(); i++) {
+                //如果坯料计划已发布,则不再校验
+                if (Integer.parseInt(apsBlankOrderDoList.get(i).getProductstatus()) > 20) {
+                    continue;
+                }
                 CheckAndSaveOrUpdateBlankReq checkAndSaveOrUpdateBlankReq = new CheckAndSaveOrUpdateBlankReq();
                 checkAndSaveOrUpdateBlankReq.setApsBlankOrderDo(apsBlankOrderDoList.get(i));
                 checkAndSaveOrUpdateBlankReq.setApsProcessOutputProductDoList(apsProcessOutputProductService.list(new QueryWrapper<ApsProcessOutputProductDo>().lambda().eq(ApsProcessOutputProductDo::getBlankid, apsBlankOrderDoList.get(i).getId())));

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

@@ -433,22 +433,27 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             //当前工序作业明细的ID
             String apsProcessOperationProcessEquDoId = apsProcessOperationProcessEquDo.getId();
             //查询当前工序作业的作业明细的 加工设备 对应的其他工序作业的作业明细 并且待报工记录ID不为空
-            List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquDao.selectOtherDeviceList(processdeviceid, apsProcessOperationProcessEquDoId);
-//        List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquService.list(
-//                new QueryWrapper<ApsProcessOperationProcessEquDo>().lambda()
-//                        .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, processdeviceid)//当前工序作业的作业明细的 加工设备
-//                        .ne(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDoId)//对应的其他工序作业的作业明细
-//                        .isNotNull(ApsProcessOperationProcessEquDo::getWaitreportid)//待报工记录ID不为空
-//        );
-            //存在已使用,判断是否是合并作业 (计划开工时间相同)
-            if (ObjectUtil.isNotEmpty(list)) {
-                //已开工的作业明细的计划开工时间
-                Date planstartdate = list.get(0).getPlanstartdate();
-                //开工时间不用
-                if (planstartdate.compareTo(apsProcessOperationProcessEquDo.getPlanstartdate()) != 0) {
-                    return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
-                }
-            }
+            //存在计划开工时间不同(非合并作业) 并且加工设备正在使用的作业明细数量
+            int count = apsProcessOperationProcessEquDao.selectOtherDeviceCount(processdeviceid, apsProcessOperationProcessEquDoId, apsProcessOperationProcessEquDo.getPlanstartdate());
+            if (count > 0) {
+                return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
+            }
+//            List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquDao.selectOtherDeviceList(processdeviceid, apsProcessOperationProcessEquDoId);
+////        List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquService.list(
+////                new QueryWrapper<ApsProcessOperationProcessEquDo>().lambda()
+////                        .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, processdeviceid)//当前工序作业的作业明细的 加工设备
+////                        .ne(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDoId)//对应的其他工序作业的作业明细
+////                        .isNotNull(ApsProcessOperationProcessEquDo::getWaitreportid)//待报工记录ID不为空
+////        );
+//            //存在已使用,判断是否是合并作业 (计划开工时间相同)
+//            if (ObjectUtil.isNotEmpty(list)) {
+//                //已开工的作业明细的计划开工时间
+//                Date planstartdate = list.get(0).getPlanstartdate();
+//                //开工时间不用
+//                if (planstartdate.compareTo(apsProcessOperationProcessEquDo.getPlanstartdate()) != 0) {
+//                    return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
+//                }
+//            }
 
 
 //        //设备的待加工ID

File diff ditekan karena terlalu besar
+ 2 - 2
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsBlankOrderDao.xml


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

@@ -7,4 +7,5 @@ import com.rongwei.rwcommon.base.R;
 public interface EquEnergyRecordService extends IService<EquEnergyRecordDo> {
     R calEnergyUsage();
 
+    R calEnergyUsageByStartTime(String endTime);
 }

+ 27 - 11
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquEnergyRecordServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.EquEnergyRecordDao;
 import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bsentity.domain.EquEnergyMeterDosageDayDo;
-import com.rongwei.bsentity.domain.EquEnergyMeterDosageMonthDo;
 import com.rongwei.bsentity.domain.EquEnergyRecordDo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
@@ -39,7 +38,7 @@ public class EquEnergyRecordServiceImpl extends ServiceImpl<EquEnergyRecordDao,
     @Override
     public R calEnergyUsage() {
         //1.先将60天内计算出来的数据更新或者插入保存到 表具每日能源用量 equ_energy_meter_dosage_day表中
-        this.calRecordDataToDosageDay();
+        this.calRecordDataToDosageDay(null);
         //2.根据equ_energy_meter_dosage_day中数据将近60天内每个日期的能源用量数据更新写入到 每月能源用量 equ_energy_meter_dosage_month
         equEnergyMeterDosageMonthService.calDayToMonth();
         //3.根据equ_energy_meter_dosage_day表中每日能源用量数据、能源成本中心与表具的关系和计算方式,equ_energy_meter_center_dosage_day
@@ -49,6 +48,18 @@ public class EquEnergyRecordServiceImpl extends ServiceImpl<EquEnergyRecordDao,
         return R.ok();
     }
 
+    @Override
+    public R calEnergyUsageByStartTime(String endTime) {
+        //1.先将60天内计算出来的数据更新或者插入保存到 表具每日能源用量 equ_energy_meter_dosage_day表中
+        this.calRecordDataToDosageDay(endTime);
+        //2.根据equ_energy_meter_dosage_day中数据将近60天内每个日期的能源用量数据更新写入到 每月能源用量 equ_energy_meter_dosage_month
+        equEnergyMeterDosageMonthService.calDayToMonth();
+        //3.根据equ_energy_meter_dosage_day表中每日能源用量数据、能源成本中心与表具的关系和计算方式,equ_energy_meter_center_dosage_day
+        equEnergyMeterCenterDosageDayService.calRecordDataToCenterDosageDay();
+        //4.根据equ_energy_meter_center_dosage_day每日能源成本中心中数据将近60天内每个日期的能源用量数据更新写入到 每月能源用量equ_energy_meter_dosage_month表中
+        equEnergyMeterCenterDosageMonthService.calRecordDataToCenterDosageMonth();
+        return R.ok();
+    }
 
 
     /**
@@ -56,32 +67,37 @@ public class EquEnergyRecordServiceImpl extends ServiceImpl<EquEnergyRecordDao,
      *  月数据 按 表具id - 年 -月 统计
      * @return
      */
-    private void calRecordDataToDosageDay() {
+    private void calRecordDataToDosageDay(String endTime) {
         //间隔天数
         int intervalDays =60;
         // 获取当前日期
-        LocalDate today = LocalDate.now();
+        LocalDate today = null;
+        today = LocalDate.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        if (endTime!=null){
+            //根据传入的时间做当前日期
+            today = LocalDate.parse(endTime, formatter);
+        }
         // 计算60天前的日期
         LocalDate sixtyDaysAgo = today.minusDays(intervalDays);
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        String endTime = today.format(formatter)+" 23:59:59";
-        String startTime = sixtyDaysAgo.format(formatter);
+        endTime = today.format(formatter)+" 23:59:59";
+        String startTime = sixtyDaysAgo.format(formatter)+" 00:00:00";
         //获取60天内所有表具中最新记录的相差值
         List<EquEnergyMeterDosageDayDo> equEnergyMeterDosageDayDos = equEnergyRecordDao.calRecordDataToDosageDay(startTime,endTime);
         //根据表具,时间 分组 ,每个镖局补充 60 天的记录
         Map<String, Map<String, List<EquEnergyMeterDosageDayDo>>> collect = equEnergyMeterDosageDayDos.stream().collect(Collectors.groupingBy(EquEnergyMeterDosageDayDo::getMeterid,
                 Collectors.groupingBy(EquEnergyMeterDosageDayDo::getCenterday)));
-
         List<EquEnergyMeterDosageDayDo>  dayList =new ArrayList<>();
         final EquEnergyMeterDosageDayDo[] dayDos= {null};
         final String[] dateKey = {""};
         final String[] tenantid = {""};
         final String[] ownedfactory = {""};
+        LocalDate finalToday = today;
         collect.forEach((meterid, map) -> {
-             tenantid[0] = map.values().stream().findFirst().get().get(0).getTenantid();
-             ownedfactory[0] = map.values().stream().findFirst().get().get(0).getOwnedfactory();
+            tenantid[0] = map.values().stream().findFirst().get().get(0).getTenantid();
+            ownedfactory[0] = map.values().stream().findFirst().get().get(0).getOwnedfactory();
             for (int i = 1; i < intervalDays; i++) {
-                dateKey[0] =  today.minusDays(i).format(formatter);
+                dateKey[0] =  finalToday.minusDays(i).format(formatter);
                 if (!map.containsKey(dateKey[0])){
                     //表具能源用量 在该日期不存在记录,用量默认 null 新建记录
                     dayDos[0] =new EquEnergyMeterDosageDayDo();

+ 17 - 0
cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/EquEnergyRecordController.java

@@ -6,6 +6,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -42,4 +43,20 @@ public class EquEnergyRecordController {
         }
     }
 
+
+    /**
+     * 手动入参 补充数据
+     * @param endTime
+     * @return
+     */
+    @RequestMapping("/calEnergyUsageByStartTime/{endTime}")
+    public R calEnergyUsageByStartTime(@PathVariable("endTime") String endTime) {
+        try {
+            logger.info("手动调用计算能源用量开始:{}"+new Date());
+            return equEnergyRecordService.calEnergyUsageByStartTime(endTime);
+        } catch (Exception e) {
+            logger.error("计算能源用量失败:{}" + e.getMessage());
+            return R.error();
+        }
+    }
 }