sfd
2025-05-19 6671f69b4d24869f3f321a15f511c2ad61b64c04
Merge branch 'dev' of http://192.168.50.149:8085/r/aps-backend into dev
已修改12个文件
已添加1个文件
221 ■■■■ 文件已修改
aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlanTaskController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateStandardRequireController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlate/ApsPlateStandardRequireOrderEndDay.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireOrderEndDayMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlateStandardRequireOrderEndDayService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateOrderPlanManagerServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireOrderEndDayServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireOrderEndDayMapper.xml 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java
@@ -26,6 +26,13 @@
    /**
     * åˆ¤æ–­æ˜¯å¦å­˜åœ¨é”
     * */
    public boolean existLock(String key,String value){
        return this.redisTemplate.opsForValue().get(key).equals(value);
    }
    /**
     *  åР锁
     **/
    public Boolean getLock(String key,String value,Long timeoutSeconds){
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlanTaskController.java
@@ -1,13 +1,11 @@
package com.aps.core.controller.mainPlan;
import com.aps.common.core.domain.R;
import com.aps.common.core.web.controller.BaseController;
import com.aps.common.core.web.page.PageDomain;
import com.aps.common.core.web.page.TableDataInfo;
import com.aps.common.core.web.page.TableSupport;
import com.aps.common.security.annotation.RequiresPermissions;
import com.aps.core.domain.ApsPlanTask;
import com.aps.core.service.ApsPlanTaskService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -25,7 +23,7 @@
    @Autowired
    private ApsPlanTaskService apsPlanTaskService;
//    @RequiresPermissions("planTask:list")
    @RequiresPermissions("planTask:list")
    @GetMapping("/list")
    public Page<ApsPlanTask> list(ApsPlanTask task){
        PageDomain pageDomain = TableSupport.buildPageRequest();
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateStandardRequireController.java
@@ -138,14 +138,11 @@
    /**
     * ç”Ÿæˆé’£é‡‘计划
     * */
    @PostMapping("/generatorPlan")
    public AjaxResult generatorPlan()
    {
        String batchNum= requireBatchService.getNewBatchNumber();
        planTaskService.savePlanTask(batchNum);
        apsPlateStandardRequireService.generatorPlan(batchNum);
        planTaskService.updateTaskStatus(batchNum, PLAN_TASK_STATUS.FINISHED);
        return success();
        return  planTaskService.generatorPlan();
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlate/ApsPlateStandardRequireOrderEndDay.java
@@ -22,30 +22,6 @@
    private Long id;
    /**
     * Bom—Order关系ID
     */
    @TableField(value = "bom_order_id")
    private Long bomOrderId;
    /**
     * éœ€æ±‚ID
     */
    @TableField(value = "require_id")
    private Long requireId;
    /**
     * éœ€æ±‚追溯ID
     */
    @TableField(value = "require_track_id")
    private String requireTrackId;
    /**
     * æ–™å·
     */
    @TableField(value = "bom_line_code")
    private String bomLineCode;
    /**
     * è®¢å•号
     */
    @TableField(value = "doc_no")
@@ -54,6 +30,11 @@
    /**
     * è‡ªå®šä¹‰è®¡åˆ’完成时间
     */
    @TableField(value = "plan_start_day")
    private Date planStartDay;
    /**
     * è‡ªå®šä¹‰è®¡åˆ’完成时间
     */
    @TableField(value = "plan_end_day")
    private Date planEndDay;
aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.aps.core.enums;
public enum REDIS_LOCK_KEY {
    /*钣金工单计划任务*/
    PLATE_ORDER_PLAN("PLAN_TASK:PLATE_ORDER_PLAN");
    private String key;
    public String getKey() {
        return key;
    }
    REDIS_LOCK_KEY(String key) {
        this.key = key;
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireOrderEndDayMapper.java
@@ -1,7 +1,11 @@
package com.aps.core.mapper;
import com.aps.core.domain.ApsPlate.ApsPlateOrderPlanDate;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireOrderEndDay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author zhl
@@ -9,8 +13,13 @@
* @createDate 2025-05-19 10:20:50
* @Entity com.aps.core.domain.ApsPlate.ApsPlateStandardRequireOrderEndDay
*/
@Mapper
public interface ApsPlateStandardRequireOrderEndDayMapper extends BaseMapper<ApsPlateStandardRequireOrderEndDay> {
    Integer batchInsert(List<Long> planIds,String createBy);
    Integer batchRemove(List<Long> planIds);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java
@@ -1,5 +1,6 @@
package com.aps.core.service;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.core.domain.ApsPlanTask;
import com.aps.core.enums.PLAN_TASK_STATUS;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -20,4 +21,6 @@
    void savePlanTask(String batchNum);
    void updateTaskStatus(String batchNum, PLAN_TASK_STATUS status);
    AjaxResult generatorPlan();
}
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlateStandardRequireOrderEndDayService.java
@@ -3,6 +3,8 @@
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireOrderEndDay;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @author zhl
* @description é’ˆå¯¹è¡¨ã€aps_plate_standard_require_order_end_day(需求计划完成日期表)】的数据库操作Service
@@ -10,4 +12,5 @@
*/
public interface ApsPlateStandardRequireOrderEndDayService extends IService<ApsPlateStandardRequireOrderEndDay> {
    int saveBatch(List<Long> planIds);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java
@@ -1,34 +1,52 @@
package com.aps.core.service.impl;
import cn.hutool.core.util.IdUtil;
import com.aps.common.core.domain.R;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.redis.service.RedisLockUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.enums.PLAN_TASK_STATUS;
import com.aps.core.enums.PLAN_TASK_TYPE;
import com.aps.core.enums.REDIS_LOCK_KEY;
import com.aps.core.service.ApsPlate.IApsPlateStandardRequireBatchService;
import com.aps.core.service.ApsPlate.IApsPlateStandardRequireService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.aps.core.domain.ApsPlanTask;
import com.aps.core.service.ApsPlanTaskService;
import com.aps.core.mapper.ApsPlanTaskMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import static com.aps.common.core.web.domain.AjaxResult.success;
import static com.aps.core.enums.REDIS_LOCK_KEY.PLATE_ORDER_PLAN;
/**
* @author zhl
* @description é’ˆå¯¹è¡¨ã€aps_plan_task(计划生成日志表)】的数据库操作Service实现
* @createDate 2025-05-16 14:41:49
*/
@Slf4j
@Service
public class ApsPlanTaskServiceImpl extends ServiceImpl<ApsPlanTaskMapper, ApsPlanTask> implements ApsPlanTaskService{
    @Autowired
    ApsPlanTaskMapper mapper;
    @Autowired
    private IApsPlateStandardRequireService apsPlateStandardRequireService;
    @Resource
    IApsPlateStandardRequireBatchService requireBatchService;
    @Resource
    RedisLockUtils redisLockUtils;
    @Override
    public Page<ApsPlanTask> pagingList(Page<ApsPlanTask> page ,ApsPlanTask task){
        LambdaQueryWrapper<ApsPlanTask> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.like( !task.getTaskType().isEmpty(),  ApsPlanTask::getTaskType,task.getTaskType());
@@ -65,6 +83,39 @@
                .build();
        baseMapper.update(task,queryWrapper);
    }
    @Override
    public AjaxResult generatorPlan()
    {
        String plateOrderPlanKey = PLATE_ORDER_PLAN.getKey();
        boolean existsLock = redisLockUtils.existLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_PLAN.getCode());
        if (existsLock){
            return AjaxResult.warn("钣金工单计划任务正在执行中!");
        }
        LambdaQueryWrapper<ApsPlanTask> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(ApsPlanTask::getTaskType,PLAN_TASK_TYPE.PLATE_PLAN.getCode());
        queryWrapper.eq(ApsPlanTask::getTaskStatus,PLAN_TASK_STATUS.IN_PROCESS.getCode());
        boolean existsDbTask = mapper.exists(queryWrapper);
        if (existsDbTask){
            return AjaxResult.warn("钣金工单计划任务正在执行中!!");
        }
        try {
            redisLockUtils.getLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode(), 3*60L);
            String batchNum= requireBatchService.getNewBatchNumber();
            this.savePlanTask(batchNum);
            apsPlateStandardRequireService.generatorPlan(batchNum);
            this.updateTaskStatus(batchNum, PLAN_TASK_STATUS.FINISHED);
            log.info("计划任务执行完成!"+batchNum);
            return success();
        }catch (Exception e){
            redisLockUtils.releaseLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode());
            log.error("计划任务执行失败!"+e.getMessage());
            return AjaxResult.error("计划任务执行失败!"+e.getMessage());
        }finally {
            redisLockUtils.releaseLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode());
        }
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateOrderPlanManagerServiceImpl.java
@@ -11,6 +11,7 @@
import com.aps.core.service.ApsPlate.IApsPlateOrderPlanManagerService;
import com.aps.core.service.ApsPlate.IApsPlateStandardRequireBatchService;
import com.aps.core.service.ApsPlate.IApsPlateStandardRequireService;
import com.aps.core.service.ApsPlateStandardRequireOrderEndDayService;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -35,6 +36,9 @@
    IApsPlateStandardRequireBatchService requireBatchService;
    @Resource
    ApsPlanTaskService planTaskService;
    @Resource
    ApsPlateStandardRequireOrderEndDayService  orderEndDayService;
    /**
     * æŸ¥è¯¢é’£é‡‘工单计划管理
     *
@@ -69,15 +73,18 @@
            apsPlateOrderPlanDate.setUpdateBy(SecurityUtils.getUsername());
            apsPlateOrderPlanManagerMapper.updatePlanDateByCustom(apsPlateOrderPlanDate);
        } else {
            List<ApsPlateOrderPlanRequireDate> planRequireDates = apsPlateOrderPlanManagerMapper.selectPlanRequireIds(apsPlateOrderPlanDate.getPlanIds());
            List<Long> planIds = apsPlateOrderPlanDate.getPlanIds();
            orderEndDayService.saveBatch(planIds);
            /*List<ApsPlateOrderPlanRequireDate> planRequireDates = apsPlateOrderPlanManagerMapper.selectPlanRequireIds(planIds);
            planRequireDates.forEach(planRequireDate -> {
                planRequireDate.setUpdateBy(SecurityUtils.getUsername());
                apsPlateOrderPlanManagerMapper.updatePlanDateByBatch(planRequireDate);
            });
            });*/
        }
        String batchNum= requireBatchService.getNewBatchNumber();
/*        String batchNum= requireBatchService.getNewBatchNumber();
        planTaskService.savePlanTask(batchNum);
        apsPlateStandardRequireService.generatorPlan(batchNum);
        planTaskService.updateTaskStatus(batchNum, PLAN_TASK_STATUS.FINISHED);
        planTaskService.updateTaskStatus(batchNum, PLAN_TASK_STATUS.FINISHED);*/
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireOrderEndDayServiceImpl.java
@@ -1,10 +1,15 @@
package com.aps.core.service.impl.ApsPlate;
import com.aps.common.security.utils.SecurityUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireOrderEndDay;
import com.aps.core.service.ApsPlateStandardRequireOrderEndDayService;
import com.aps.core.mapper.ApsPlateStandardRequireOrderEndDayMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author zhl
@@ -15,6 +20,17 @@
public class ApsPlateStandardRequireOrderEndDayServiceImpl extends ServiceImpl<ApsPlateStandardRequireOrderEndDayMapper, ApsPlateStandardRequireOrderEndDay>
    implements ApsPlateStandardRequireOrderEndDayService{
    @Resource
    ApsPlateStandardRequireOrderEndDayMapper mapper;
    @Transactional
    @Override
    public int saveBatch(List<Long> planIds)
    {
        mapper.batchRemove(planIds);
       return mapper.batchInsert(planIds, SecurityUtils.getUsername());
    }
}
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml
@@ -143,10 +143,13 @@
               (rt.standard_time * pl.production_quantity)                                        as process_total_time,
               rt.process_plan_start_day,
               rt.process_plan_end_day,
               pl.plan_end_day                                                                    as order_plan_end_day
               pl.plan_end_day,
                COALESCE(rd.plan_end_day,pl.plan_end_day)                                         as order_plan_end_day
        from aps_plate_plan as pl
                 left join aps_process_route as rt on pl.document_number = rt.work_order_no
        where pl.document_number is not null and rt.work_order_no is not null and pl.plan_end_day is not null
                 left join aps_plate_standard_require_order_end_day as rd on pl.document_number = rd.doc_no  and rd.del_flag =0
        where pl.document_number is not null and rt.work_order_no is not null and
              (pl.plan_end_day is not null or rd.plan_end_day is not null )
        order by rt.work_order_no asc, rt.process_number desc
    </select>
    <update id="removeOtherStat" parameterType="String">
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireOrderEndDayMapper.xml
@@ -6,11 +6,9 @@
    <resultMap id="BaseResultMap" type="com.aps.core.domain.ApsPlate.ApsPlateStandardRequireOrderEndDay">
            <id property="id" column="id" />
            <result property="bomOrderId" column="bom_order_id" />
            <result property="requireId" column="require_id" />
            <result property="requireTrackId" column="require_track_id" />
            <result property="bomLineCode" column="bom_line_code" />
            <result property="docNo" column="doc_no" />
            <result property="planStartDay" column="plan_end_day" />
            <result property="planEndDay" column="plan_end_day" />
            <result property="orgCode" column="org_code" />
            <result property="batchNumber" column="batch_number" />
@@ -26,4 +24,45 @@
        plan_end_day,org_code,batch_number,del_flag,create_by,
        create_time,update_by,update_time
    </sql>
    <sql id="select_plan_time">
        with a as (
            select snow_next_id() as id,
                   plan.id as plan_id,
                   detail.doc_no,
                   min(require.start_date)    as start_date,
                   min(require.complete_date) as end_date,
                   detail.org_code,
                   detail.batch_number
            from aps_plate_standard_require_bom_order_detail detail
                     left join aps_plate_standard_require require on detail.require_id = require.id and require.del_flag = '0'
                     left join aps_plate_plan plan on detail.doc_no = plan.document_number and plan.del_flag = '0'
            where detail.del_flag = '0' and require.del_flag = '0' and detail.del_flag='0'
                and plan.id in
                <foreach collection="planIds" item="planId" open="(" separator="," close=")">
                    #{planId}
                </foreach>
            group by plan.id ,detail.doc_no,detail.org_code,detail.batch_number
        )
    </sql>
    <insert id="batchInsert" parameterType="Long">
        <include refid="select_plan_time" />
        insert into aps_plate_standard_require_order_end_day
        (id,plan_id, doc_no, plan_start_day, plan_end_day, org_code, batch_number
        , del_flag, create_time, create_by
        )
        select a.id, a.plan_id, a.doc_no, a.start_date, a.end_date, a.org_code,  a.batch_number,
        0, now(), #{createBy}
        from a
    </insert>
    <update id="batchRemove" parameterType="Long">
        update aps_plate_standard_require_order_end_day
        set del_flag=1
        where plan_id in
        <foreach collection="planIds" item="planId" open="(" separator="," close=")">
            #{planId}
        </foreach>
    </update>
</mapper>