diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/dailyplan/vo/DailyPlanPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/dailyplan/vo/DailyPlanPageReqVO.java new file mode 100644 index 00000000..255115b0 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/dailyplan/vo/DailyPlanPageReqVO.java @@ -0,0 +1,38 @@ +package cn.code.nl.module.lms.controller.admin.dailyplan.vo; + +import cn.code.nl.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +import static cn.code.nl.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; + +/** + * 管理后台 - LMS 日计划分页 Request VO。 + */ +@Schema(description = "管理后台 - LMS 日计划分页 Request VO") +@Data +public class DailyPlanPageReqVO extends PageParam { + + @Schema(description = "日计划编码或订单号") + private String planOrOrderCode; + + @Schema(description = "计划日期开始") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate planDateStart; + + @Schema(description = "计划日期结束") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + private LocalDate planDateEnd; + + @Schema(description = "物料编码、名称或规格关键词") + private String materialKeyword; + + @Schema(description = "来源类型") + private Integer sourceType; + + @Schema(description = "订单状态") + private Integer orderStatus; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/dailyplan/vo/DailyPlanWorkPageReqVO.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/dailyplan/vo/DailyPlanWorkPageReqVO.java new file mode 100644 index 00000000..74aa3c0e --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/controller/admin/dailyplan/vo/DailyPlanWorkPageReqVO.java @@ -0,0 +1,22 @@ +package cn.code.nl.module.lms.controller.admin.dailyplan.vo; + +import cn.code.nl.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 管理后台 - LMS 日计划作业分页 Request VO。 + */ +@Schema(description = "管理后台 - LMS 日计划作业分页 Request VO") +@Data +public class DailyPlanWorkPageReqVO extends PageParam { + + @Schema(description = "订单状态,由服务层或控制层限定为 1(进行中)或 3(已取消)") + private Integer orderStatus; + + @Schema(description = "日计划编码或订单号") + private String planOrOrderCode; + + @Schema(description = "物料编码、名称或规格关键词") + private String materialKeyword; +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanMapper.java new file mode 100644 index 00000000..60bf2019 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanMapper.java @@ -0,0 +1,117 @@ +package cn.code.nl.module.lms.dal.mysql.dailyplan; + +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.framework.mybatis.core.util.MyBatisUtils; +import cn.code.nl.module.lms.controller.admin.dailyplan.vo.DailyPlanPageReqVO; +import cn.code.nl.module.lms.controller.admin.dailyplan.vo.DailyPlanWorkPageReqVO; +import cn.code.nl.module.lms.dal.dataobject.dailyplan.DailyPlanDO; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * LMS 日计划 Mapper。 + */ +@Mapper +public interface DailyPlanMapper extends BaseMapperX { + + /** + * 分页查询日计划管理列表。 + */ + default PageResult selectManagementPage(DailyPlanPageReqVO reqVO) { + Page page = selectManagementPage(MyBatisUtils.buildPage(reqVO), reqVO); + return new PageResult<>(page.getRecords(), page.getTotal()); + } + + /** + * 执行日计划管理分页 SQL。 + */ + Page selectManagementPage(Page page, + @Param("reqVO") DailyPlanPageReqVO reqVO); + + /** + * 分页查询日计划作业列表。 + */ + default PageResult selectWorkPage(DailyPlanWorkPageReqVO reqVO) { + Page page = selectWorkPage(MyBatisUtils.buildPage(reqVO), reqVO); + return new PageResult<>(page.getRecords(), page.getTotal()); + } + + /** + * 执行日计划作业分页 SQL。 + */ + Page selectWorkPage(Page page, + @Param("reqVO") DailyPlanWorkPageReqVO reqVO); + + /** + * 根据标识查询日计划。 + */ + DailyPlanDO selectDailyPlanById(@Param("dailyPlanId") Long dailyPlanId); + + /** + * 根据 ERP 订单号查询日计划。 + */ + DailyPlanDO selectByErpOrderCode(@Param("erpOrderCode") String erpOrderCode); + + /** + * 查询待备货日计划。 + */ + List selectStockingCandidates(); + + /** + * 查询待套管日计划。 + */ + List selectSleevingCandidates(); + + /** + * 新增日计划。 + */ + int insertDailyPlan(@Param("plan") DailyPlanDO plan); + + /** + * 更新未开始日计划的可编辑字段。 + */ + int updateNotStartedPlan(@Param("plan") DailyPlanDO plan); + + /** + * 乐观锁更新日计划状态。 + * + *

调用方只能传入新建的更新对象,不得直接传入数据库查询得到的完整 DO,避免覆盖未变更状态。

+ */ + int updateStateWithVersion(@Param("plan") DailyPlanDO plan); + + /** + * 乐观锁更新排序序号。 + */ + int updateSortWithVersion(@Param("dailyPlanId") Long dailyPlanId, + @Param("sortSeq") Integer sortSeq, + @Param("version") Integer version, + @Param("updater") String updater); + + /** + * 乐观锁更新调度权重。 + */ + int updateWeightWithVersion(@Param("dailyPlanId") Long dailyPlanId, + @Param("weight") Integer weight, + @Param("version") Integer version, + @Param("updater") String updater); + + /** + * 原子增加已备货数量,并在达到总量时完成备货。 + */ + int increaseStockedQuantity(@Param("dailyPlanId") Long dailyPlanId, + @Param("incrementQty") Integer incrementQty, + @Param("version") Integer version, + @Param("updater") String updater); + + /** + * 原子增加已套管数量,并在达到总量时完成套管。 + */ + int increaseSleevedQuantity(@Param("dailyPlanId") Long dailyPlanId, + @Param("incrementQty") Integer incrementQty, + @Param("version") Integer version, + @Param("updater") String updater); +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanOperationLogMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanOperationLogMapper.java new file mode 100644 index 00000000..1116332e --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanOperationLogMapper.java @@ -0,0 +1,25 @@ +package cn.code.nl.module.lms.dal.mysql.dailyplan; + +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.module.lms.dal.dataobject.dailyplan.DailyPlanOperationLogDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * LMS 日计划操作日志 Mapper。 + */ +@Mapper +public interface DailyPlanOperationLogMapper extends BaseMapperX { + + /** + * 新增操作日志;自定义新增不会生成主键,调用方必须预先设置 operationLogId。 + */ + int insertOperationLog(@Param("operationLog") DailyPlanOperationLogDO operationLog); + + /** + * 查询日计划的操作日志。 + */ + List selectListByDailyPlanId(@Param("dailyPlanId") Long dailyPlanId); +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanStrategyMapper.java b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanStrategyMapper.java new file mode 100644 index 00000000..dba85c16 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/dal/mysql/dailyplan/DailyPlanStrategyMapper.java @@ -0,0 +1,34 @@ +package cn.code.nl.module.lms.dal.mysql.dailyplan; + +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.module.lms.dal.dataobject.dailyplan.DailyPlanStrategyDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * LMS 日计划调度策略 Mapper。 + */ +@Mapper +public interface DailyPlanStrategyMapper extends BaseMapperX { + + /** + * 根据策略类型查询策略。 + */ + DailyPlanStrategyDO selectByStrategyType(@Param("strategyType") Integer strategyType); + + /** + * 乐观锁更新策略模式并清空游标。 + */ + int updateModeWithVersion(@Param("strategyId") Long strategyId, + @Param("strategyMode") Integer strategyMode, + @Param("version") Integer version, + @Param("updater") String updater); + + /** + * 乐观锁更新策略游标。 + */ + int updateCursorWithVersion(@Param("strategyId") Long strategyId, + @Param("cursorDailyPlanId") Long cursorDailyPlanId, + @Param("version") Integer version, + @Param("updater") String updater); +} diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanMapper.xml new file mode 100644 index 00000000..4c68e3e5 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanMapper.xml @@ -0,0 +1,219 @@ + + + + + + daily_plan_id, plan_code, source_type, erp_order_code, manual_order_code, + plan_date, material_id, material_code, material_name, material_spec, + plan_qty, append_qty, stocked_qty, sleeved_qty, packing_info, sort_seq, weight, + order_status, stocking_status, sleeving_status, + previous_order_status, previous_stocking_status, previous_sleeving_status, + order_start_time, order_end_time, stocking_start_time, stocking_complete_time, + sleeving_start_time, sleeving_complete_time, version, + creator, create_time, updater, update_time, deleted, tenant_id + + + + + AND (plan_code LIKE CONCAT('%', #{reqVO.planOrOrderCode}, '%') + OR erp_order_code LIKE CONCAT('%', #{reqVO.planOrOrderCode}, '%') + OR manual_order_code LIKE CONCAT('%', #{reqVO.planOrOrderCode}, '%')) + + + + + + AND (material_code LIKE CONCAT('%', #{reqVO.materialKeyword}, '%') + OR material_name LIKE CONCAT('%', #{reqVO.materialKeyword}, '%') + OR material_spec LIKE CONCAT('%', #{reqVO.materialKeyword}, '%')) + + + + + + + + + + + + + + + + + INSERT INTO lms_daily_plan + (daily_plan_id, plan_code, source_type, erp_order_code, manual_order_code, + plan_date, material_id, material_code, material_name, material_spec, + plan_qty, append_qty, stocked_qty, sleeved_qty, packing_info, sort_seq, weight, + order_status, stocking_status, sleeving_status, + previous_order_status, previous_stocking_status, previous_sleeving_status, + order_start_time, order_end_time, stocking_start_time, stocking_complete_time, + sleeving_start_time, sleeving_complete_time, version, + creator, create_time, updater, update_time, deleted, tenant_id) + VALUES + (#{plan.dailyPlanId}, #{plan.planCode}, #{plan.sourceType}, #{plan.erpOrderCode}, #{plan.manualOrderCode}, + #{plan.planDate}, #{plan.materialId}, #{plan.materialCode}, #{plan.materialName}, #{plan.materialSpec}, + #{plan.planQty}, #{plan.appendQty}, #{plan.stockedQty}, #{plan.sleevedQty}, #{plan.packingInfo}, + #{plan.sortSeq}, #{plan.weight}, #{plan.orderStatus}, #{plan.stockingStatus}, #{plan.sleevingStatus}, + #{plan.previousOrderStatus}, #{plan.previousStockingStatus}, #{plan.previousSleevingStatus}, + #{plan.orderStartTime}, #{plan.orderEndTime}, #{plan.stockingStartTime}, #{plan.stockingCompleteTime}, + #{plan.sleevingStartTime}, #{plan.sleevingCompleteTime}, #{plan.version}, + #{plan.creator}, #{plan.createTime}, #{plan.updater}, #{plan.updateTime}, #{plan.deleted}, #{plan.tenantId}) + + + + UPDATE lms_daily_plan + SET erp_order_code = #{plan.erpOrderCode}, + manual_order_code = #{plan.manualOrderCode}, + plan_date = #{plan.planDate}, + material_id = #{plan.materialId}, + material_code = #{plan.materialCode}, + material_name = #{plan.materialName}, + material_spec = #{plan.materialSpec}, + plan_qty = #{plan.planQty}, + packing_info = #{plan.packingInfo}, + sort_seq = #{plan.sortSeq}, + weight = #{plan.weight}, + updater = #{plan.updater}, + version = version + 1 + WHERE daily_plan_id = #{plan.dailyPlanId} + AND version = #{plan.version} + AND deleted = b'0' + AND order_status = 0 + + + + UPDATE lms_daily_plan + + order_status = #{plan.orderStatus}, + stocking_status = #{plan.stockingStatus}, + sleeving_status = #{plan.sleevingStatus}, + previous_order_status = #{plan.previousOrderStatus}, + previous_stocking_status = #{plan.previousStockingStatus}, + previous_sleeving_status = #{plan.previousSleevingStatus}, + order_start_time = #{plan.orderStartTime}, + order_end_time = #{plan.orderEndTime}, + stocking_start_time = #{plan.stockingStartTime}, + stocking_complete_time = #{plan.stockingCompleteTime}, + sleeving_start_time = #{plan.sleevingStartTime}, + sleeving_complete_time = #{plan.sleevingCompleteTime}, + append_qty = #{plan.appendQty}, + updater = #{plan.updater}, + version = version + 1 + + WHERE daily_plan_id = #{plan.dailyPlanId} + AND version = #{plan.version} + AND deleted = b'0' + + + + UPDATE lms_daily_plan + SET sort_seq = #{sortSeq}, updater = #{updater}, version = version + 1 + WHERE daily_plan_id = #{dailyPlanId} AND version = #{version} AND deleted = b'0' + + + + UPDATE lms_daily_plan + SET weight = #{weight}, updater = #{updater}, version = version + 1 + WHERE daily_plan_id = #{dailyPlanId} AND version = #{version} AND deleted = b'0' + + + + UPDATE lms_daily_plan + SET stocking_status = CASE + WHEN stocked_qty + #{incrementQty} = plan_qty + append_qty THEN 2 + ELSE stocking_status END, + stocking_complete_time = CASE + WHEN stocked_qty + #{incrementQty} = plan_qty + append_qty THEN NOW() + ELSE stocking_complete_time END, + stocked_qty = stocked_qty + #{incrementQty}, + updater = #{updater}, + version = version + 1 + WHERE daily_plan_id = #{dailyPlanId} + AND version = #{version} + AND deleted = b'0' + AND order_status = 1 + AND stocking_status = 1 + AND stocked_qty + #{incrementQty} <= plan_qty + append_qty + + + + UPDATE lms_daily_plan + SET sleeving_status = CASE + WHEN sleeved_qty + #{incrementQty} = plan_qty + append_qty THEN 2 + ELSE sleeving_status END, + sleeving_complete_time = CASE + WHEN sleeved_qty + #{incrementQty} = plan_qty + append_qty THEN NOW() + ELSE sleeving_complete_time END, + sleeved_qty = sleeved_qty + #{incrementQty}, + updater = #{updater}, + version = version + 1 + WHERE daily_plan_id = #{dailyPlanId} + AND version = #{version} + AND deleted = b'0' + AND order_status = 1 + AND sleeving_status = 1 + AND sleeved_qty + #{incrementQty} <= plan_qty + append_qty + + + diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanOperationLogMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanOperationLogMapper.xml new file mode 100644 index 00000000..631c6cc8 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanOperationLogMapper.xml @@ -0,0 +1,34 @@ + + + + + + operation_log_id, daily_plan_id, operation_target, operation_type, + before_value, after_value, change_qty, operation_reason, + operator, operation_time, deleted, tenant_id + + + + INSERT INTO lms_daily_plan_operation_log + (operation_log_id, daily_plan_id, operation_target, operation_type, + before_value, after_value, change_qty, operation_reason, + operator, operation_time, deleted, tenant_id) + VALUES + (#{operationLog.operationLogId}, #{operationLog.dailyPlanId}, + #{operationLog.operationTarget}, #{operationLog.operationType}, + #{operationLog.beforeValue}, #{operationLog.afterValue}, + #{operationLog.changeQty}, #{operationLog.operationReason}, + #{operationLog.operator}, #{operationLog.operationTime}, + #{operationLog.deleted}, #{operationLog.tenantId}) + + + + + diff --git a/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanStrategyMapper.xml b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanStrategyMapper.xml new file mode 100644 index 00000000..ede33a17 --- /dev/null +++ b/nl-module-lms/nl-module-lms-server/src/main/resources/mapper/dailyplan/DailyPlanStrategyMapper.xml @@ -0,0 +1,39 @@ + + + + + + strategy_id, strategy_type, strategy_mode, cursor_daily_plan_id, version, + creator, create_time, updater, update_time, deleted, tenant_id + + + + + + UPDATE lms_daily_plan_strategy + SET strategy_mode = #{strategyMode}, + cursor_daily_plan_id = NULL, + updater = #{updater}, + version = version + 1 + WHERE strategy_id = #{strategyId} + AND version = #{version} + AND deleted = b'0' + + + + UPDATE lms_daily_plan_strategy + SET cursor_daily_plan_id = #{cursorDailyPlanId}, + updater = #{updater}, + version = version + 1 + WHERE strategy_id = #{strategyId} + AND version = #{version} + AND deleted = b'0' + + +