diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/DataVerifyProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/DataVerifyProcessor.java new file mode 100644 index 000000000..6d2de4353 --- /dev/null +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/dashboard/DataVerifyProcessor.java @@ -0,0 +1,33 @@ +package org.springblade.job.processor.dashboard; + +import jakarta.annotation.Resource; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springblade.desk.order.feign.IOrderClient; +import org.springframework.stereotype.Component; +import tech.powerjob.worker.core.processor.ProcessResult; +import tech.powerjob.worker.core.processor.TaskContext; +import tech.powerjob.worker.core.processor.sdk.BasicProcessor; + +import java.util.concurrent.CompletableFuture; + +/** + * 工艺模块-返工任务 + * @author liweidong + */ +@Component +@Data +@Slf4j +public class DataVerifyProcessor implements BasicProcessor { + + @Resource + private IOrderClient client; + + @Override + public ProcessResult process(TaskContext context) throws Exception { + log.info("订单合规性校验任务开始"); + CompletableFuture runFuture = CompletableFuture.runAsync(()->client.dataVerify()); + log.info("订单合规性校验任务结束"); + return new ProcessResult(true); + } +} diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/wms/ExecuteStGoodsExtUpdateProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/wms/ExecuteStGoodsExtUpdateProcessor.java new file mode 100644 index 000000000..ab05f1570 --- /dev/null +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/wms/ExecuteStGoodsExtUpdateProcessor.java @@ -0,0 +1,39 @@ +package org.springblade.job.processor.wms; + +import jakarta.annotation.Resource; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springblade.wms.feign.WmsTaskClient; +import org.springframework.stereotype.Component; +import tech.powerjob.worker.core.processor.ProcessResult; +import tech.powerjob.worker.core.processor.TaskContext; +import tech.powerjob.worker.core.processor.sdk.BasicProcessor; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName ExecuteStGoodsExtUpdateProcessor + * @description: + * @autor: WuSiYu + * @create 2026-04-30 10:08 + **/ +@Component +@Data +@Slf4j +public class ExecuteStGoodsExtUpdateProcessor implements BasicProcessor { + + @Resource + WmsTaskClient wmsTaskClient; + @Override + public ProcessResult process(TaskContext context) throws Exception { + log.info("开始执行物料状态同步erp"); + try { + boolean result = wmsTaskClient.executeGoodsStatusUpdate(); + log.info("===== 物料状态定时更新完成 ====="); + return new ProcessResult(result); + } catch (Exception e) { + log.error("===== 物料状态定时更新异常 =====", e); + return new ProcessResult(false, e.getMessage()); + } + } +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/excel/PlatingAssortmentExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/excel/PlatingAssortmentExcel.java new file mode 100644 index 000000000..e5e297e5c --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/excel/PlatingAssortmentExcel.java @@ -0,0 +1,83 @@ +package org.springblade.desk.basic.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * [镀种分类] Excel实体类 + * + * @author BladeX + * @since 2026-04-29 + */ +@Data +@ColumnWidth(25) +@HeadRowHeight(20) +@ContentRowHeight(18) +public class PlatingAssortmentExcel implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 编码 + */ + @ColumnWidth(20) + @ExcelProperty("编码") + private String code; + + /** + * 名称 + */ + @ColumnWidth(30) + @ExcelProperty("名称") + private String name; + + /** + * 备注 + */ + @ColumnWidth(40) + @ExcelProperty("备注") + private String memo; + + /** + * 排序 + */ + @ColumnWidth(10) + @ExcelProperty("排序") + private Long sort; + + /** + * 班组成员 + */ + @ColumnWidth(30) + @ExcelProperty("班组成员") + private String teamMember; + + /** + * 状态 + */ + @ColumnWidth(10) + @ExcelProperty("状态") + private String statusName; + + /** + * 创建时间 + */ + @ColumnWidth(20) + @ExcelProperty("创建时间") + private Date createTime; + + /** + * 创建人 + */ + @ColumnWidth(15) + @ExcelProperty("创建人") + private String createUserRealName; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IWorkCenterClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IWorkCenterClient.java index eb28a8590..d2aca697a 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IWorkCenterClient.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/feign/IWorkCenterClient.java @@ -29,6 +29,7 @@ package org.springblade.desk.basic.feign; import org.springblade.core.launch.constant.AppConstant; import org.springblade.core.tool.api.R; import org.springblade.desk.basic.pojo.entity.BasicClazz; +import org.springblade.desk.basic.pojo.entity.PlatingAssortment; import org.springblade.desk.basic.pojo.entity.TeamSet; import org.springblade.desk.basic.pojo.entity.WorkCenter; import org.springframework.cloud.openfeign.FeignClient; @@ -49,6 +50,7 @@ public interface IWorkCenterClient { String GET_BY_ID = API_PREFIX + "/getById"; String GET_TeamSet_BY_ID = API_PREFIX + "/getTeamSetById"; String GET_Clazz_BY_ID = API_PREFIX + "/getClazzById"; + String PLATING_ASSORTMENT_BY_ID = API_PREFIX + "platingAssortmentByid"; /** * 根据id获取作业中心 * @@ -63,4 +65,7 @@ public interface IWorkCenterClient { @GetMapping(GET_Clazz_BY_ID) R getClazzById(@RequestParam("id") Long id); + + @GetMapping(PLATING_ASSORTMENT_BY_ID) + R platingAssortmentByid(@RequestParam("id") Long id); } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/PlatingAssortment.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/PlatingAssortment.java new file mode 100644 index 000000000..911e67715 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/PlatingAssortment.java @@ -0,0 +1,97 @@ +package org.springblade.desk.basic.pojo.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +import java.io.Serial; +import java.util.List; + +/** + * [镀种分类] 实体类 + * 对应表: BS_PLATING_ASSORTMENT + * 业务类别固定为 5 (TYPE_PLATING_ASSORT) + * 复制于 BS_BASIC_CLAZZ + * @author BladeX + * @since 2026-04-29 + */ +@Data +@TableName("BS_PLATING_ASSORTMENT") +@Schema(description = "PlatingAssortment Entity对象") +@EqualsAndHashCode(callSuper = true) +public class PlatingAssortment extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 编码 + */ + public static final String COL_CODE = "CODE"; + /** + * 名称 + */ + public static final String COL_NAME = "NAME"; + /** + * 备注 + */ + public static final String COL_MEMO = "MEMO"; + /** + * 排序 + */ + public static final String COL_SORT = "SORT"; + /** + * 班组成员 + */ + public static final String COL_TEAM_MEMBER = "TEAM_MEMBER"; + /** + * 班组成员ID + */ + public static final String COL_TEAM_MEMBER_ID = "TEAM_MEMBER_ID"; + + /** + * 编码 + */ + @Schema(description = "编码") + private String code; + + /** + * 名称 + */ + @Schema(description = "名称") + private String name; + + /** + * 备注 + */ + @Schema(description = "备注") + private String memo; + + /** + * 排序 + */ + @Schema(description = "排序") + private Long sort; + + /** + * 班组成员名称 + */ + @Schema(description = "班组成员名称") + private String teamMember; + + /** + * 班组成员ID + */ + @Schema(description = "班组成员ID") + private String teamMemberId; + + /** + * 用户ID列表(非数据库字段) + */ + @TableField(exist = false) + @Schema(description = "用户ID列表") + private List userIds; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlatingAssortmentVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlatingAssortmentVO.java new file mode 100644 index 000000000..e42d2d10d --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/PlatingAssortmentVO.java @@ -0,0 +1,36 @@ +package org.springblade.desk.basic.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.basic.pojo.entity.PlatingAssortment; + +/** + * [镀种分类] VO类 + * + * @author BladeX + * @since 2026-04-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "PlatingAssortmentVO对象") +public class PlatingAssortmentVO extends PlatingAssortment { + + /** + * 创建用户真实姓名 + */ + @Schema(description = "创建用户真实姓名") + private String createUserRealName; + + /** + * 创建部门名称 + */ + @Schema(description = "创建部门名称") + private String createDeptName; + + /** + * 更新用户真实姓名 + */ + @Schema(description = "更新用户真实姓名") + private String updateUserRealName; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java index 440d8c5e7..efc24be84 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IOrderClient.java @@ -20,6 +20,7 @@ public interface IOrderClient { String SAVE_GLASS_CAKE = API_PREFIX + "/saveGlassCake"; String CALCULATE_COATING_MATERIAL = API_PREFIX + "/calculateCoatingMaterial"; String INIT_YIELD_ORDER_DAILY_ASSIGN = API_PREFIX + "/initYieldOrderDailyAssign"; + String DATA_VERIFY = API_PREFIX + "/dataVerify"; /** @@ -42,4 +43,13 @@ public interface IOrderClient { @GetMapping(INIT_YIELD_ORDER_DAILY_ASSIGN) void initYieldOrderDailyAssign() throws Exception; + + /** + * 合规性校验 + * + * @return + */ + @GetMapping(DATA_VERIFY) + void dataVerify(); + } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/AssayContent.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/AssayContent.java index 374d79be8..14f719d61 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/AssayContent.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/AssayContent.java @@ -37,10 +37,10 @@ public class AssayContent extends BaseEntity { * 化验时间 */ @DateTimeFormat( - pattern = "yyyy-MM-dd" + pattern = "yyyy-MM-dd HH:mm:ss" ) @JsonFormat( - pattern = "yyyy-MM-dd" + pattern = "yyyy-MM-dd HH:mm:ss" ) @TableField(value = "ASSAY_TIME") private Date assayTime; diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldApply.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldApply.java index 5d8b2d730..809214d3a 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldApply.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/pojo/entity/MoldApply.java @@ -104,4 +104,6 @@ public class MoldApply extends BaseEntity { */ @TableField(value = "MEMO") private String memo; + + private Long parentId; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RaiseHand.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RaiseHand.java index 3aa6f174b..6bba23283 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RaiseHand.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/RaiseHand.java @@ -85,5 +85,6 @@ public class RaiseHand extends BaseEntity { @Schema(description = "文件路径") private String fileUrl; - + @Schema(description = "文件名称") + private String fileName; } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java index 5ed2b1638..0cfa3bd54 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClient.java @@ -1,19 +1,18 @@ package org.springblade.erpdata.feign; -import com.alibaba.excel.annotation.format.DateTimeFormat; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.tool.api.R; import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; import org.springblade.erpdata.pojo.vo.*; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.Date; import java.util.List; -import java.util.Locale; import java.util.Map; /** @@ -26,7 +25,7 @@ import java.util.Map; ) public interface IErpDataProduceClient { - String API_PREFIX = "/feign/erpdata/produce"; + String API_PREFIX = "/feign/client/erpdata/produce"; String QUERY_BATCH = API_PREFIX + "/queryBatch"; String REWORK_ORDER = API_PREFIX + "/loadReworkOrder"; String REWORK_ORDER_SIZE = API_PREFIX + "/loadReworkOrderSize"; @@ -47,6 +46,7 @@ public interface IErpDataProduceClient { String CHECK_COMPLETE = API_PREFIX + "/checkComplete"; String PRO_RBINVIOGEN = API_PREFIX + "/proRbinviogen"; String PRO_RBTRANSFERLEV = API_PREFIX + "/proRbtransferlev"; + String CREATE_MOLD_PLAN = API_PREFIX + "/createMoldPlan"; /** @@ -215,4 +215,15 @@ public interface IErpDataProduceClient { @RequestParam(value = "recDept", required = false) String recDept, @RequestParam(value = "roamNo", required = false) String roamNo, @RequestParam(value = "deliverKey", required = false) String deliverKey, @RequestParam(value = "testQty") Integer testQty, @RequestParam(value = "lossQty") Integer lossQty, @RequestParam(value = "scrapQty") Integer scrapQty); + + @GetMapping(CREATE_MOLD_PLAN) + R createMoldPlan(@RequestParam(value = "partCode", required = false)String partCode, + @RequestParam(value = "moCode", required = false)String moCode, + @RequestParam(value = "plantype", required = false)String plantype, + @RequestParam(value = "quantity", required = false)Integer quantity, + @RequestParam(value = "needDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date needDate, + @RequestParam(value = "level", required = false)String level, + @RequestParam(value = "keeper", required = false)String keeper, + @RequestParam(value = "createMan", required = false)String createMan, + @RequestParam(value = "memo", required = false)String memo); } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java index da685eba8..825824b60 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataProduceClientFallback.java @@ -2,7 +2,6 @@ package org.springblade.erpdata.feign; import org.springblade.core.tool.api.R; import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; -import org.springblade.desk.produce.pojo.entity.OrderDeclare; import org.springblade.erpdata.pojo.vo.*; import org.springframework.stereotype.Component; @@ -119,4 +118,9 @@ public class IErpDataProduceClientFallback implements IErpDataProduceClient { return R.fail("获取数据失败"); } + @Override + public R createMoldPlan(String partCode, String moCode, String plantype, Integer quantity, Date needDate, String level, String keeper, String createMan, String memo) { + return R.fail("获取数据失败"); + } + } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClient.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClient.java index 8ed4f502e..9f26efaf4 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClient.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClient.java @@ -3,6 +3,7 @@ package org.springblade.erpdata.feign; import org.springblade.common.constant.LauncherConstant; import org.springblade.common.exception.BusinessException; import org.springblade.core.tool.api.R; +import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.wms.pojo.entity.StRealtimeStock; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -34,6 +35,8 @@ public interface IErpDataWmsClient { String DELETE_MOLD_PLAN = API_PREFIX + "/deleteMoldPlan"; + String GET_GOODS_EXT_STATUS = API_PREFIX + "/getGoodsExtStatus"; + /** * 到期送检发送erp */ @@ -50,7 +53,7 @@ public interface IErpDataWmsClient { * 工装计划申报发送erp */ @PostMapping(CREATE_MOLD_PLAN) - R createMoldPlan(@RequestParam("partCode")String partCode, @RequestParam("moCode")String moCode, @RequestParam("plantype")String plantype, @RequestParam("quantity")Double quantity, + R createMoldPlan(@RequestParam(value = "partCode", required = false)String partCode, @RequestParam("moCode")String moCode, @RequestParam("plantype")String plantype, @RequestParam("quantity")Double quantity, @RequestParam("needDate")Date needDate, @RequestParam("level")String level, @RequestParam("keeper")String keeper, @RequestParam("createMan")String createMan, @RequestParam("memo")String memo, @RequestParam("urgentType")String urgentType, @RequestParam("erpWoCode")String erpWoCode) throws BusinessException; @@ -60,4 +63,10 @@ public interface IErpDataWmsClient { @PostMapping(DELETE_MOLD_PLAN) R deleteMoldPlan(@RequestParam("erpWoCode")String erpWoCode) throws BusinessException; + /** + * 物料状态监控同步 + */ + @PostMapping(GET_GOODS_EXT_STATUS) + R getGoodsExtStatus(@RequestParam("goodsCode")String goodsCode); + } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClientFallback.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClientFallback.java index 0c1237c50..b9e0f49ce 100644 --- a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClientFallback.java +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/feign/IErpDataWmsClientFallback.java @@ -1,6 +1,7 @@ package org.springblade.erpdata.feign; import org.springblade.core.tool.api.R; +import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.wms.pojo.entity.StRealtimeStock; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestBody; @@ -29,7 +30,7 @@ public class IErpDataWmsClientFallback implements IErpDataWmsClient{ } @Override - public R createMoldPlan(@RequestParam("partCode")String partCode, @RequestParam("moCode")String moCode, @RequestParam("plantype")String plantype, @RequestParam("quantity")Double quantity, + public R createMoldPlan(@RequestParam(value = "partCode", required = false)String partCode, @RequestParam("moCode")String moCode, @RequestParam("plantype")String plantype, @RequestParam("quantity")Double quantity, @RequestParam("needDate") Date needDate, @RequestParam("level")String level, @RequestParam("keeper")String keeper, @RequestParam("createMan")String createMan, @RequestParam("memo")String memo, @RequestParam("urgentType")String urgentType, @RequestParam("erpWoCode")String erpWoCode) { return R.fail("获取数据失败"); @@ -39,4 +40,10 @@ public class IErpDataWmsClientFallback implements IErpDataWmsClient{ public R deleteMoldPlan(@RequestParam("erpWoCode")String erpWoCode) { return R.fail("获取数据失败"); } + + @Override + public R getGoodsExtStatus(@RequestParam("goodsCode")String goodsCode) { + return R.fail("获取数据失败"); + } + } diff --git a/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/StGoodsExtStatusVO.java b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/StGoodsExtStatusVO.java new file mode 100644 index 000000000..a833008c7 --- /dev/null +++ b/blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/vo/StGoodsExtStatusVO.java @@ -0,0 +1,21 @@ +package org.springblade.erpdata.pojo.vo; + +import lombok.Data; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName StGoodsExtStatusVO + * @description: + * @autor: WuSiYu + * @create 2026-04-29 17:04 + **/ + +@Data +public class StGoodsExtStatusVO { + + private String prtno; + private Double invqty1j; + private Double planqty; + +} diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/QualityGradeEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/QualityGradeEntity.java index 47081f5f6..6e15f98d6 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/QualityGradeEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/QualityGradeEntity.java @@ -36,6 +36,7 @@ import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.tenant.mp.TenantEntity; import java.io.Serial; import java.util.List; +import java.util.Map; /** * 质量等级表 实体类 @@ -63,6 +64,11 @@ public class QualityGradeEntity extends BaseEntity { @Schema(description = "类型 1-军品 2-商飞 3-宇航") private String type; + @Schema(description = "是否局部镀 0-否 1-是") + private String isLocal; + @Schema(description = "是否厚金区固定厚度 0-否 1-是") + private String isThickness; + private String typeNames; // @TableField(exist = false) @@ -71,9 +77,19 @@ public class QualityGradeEntity extends BaseEntity { private String types; - @Schema(description = "是否局部镀 0-否 1-是") - private String isLocal; - @Schema(description = "是否厚金区固定厚度 0-否 1-是") - private String isThickness; + public final static Map typeMap = Map.of( + "1", "军品", + "2", "商飞", + "3", "宇航" + ); + + public final static Map isLocalMap = Map.of( + "0", "否", + "1", "是" + ); + public final static Map isThicknessMap = Map.of( + "0", "否", + "1", "是" + ); } diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java new file mode 100644 index 000000000..632ec574b --- /dev/null +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/WmsTaskClient.java @@ -0,0 +1,29 @@ +package org.springblade.wms.feign; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName WmsTaskClient + * @description: + * @autor: WuSiYu + * @create 2026-04-30 10:21 + **/ +@FeignClient( + value = "blade-wms" +) +public interface WmsTaskClient { + + String API_PREFIX = "/feign/client/wms"; + + String EXECUTE_GOODS_STATUS_UPDATE = API_PREFIX + "/executeGoodsStatusUpdate"; + + /** + * 物料状态监控同步erp + */ + @PostMapping(EXECUTE_GOODS_STATUS_UPDATE) + boolean executeGoodsStatusUpdate(); + +} diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StBuyOrder.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StBuyOrder.java index 2db711a84..f5e837889 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StBuyOrder.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StBuyOrder.java @@ -138,7 +138,7 @@ public class StBuyOrder extends TenantEntity { * 检查人 */ @Schema(description = "检查人") - private String checkMan; + private Long checkMan; /** * 检查时间 */ diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StOtherOutRecord.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StOtherOutRecord.java index 90412d78e..48fcdbfb9 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StOtherOutRecord.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StOtherOutRecord.java @@ -115,6 +115,11 @@ public class StOtherOutRecord extends TenantEntity { */ @Schema(description = "领料人ID") private Long picker; + /** + * 借用报废记录ID + */ + @Schema(description = "借用报废记录ID") + private Long rrId; /*0:报废出库,1:料头出库,2.超额出库,3复检出库,4领用出库,5库转移,6退货出库,11不合格退库*/ public static final Short OUT_TYPE_SCRAP = 0; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingAssortmentController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingAssortmentController.java new file mode 100644 index 000000000..2e0eb24fb --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/PlatingAssortmentController.java @@ -0,0 +1,290 @@ +package org.springblade.desk.basic.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.CommonConstant; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.excel.util.ExcelUtil; +import org.springblade.core.log.annotation.ApiLog; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.BladeUser; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.basic.constant.BAModuleConst; +import org.springblade.desk.basic.excel.PlatingAssortmentExcel; +import org.springblade.desk.basic.pojo.entity.PlatingAssortment; +import org.springblade.desk.basic.pojo.vo.PlatingAssortmentVO; +import org.springblade.desk.basic.service.IPlatingAssortmentService; +import org.springblade.desk.basic.util.ExcelExtUtil; +import org.springblade.desk.basic.util.QueryUtils; +import org.springblade.desk.basic.wrapper.PlatingAssortmentWrapper; +import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.User; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * [镀种分类] 控制器 + * 专门管理镀种分类数据 + * + * @author BladeX + * @since 2026-04-29 + */ +@RestController +@RequestMapping(BAModuleConst.CONTROLLER_PREFIX + "/PlatingAssortment") +@Data +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Slf4j +@Tag(name = "[BA][镀种分类]", description = "[镀种分类]接口") +public class PlatingAssortmentController extends BladeController { + + @Resource + private IPlatingAssortmentService service; + + @Resource + private IUserClient userClient; + + /** + * [镀种分类] 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 10) + @Operation(summary = "详情", description = "传入PlatingAssortment Obj") + public R detail(PlatingAssortment platingAssortment) { + QueryWrapper qw = Condition.getQueryWrapper(platingAssortment); + PlatingAssortment detail = service.getOne(qw); + PlatingAssortmentVO detailVO = PlatingAssortmentWrapper.build().entityVO(detail); + service.setVOValue(detailVO); + return R.data(detailVO); + } + + /** + * [镀种分类] list分页 + * + * + */ + @GetMapping("/list") + @ApiOperationSupport(order = 20) + @Operation(summary = "list分页", description = "传入PlatingAssortment Obj") + public R> list(@Parameter(hidden = true) @RequestParam Map platingAssortment, + Query query) { + // 过滤空值 + platingAssortment = platingAssortment.entrySet().stream() + .filter(entry -> Objects.nonNull(entry.getValue())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + QueryWrapper qw = Condition.getQueryWrapper(platingAssortment, PlatingAssortment.class); + // 添加未删除的条件 + qw.eq("IS_DELETED", CommonConstant.DELETE_FALSE); + + IPage pages = service.page(Condition.getPage(query), qw); + IPage pagesVO = PlatingAssortmentWrapper.build().pageVO(pages); + pagesVO.getRecords().stream() + .peek(service::setVOValue) + .collect(Collectors.toList()); + return R.data(pagesVO); + } + + /** + * [镀种分类] page分页(支持高级查询) + */ + @GetMapping("/page") + @ApiOperationSupport(order = 21) + @Operation(summary = "page分页", description = "传入PlatingAssortmentVO Obj") + public R> page(PlatingAssortmentVO platingAssortment, Query query) { + // 处理排序字段转换 + QueryUtils.convertSortField(query); + + IPage pagesVO = service.selectPlatingAssortmentPage( + Condition.getPage(query), platingAssortment + ); + return R.data(pagesVO); + } + + /** + * [镀种分类] 设置人员ID保存 + */ + @PostMapping("/updateUserId") + @ApiOperationSupport(order = 31) + @ApiLog("更新镀种分类班组成员") + @Operation(summary = "设置人员Id保存", description = "传入PlatingAssortment Obj") + @Transactional(rollbackFor = Exception.class) + public R updateTeamMembers(@Valid @RequestBody PlatingAssortment platingAssortment) { + boolean result = service.updateTeamMembers(platingAssortment); + return R.status(result); + } + + /** + * [镀种分类] list下拉选择(只返回启用的镀种分类) + */ + @GetMapping("/listForSelectPlatingAssort") + @ApiOperationSupport(order = 22) + @Operation(summary = "list下拉选择", description = "返回启用的镀种分类列表") + public R> listForSelect() { + LambdaQueryWrapper qw = Wrappers.lambdaQuery(); + qw.eq(PlatingAssortment::getStatus, 1); // 只返回启用的 + qw.eq(PlatingAssortment::getIsDeleted, CommonConstant.DELETE_FALSE); + qw.orderByAsc(PlatingAssortment::getSort, PlatingAssortment::getId); + + List list = service.list(qw); + List listVO = PlatingAssortmentWrapper.build().listVO(list); + return R.data(listVO); + } + + /** + * [镀种分类] 新增一条 + */ + @PostMapping("/save") + @ApiOperationSupport(order = 30) + @ApiLog("新增镀种分类") + @Operation(summary = "新增一条", description = "传入PlatingAssortment Obj") + @Transactional(rollbackFor = Exception.class) + public R save(@Valid @RequestBody PlatingAssortment addOne) { + addOne.setId(null); + return R.status(service.save(addOne)); + } + + /** + * [镀种分类] 新增批量 + */ + @PostMapping("/saveBat") + @ApiOperationSupport(order = 31) + @ApiLog("新增镀种分类") + @Operation(summary = "新增批量", description = "传入PlatingAssortment List") + @Transactional(rollbackFor = Exception.class) + public R saveBat(@Valid @RequestBody List addList) { + addList.forEach(one -> { + one.setId(null); + }); + return R.status(service.saveBatch(addList)); + } + + /** + * [镀种分类] 修改一条 + */ + @PostMapping("/update") + @ApiOperationSupport(order = 40) + @ApiLog("修改镀种分类") + @Operation(summary = "修改一条", description = "传入PlatingAssortment Obj") + @Transactional(rollbackFor = Exception.class) + public R update(@Valid @RequestBody PlatingAssortment updateOne) { + return R.status(service.updateById(updateOne)); + } + + /** + * [镀种分类] 修改批量 + */ + @PostMapping("/updateBat") + @ApiOperationSupport(order = 41) + @ApiLog("修改镀种分类") + @Operation(summary = "修改批量", description = "传入PlatingAssortment List") + @Transactional(rollbackFor = Exception.class) + public R updateBat(@Valid @RequestBody List updateList) { + return R.status(service.updateBatchById(updateList)); + } + + /** + * [镀种分类] 新增或修改一条 + */ + @PostMapping("/submit") + @ApiOperationSupport(order = 50) + @Operation(summary = "新增或修改一条", description = "传入PlatingAssortment Obj") + @Transactional(rollbackFor = Exception.class) + public R submit(@Valid @RequestBody PlatingAssortment mergeOne) { + return R.status(service.saveOrUpdate(mergeOne)); + } + + /** + * [镀种分类] 新增或修改批量 + */ + @PostMapping("/submitBat") + @ApiOperationSupport(order = 51) + @Operation(summary = "新增或修改批量", description = "传入PlatingAssortment List") + @Transactional(rollbackFor = Exception.class) + public R submitBat(@Valid @RequestBody List mergeList) { + return R.status(service.saveOrUpdateBatch(mergeList)); + } + + /** + * [镀种分类] 逻辑删除 + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 61) + @ApiLog("删除镀种分类") + @Operation(summary = "逻辑删除", description = "传入ids") + @Transactional(rollbackFor = Exception.class) + public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { + return R.status(service.deleteLogic(Func.toLongList(ids))); + } + + /** + * [镀种分类] 导出Excel + */ + @GetMapping("/exportExcel") + @ApiOperationSupport(order = 70) + @Operation(summary = "导出Excel", description = "传入PlatingAssortment") + public void exportExcel(@Parameter(hidden = true) @RequestParam Map platingAssortment, + BladeUser bladeUser, HttpServletResponse response) { + QueryWrapper qw = Condition.getQueryWrapper(platingAssortment, PlatingAssortment.class); + // 添加未删除的条件 + qw.eq("IS_DELETED", CommonConstant.DELETE_FALSE); + + List list = service.exportPlatingAssortment(qw); + ExcelUtil.export(response, "[镀种分类]数据" + DateUtil.time(), + "[镀种分类]数据表", list, PlatingAssortmentExcel.class); + } + + /** + * [镀种分类] 下载Excel模板 + */ + @GetMapping("/downloadExcelTemplate") + @ApiOperationSupport(order = 71) + @Operation(summary = "下载Excel模板", description = "") + public ResponseEntity downloadExcelTemplate() { + return ExcelExtUtil.downloadXlsTemplate( + "Excel/BA/ImportTemplate-PlatingAssortment.xls", + "导入模版-镀种分类.xls"); + } + + /** + * [镀种分类] 导入Excel + */ + @PostMapping("/importExcel") + @ApiOperationSupport(order = 72) + @ApiLog("导入镀种分类") + @Operation(summary = "导入Excel", description = "MultipartFile") + @Transactional(rollbackFor = Exception.class) + public R importExcel(@RequestParam("file") MultipartFile file) { + R checkR = ExcelExtUtil.importExcelCheck(file); + if (checkR != null) { + return checkR; + } + List importList = ExcelUtil.read( + file, 0, 1, PlatingAssortment.class + ); + return R.status(service.saveBatch(importList)); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/WorkCenterClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/WorkCenterClient.java index a8e2e1ade..fb7fbdf26 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/WorkCenterClient.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/feign/WorkCenterClient.java @@ -7,14 +7,9 @@ import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; -import org.springblade.desk.basic.pojo.entity.BasicClazz; -import org.springblade.desk.basic.pojo.entity.RelTeamSetUser; -import org.springblade.desk.basic.pojo.entity.TeamSet; -import org.springblade.desk.basic.pojo.entity.WorkCenter; -import org.springblade.desk.basic.service.IBasicClazzService; -import org.springblade.desk.basic.service.IRelTeamSetUserService; -import org.springblade.desk.basic.service.ITeamSetService; -import org.springblade.desk.basic.service.IWorkCenterService; +import org.springblade.desk.basic.cache.WorkCenterCache; +import org.springblade.desk.basic.pojo.entity.*; +import org.springblade.desk.basic.service.*; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -38,6 +33,8 @@ public class WorkCenterClient implements IWorkCenterClient { private IBasicClazzService clazzService; @Resource private IRelTeamSetUserService relTeamSetUserService; + @Resource + private IPlatingAssortmentService platingAssortmentService; @Override public R getById(Long workCenterId) { WorkCenter workCenter = workCenterService.getById(workCenterId); @@ -66,4 +63,9 @@ public class WorkCenterClient implements IWorkCenterClient { public R getClazzById(Long id) { return R.data(clazzService.getById(id)); } + + @Override + public R platingAssortmentByid(Long id) { + return R.data(platingAssortmentService.getById(id)); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlatingAssortmentMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlatingAssortmentMapper.java new file mode 100644 index 000000000..02e4bf857 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlatingAssortmentMapper.java @@ -0,0 +1,39 @@ +package org.springblade.desk.basic.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Mapper; +import org.springblade.desk.basic.excel.PlatingAssortmentExcel; +import org.springblade.desk.basic.pojo.entity.PlatingAssortment; +import org.springblade.desk.basic.pojo.vo.PlatingAssortmentVO; + +import java.util.List; + +/** + * [镀种分类] Mapper 接口 + * + * @author BladeX + * @since 2026-04-29 + */ +@Mapper +public interface PlatingAssortmentMapper extends BaseMapper { + + /** + * 自定义分页 + * + * @param page 分页参数 + * @param platingAssortment 查询参数 + * @return List + */ + List selectPlatingAssortmentPage(IPage page, @Param("platingAssortment") PlatingAssortmentVO platingAssortment); + + /** + * 获取导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportPlatingAssortment(@Param("ew") Wrapper queryWrapper); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlatingAssortmentMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlatingAssortmentMapper.xml new file mode 100644 index 000000000..3f0bc13fc --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/PlatingAssortmentMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IPlatingAssortmentService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IPlatingAssortmentService.java new file mode 100644 index 000000000..29db92fa9 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IPlatingAssortmentService.java @@ -0,0 +1,51 @@ +package org.springblade.desk.basic.service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.basic.excel.PlatingAssortmentExcel; +import org.springblade.desk.basic.pojo.entity.PlatingAssortment; +import org.springblade.desk.basic.pojo.vo.PlatingAssortmentVO; + +import java.util.List; + +/** + * [镀种分类] 服务类 + * + * @author BladeX + * @since 2026-04-29 + */ +public interface IPlatingAssortmentService extends BaseService { + + /** + * 自定义分页 + * + * @param page 分页参数 + * @param platingAssortment 查询参数 + * @return IPage + */ + IPage selectPlatingAssortmentPage(IPage page, PlatingAssortmentVO platingAssortment); + + /** + * 导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportPlatingAssortment(Wrapper queryWrapper); + + /** + * 设置VO值(填充用户名称等) + * + * @param vo VO对象 + */ + void setVOValue(PlatingAssortmentVO vo); + + /** + * 更新班组成员 + * + * @param platingAssortment 包含userIds的实体 + * @return 是否成功 + */ + boolean updateTeamMembers(PlatingAssortment platingAssortment); +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlatingAssortmentServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlatingAssortmentServiceImpl.java new file mode 100644 index 000000000..9047eeaa5 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/PlatingAssortmentServiceImpl.java @@ -0,0 +1,119 @@ +package org.springblade.desk.basic.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.CommonConstant; +import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.desk.basic.mapper.PlatingAssortmentMapper; +import org.springblade.desk.basic.pojo.entity.PlatingAssortment; +import org.springblade.desk.basic.pojo.vo.PlatingAssortmentVO; +import org.springblade.desk.basic.service.IPlatingAssortmentService; +import org.springblade.desk.basic.excel.PlatingAssortmentExcel; +import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.User; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * [镀种分类] 服务实现类 + * + * @author BladeX + * @since 2026-04-29 + */ +@Slf4j +@Service +public class PlatingAssortmentServiceImpl extends BaseServiceImpl implements IPlatingAssortmentService { + + @Resource + private IUserClient userClient; + + @Override + public IPage selectPlatingAssortmentPage(IPage page, PlatingAssortmentVO platingAssortment) { + return page.setRecords(baseMapper.selectPlatingAssortmentPage(page, platingAssortment)); + } + + @Override + public List exportPlatingAssortment(Wrapper queryWrapper) { + return baseMapper.exportPlatingAssortment(queryWrapper); + } + + @Override + public void setVOValue(PlatingAssortmentVO vo) { + if (vo == null) { + return; + } + + // 设置创建人名称 + if (vo.getCreateUser() != null && vo.getCreateUser() > 0) { + try { + User createUser = userClient.userInfoById(vo.getCreateUser()).getData(); + if (createUser != null) { + vo.setCreateUserRealName(createUser.getRealName()); + } + } catch (Exception e) { + log.warn("获取创建人信息失败: userId={}", vo.getCreateUser(), e); + } + } + + // 设置更新人名称 + if (vo.getUpdateUser() != null && vo.getUpdateUser() > 0) { + try { + User updateUser = userClient.userInfoById(vo.getUpdateUser()).getData(); + if (updateUser != null) { + vo.setUpdateUserRealName(updateUser.getRealName()); + } + } catch (Exception e) { + log.warn("获取更新人信息失败: userId={}", vo.getUpdateUser(), e); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateTeamMembers(PlatingAssortment platingAssortment) { + if (platingAssortment.getId() == null) { + throw new IllegalArgumentException("ID不能为空"); + } + + PlatingAssortment existing = getById(platingAssortment.getId()); + if (existing == null) { + throw new IllegalArgumentException("记录不存在"); + } + + List userIds = platingAssortment.getUserIds(); + String teamMemberIds = null; + String teamMemberNames = null; + + if (userIds != null && !userIds.isEmpty()) { + // 转换为逗号分隔的ID字符串 + teamMemberIds = userIds.stream() + .map(Object::toString) + .collect(Collectors.joining(",")); + + // 查询用户信息获取真实姓名 + try { + List users = userClient.userListByIds(teamMemberIds); + if (users != null && !users.isEmpty()) { + teamMemberNames = users.stream() + .map(User::getRealName) + .collect(Collectors.joining(",")); + } + } catch (Exception e) { + log.error("获取用户信息失败", e); + throw new RuntimeException("获取用户信息失败"); + } + } + + existing.setTeamMemberId(teamMemberIds); + existing.setTeamMember(teamMemberNames); + + return updateById(existing); + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/wrapper/PlatingAssortmentWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/wrapper/PlatingAssortmentWrapper.java new file mode 100644 index 000000000..8e8b0d8a0 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/wrapper/PlatingAssortmentWrapper.java @@ -0,0 +1,43 @@ +package org.springblade.desk.basic.wrapper; + +import org.springblade.core.mp.support.BaseEntityWrapper; +import org.springblade.desk.basic.pojo.entity.PlatingAssortment; +import org.springblade.desk.basic.pojo.vo.PlatingAssortmentVO; + +import java.util.Objects; + +/** + * [镀种分类] Wrapper类 + * + * @author BladeX + * @since 2026-04-29 + */ +public class PlatingAssortmentWrapper extends BaseEntityWrapper { + + public static PlatingAssortmentWrapper build() { + return new PlatingAssortmentWrapper(); + } + + @Override + public PlatingAssortmentVO entityVO(PlatingAssortment platingAssortment) { + if (Objects.isNull(platingAssortment)) { + return null; + } + PlatingAssortmentVO platingAssortmentVO = Objects.requireNonNull(new PlatingAssortmentVO()); + platingAssortmentVO.setId(platingAssortment.getId()); + platingAssortmentVO.setCode(platingAssortment.getCode()); + platingAssortmentVO.setName(platingAssortment.getName()); + platingAssortmentVO.setMemo(platingAssortment.getMemo()); + platingAssortmentVO.setSort(platingAssortment.getSort()); + platingAssortmentVO.setTeamMember(platingAssortment.getTeamMember()); + platingAssortmentVO.setTeamMemberId(platingAssortment.getTeamMemberId()); + platingAssortmentVO.setStatus(platingAssortment.getStatus()); + platingAssortmentVO.setCreateUser(platingAssortment.getCreateUser()); + platingAssortmentVO.setCreateDept(platingAssortment.getCreateDept()); + platingAssortmentVO.setCreateTime(platingAssortment.getCreateTime()); + platingAssortmentVO.setUpdateUser(platingAssortment.getUpdateUser()); + platingAssortmentVO.setUpdateTime(platingAssortment.getUpdateTime()); + platingAssortmentVO.setIsDeleted(platingAssortment.getIsDeleted()); + return platingAssortmentVO; + } +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml index 8c358308d..c47575138 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/cost/mapper/CostStatisticsMapper.xml @@ -127,11 +127,31 @@ a.quantity, a.SIR_MONEY, a.BUY_CODE, - a.CHECK_NO, + a.CHECK_NO, a.QUANTITY_LEVEL, a.SCRAP_CYCLE, a.STOVE_PI_NO, - a.IN_OUT_REASON, + CASE + a.IN_OUT_REASON + WHEN N'0' THEN + N'报废出库' + WHEN N'1' THEN + N'料头出库' + WHEN N'2' THEN + N'超额出库' + WHEN N'3' THEN + N'复检出库' + WHEN N'4' THEN + N'领用出库' + WHEN N'5' THEN + N'库转译' + WHEN N'6' THEN + N'退货出库' + WHEN N'7' THEN + N'物料出库' + WHEN N'8' THEN + N'班组提请' ELSE N'' + END as "inOutReason", a.IN_OUT_DATE, c.real_name as "userName", a.SIR_CODE diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEpciuInspectionPointController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEpciuInspectionPointController.java index 47ca9440d..1548f1af7 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEpciuInspectionPointController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEpciuInspectionPointController.java @@ -117,6 +117,12 @@ public class BsEpciuInspectionPointController extends BladeController { @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入bsEpciuInspectionPoint") public R save(@Valid @RequestBody BsEpciuInspectionPointEntity bsEpciuInspectionPoint) { + // 校验巡检点编号和类型是否重复 + if (bsEpciuInspectionPoint.getInsNum() != null) { + if (bsEpciuInspectionPointService.checkDuplicate(bsEpciuInspectionPoint.getInsNum(), bsEpciuInspectionPoint.getInsType(), null)) { + throw new RuntimeException("巡检点编号【" + bsEpciuInspectionPoint.getInsNum() + "】和巡检点类型的组合已存在,不能重复添加"); + } + } return R.status(bsEpciuInspectionPointService.save(bsEpciuInspectionPoint)); } @@ -127,6 +133,12 @@ public class BsEpciuInspectionPointController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入bsEpciuInspectionPoint") public R update(@Valid @RequestBody BsEpciuInspectionPointEntity bsEpciuInspectionPoint) { + // 校验巡检点编号和类型是否重复(排除当前记录) + if (bsEpciuInspectionPoint.getInsNum() != null) { + if (bsEpciuInspectionPointService.checkDuplicate(bsEpciuInspectionPoint.getInsNum(), bsEpciuInspectionPoint.getInsType(), bsEpciuInspectionPoint.getId())) { + return R.fail("巡检点编号【" + bsEpciuInspectionPoint.getInsNum() + "】和巡检点类型的组合已存在,不能重复"); + } + } return R.status(bsEpciuInspectionPointService.updateById(bsEpciuInspectionPoint)); } @@ -137,6 +149,12 @@ public class BsEpciuInspectionPointController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "新增或修改", description = "传入bsEpciuInspectionPoint") public R submit(@Valid @RequestBody BsEpciuInspectionPointEntity bsEpciuInspectionPoint) { + // 校验巡检点编号和类型是否重复 + if (bsEpciuInspectionPoint.getInsNum() != null) { + if (bsEpciuInspectionPointService.checkDuplicate(bsEpciuInspectionPoint.getInsNum(), bsEpciuInspectionPoint.getInsType(), bsEpciuInspectionPoint.getId())) { + return R.fail("巡检点编号【" + bsEpciuInspectionPoint.getInsNum() + "】和巡检点类型的组合已存在,不能重复"); + } + } return R.status(bsEpciuInspectionPointService.saveOrUpdate(bsEpciuInspectionPoint)); } @@ -207,6 +225,15 @@ public class BsEpciuInspectionPointController extends BladeController { noticeList.add(notice); }); + // 校验导入数据中是否有重复的巡检点编号和类型组合 + for (BsEpciuInspectionPointEntity entity : noticeList) { + if (entity.getInsNum() != null) { + if (bsEpciuInspectionPointService.checkDuplicate(entity.getInsNum(), entity.getInsType(), null)) { + return R.fail("巡检点编号【" + entity.getInsNum() + "】和巡检点类型【" + entity.getInsType() + "】的组合已存在,不能重复导入"); + } + } + } + // R checkR = ExcelExtUtil.importExcelCheck(file); // if (checkR != null) { // return checkR; @@ -223,6 +250,15 @@ public class BsEpciuInspectionPointController extends BladeController { @ApiOperationSupport(order = 12) @Operation(summary = "批量新增", description = "传入bsEpciuInspectionPointList") public R saveList(@Valid @RequestBody List bsEpciuInspectionPointList) { + // 校验批量数据中是否有重复的巡检点编号和类型组合 + for (BsEpciuInspectionPointEntity entity : bsEpciuInspectionPointList) { + if (entity.getInsNum() != null) { + if (bsEpciuInspectionPointService.checkDuplicate(entity.getInsNum(), entity.getInsType(), entity.getId())) { + return R.fail("巡检点编号【" + entity.getInsNum() + "】和巡检点类型【" + entity.getInsType() + "】的组合已存在,不能重复添加"); + } + } + } + return R.status(bsEpciuInspectionPointService.saveOrUpdateBatch(bsEpciuInspectionPointList)); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsSafeInspectionPointController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsSafeInspectionPointController.java index fd8de4d81..7891f8497 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsSafeInspectionPointController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsSafeInspectionPointController.java @@ -118,6 +118,12 @@ public class BsSafeInspectionPointController { @ApiOperationSupport(order = 4) @Operation(summary = "新增", description = "传入bsSafeInspectionPoint") public R save(@Valid @RequestBody BsSafeInspectionPointEntity bsSafeInspectionPoint) { + // 校验巡检点编号是否重复 + if (bsSafeInspectionPoint.getInsNum() != null) { + if (bsSafeInspectionPointService.checkDuplicate(bsSafeInspectionPoint.getInsNum(), null)) { + throw new RuntimeException("巡检点编号【" + bsSafeInspectionPoint.getInsNum() + "】已存在,不能重复添加"); + } + } return R.status(bsSafeInspectionPointService.save(bsSafeInspectionPoint)); } @@ -128,6 +134,12 @@ public class BsSafeInspectionPointController { @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入bsSafeInspectionPoint") public R update(@Valid @RequestBody BsSafeInspectionPointEntity bsSafeInspectionPoint) { + // 校验巡检点编号是否重复(排除当前记录) + if (bsSafeInspectionPoint.getInsNum() != null) { + if (bsSafeInspectionPointService.checkDuplicate(bsSafeInspectionPoint.getInsNum(), bsSafeInspectionPoint.getId())) { + return R.fail("巡检点编号【" + bsSafeInspectionPoint.getInsNum() + "】已存在,不能重复"); + } + } return R.status(bsSafeInspectionPointService.updateById(bsSafeInspectionPoint)); } @@ -138,6 +150,12 @@ public class BsSafeInspectionPointController { @ApiOperationSupport(order = 6) @Operation(summary = "新增或修改", description = "传入bsSafeInspectionPoint") public R submit(@Valid @RequestBody BsSafeInspectionPointEntity bsSafeInspectionPoint) { + // 校验巡检点编号是否重复 + if (bsSafeInspectionPoint.getInsNum() != null) { + if (bsSafeInspectionPointService.checkDuplicate(bsSafeInspectionPoint.getInsNum(), bsSafeInspectionPoint.getId())) { + return R.fail("巡检点编号【" + bsSafeInspectionPoint.getInsNum() + "】已存在,不能重复"); + } + } return R.status(bsSafeInspectionPointService.saveOrUpdate(bsSafeInspectionPoint)); } @@ -212,6 +230,15 @@ public class BsSafeInspectionPointController { && !item.getInsNum().contains("注")) .toList(); + // 校验导入数据中是否有重复的巡检点编号 + for (BsSafeInspectionPointEntity entity : importList) { + if (entity.getInsNum() != null) { + if (bsSafeInspectionPointService.checkDuplicate(entity.getInsNum(), null)) { + return R.fail("巡检点编号【" + entity.getInsNum() + "】已存在,不能重复导入"); + } + } + } + return R.status(bsSafeInspectionPointService.saveBatch(importList)); } /** @@ -221,6 +248,15 @@ public class BsSafeInspectionPointController { @ApiOperationSupport(order = 12) @Operation(summary = "批量新增", description = "传入bsSafeInspectionPointList") public R saveList(@Valid @RequestBody List bsSafeInspectionPointList) { + // 校验批量数据中是否有重复的巡检点编号 + for (BsSafeInspectionPointEntity entity : bsSafeInspectionPointList) { + if (entity.getInsNum() != null) { + if (bsSafeInspectionPointService.checkDuplicate(entity.getInsNum(), entity.getId())) { + return R.fail("巡检点编号【" + entity.getInsNum() + "】已存在,不能重复添加"); + } + } + } + return R.status(bsSafeInspectionPointService.saveOrUpdateBatch(bsSafeInspectionPointList)); } @PostMapping(value = "/print") diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEpciuInspectionPointService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEpciuInspectionPointService.java index 62dd3dece..216362591 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEpciuInspectionPointService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEpciuInspectionPointService.java @@ -62,4 +62,13 @@ public interface IBsEpciuInspectionPointService extends BaseService getByCode(String code); List listByCode(String code); + + /** + * 校验巡检点是否重复(根据巡检点编号和巡检点类型) + * @param insNum 巡检点编号 + * @param insType 巡检点类型 + * @param excludeId 排除的ID(修改时使用,新增时传null) + * @return 是否存在重复 + */ + boolean checkDuplicate(String insNum, String insType, Long excludeId); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsSafeInspectionPointService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsSafeInspectionPointService.java index c65e04ba4..8fd8720a3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsSafeInspectionPointService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsSafeInspectionPointService.java @@ -64,6 +64,14 @@ public interface IBsSafeInspectionPointService extends BaseService 0; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEpciuPatrolInspectionServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEpciuPatrolInspectionServiceImpl.java index aa474b5fd..ab241ca19 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEpciuPatrolInspectionServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEpciuPatrolInspectionServiceImpl.java @@ -131,10 +131,11 @@ public class BsEpciuPatrolInspectionServiceImpl extends BaseServiceImpl safeInspectionPointList = bsEpciuInspectionPointService.listByCode(bsEpciuPatrolInspection.getInsNum()); + if (CollUtil.isEmpty(safeInspectionPointList)){ + return; + } Set pointIds = safeInspectionPointList.stream().map(BsEpciuInspectionPointEntity::getId).collect(Collectors.toSet()); update(Wrappers.lambdaUpdate(BsEpciuPatrolInspectionEntity.class) .in(BsEpciuPatrolInspectionEntity::getEpcId, pointIds) diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsSafeInspectionPointServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsSafeInspectionPointServiceImpl.java index 456ad308d..168183b32 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsSafeInspectionPointServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsSafeInspectionPointServiceImpl.java @@ -26,6 +26,7 @@ package org.springblade.desk.energy.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -178,4 +179,19 @@ public class BsSafeInspectionPointServiceImpl extends BaseServiceImpl 0; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java index f5e876c1a..3bf20dad5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java @@ -124,11 +124,11 @@ public class YieldOrderController extends BladeController { @Parameter(name = "overHalfMon", description = "使用半月以上的数据,0:否,1:是, 以生产订单的下达时间算", in = ParameterIn.QUERY, schema = @Schema(type = "string")) }) @Operation(summary = "分页-物料需求申报", description = "") - public R> pageMaterialApply(Long wcId, Integer materialType, Integer overHalfMon, Query query) { + public R> pageMaterialApply(Long wcId, String plateGoodsCode, Integer overHalfMon, Query query) { IPage page = Condition.getPage(query); page.setRecords(new ArrayList<>()); - page = yieldOrderService.pageMaterialApply(Condition.getPage(query), wcId, materialType, overHalfMon); + page = yieldOrderService.pageMaterialApply(Condition.getPage(query), wcId, plateGoodsCode, overHalfMon); return R.data(YieldOrderWrapper.build().pageVO(page)); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java index 810281a18..5bb271be2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/OrderClient.java @@ -25,15 +25,22 @@ */ package org.springblade.desk.order.feign; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import io.swagger.v3.oas.annotations.Hidden; import lombok.RequiredArgsConstructor; +import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.tenant.annotation.NonDS; +import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springblade.desk.order.service.IYieldOrderDailyAssignService; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.order.service.IYieldPlanService; import org.springframework.web.bind.annotation.RestController; +import java.util.List; +import java.util.stream.Collectors; + /** * Feign 排产相关定时任务接口 * @@ -64,4 +71,13 @@ public class OrderClient implements IOrderClient { public void initYieldOrderDailyAssign() throws Exception { yieldOrderDailyAssignService.init(); } + + @Override + public void dataVerify() { + List list = orderService.list(Wrappers.lambdaQuery().in(YieldOrder::getValidationResult,16001,16003)); + if(CollectionUtils.isNotEmpty(list)){ + List idList = list.stream().map(BaseEntity::getId).collect(Collectors.toList()); + orderService.dataVerify(idList); + } + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.java index 520ea692e..1a176d36d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.java @@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Param; import org.springblade.desk.order.pojo.dto.YieldOrderDto; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; -import org.springblade.desk.order.pojo.vo.YieldOrderVo; import java.util.List; @@ -33,13 +32,13 @@ public interface YieldOrderMapper extends BaseMapper { * * @param page * @param wcId 作业中心 - * @param materialType 物料类型,1:金钾,2:银钾 + * @param plateGoodsCode 金钾:04-05-023 银钾:04-05-024 * @param overHalfMon 使用半月以上的数据,0:否,1:是 * @param yieldTypeList 订单类型 * @param yieldStatusList 订单状态 * @return */ - List pageMaterialApply(IPage page, Long wcId, Integer materialType, Integer overHalfMon, + List pageMaterialApply(IPage page, Long wcId, String plateGoodsCode, Integer overHalfMon, List yieldTypeList, List yieldStatusList); Long getWcId(Long orderId); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.xml index f42469157..822a45c2a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldOrderMapper.xml @@ -84,22 +84,14 @@ + SELECT + erp.prtno, + -- ERP 一级库存、计划数量 + NVL(erp.invqty1j, 0) AS invqty1j, + NVL(erp.planqty, 0) AS planqty + + FROM dba_mgr.v_mes_rb_prtstuff erp + WHERE erp.prtno = #{goodsCode} + + + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java index ca301d583..f22f8f110 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataProduceService.java @@ -3,7 +3,6 @@ package org.springblade.erpdata.service; import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; import org.springblade.erpdata.pojo.vo.*; -import java.text.ParseException; import java.util.Date; import java.util.List; import java.util.Map; @@ -60,4 +59,7 @@ public interface IErpDataProduceService { ErpReturnDataVO proRbinviogen(String hrCode, String partCode, Integer handoverQty, String prodIdent, String batchNo, String ypCode, String woCode, String handoverUnit, String createMan, String recDept, String memo, String deliverKey, Integer testQty, Integer lossQty, Integer scrapQty); ErpReturnDataVO proRbtransferlev(String hrCode, String ypCode, String woCode, String cardNo, String partCode, String batchNo, String createMan, String createTime, String handoverUnit, Integer handoverQty, String recDept, String roamNo, String deliverKey, Integer testQty, Integer lossQty, Integer scrapQty); + + String createMoldPlan(String partCode, String moCode, String plantype, Integer quantity, Date needDate, String level, + String keeper, String createMan, String memo); } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataWmsService.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataWmsService.java index 103a0d5fe..81fc1509f 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataWmsService.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpDataWmsService.java @@ -1,6 +1,7 @@ package org.springblade.erpdata.service; import org.springblade.common.exception.BusinessException; +import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.wms.pojo.entity.StRealtimeStock; import java.util.Date; @@ -23,4 +24,6 @@ public interface IErpDataWmsService { String createMoldPlan(String partCode, String moCode, String plantype, Double quantity, Date needDate, String level, String keeper, String createMan, String memo, String urgentType, String erpWoCode) throws BusinessException; String deleteMoldPlan(String erpWoCode) throws BusinessException; + + StGoodsExtStatusVO getGoodsExtStatus(String goodsCode); } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java index 664917a4a..324936647 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataProduceServiceImpl.java @@ -3,6 +3,7 @@ package org.springblade.erpdata.service.impl; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; import org.springblade.erpdata.mapper.ErpDataProduceMapper; @@ -465,4 +466,57 @@ public class ErpDataProduceServiceImpl implements IErpDataProduceService { erpReturnDataVO.setExcnote((String) resultMap.get("v_excnote")); return erpReturnDataVO; } + + + @Override + public String createMoldPlan(String partCode, String moCode, String plantype, Integer quantity, Date needDate, String level, + String keeper, String createMan, String memo) { + SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate) + // 指定存储过程名(包含 DB Link) + .withProcedureName("dba_mgr.pro_rbtoolreqm") + // 建议关闭元数据访问(通过 DB Link 访问时可避免权限/性能问题) + .withoutProcedureColumnMetaDataAccess() + // 显式声明参数 + .declareParameters( + new SqlParameter("v_prtno", Types.VARCHAR), // IN + new SqlParameter("v_toolcode", Types.VARCHAR), // IN + new SqlParameter("v_plntype", Types.VARCHAR), // IN + new SqlParameter("v_tlreqqty", Types.INTEGER), // IN + new SqlParameter("v_tlreqdat", Types.DATE), // IN + new SqlParameter("v_prtmdept", Types.VARCHAR), // IN + new SqlParameter("v_prtlotno", Types.VARCHAR), // IN + new SqlParameter("v_WARCTLR", Types.VARCHAR), // IN + new SqlParameter("v_operator", Types.VARCHAR), // IN + new SqlParameter("v_remark", Types.VARCHAR), // IN + new SqlParameter("v_stat", Types.VARCHAR), // IN + new SqlParameter("v_toolid1", Types.VARCHAR), // IN + new SqlOutParameter("v_excnote", Types.VARCHAR),// OUT + new SqlOutParameter("v_excflag", Types.VARCHAR), // OUT + new SqlOutParameter("v_toolid", Types.VARCHAR) // OUT + ); + // 2. 封装输入参数 + Map inParams = new HashMap<>(); + inParams.put("v_prtno", partCode); + inParams.put("v_toolcode", moCode); + inParams.put("v_plntype", plantype); + inParams.put("v_tlreqqty", quantity); + inParams.put("v_tlreqdat", needDate); + inParams.put("v_prtmdept", "3600"); + inParams.put("v_prtlotno", level); + inParams.put("v_WARCTLR", keeper); + inParams.put("v_operator", createMan); + inParams.put("v_remark", StringUtils.isBlank(memo) ? "" : memo); + inParams.put("v_stat", "0"); + inParams.put("v_toolid1", ""); + + + // 3. 执行并获取结果 Map + Map resultMap = jdbcCall.execute(inParams); + + // 4. 提取输出参数 + String excflag = (String) resultMap.get("v_excflag"); + String excnote = (String) resultMap.get("v_excnote"); + String wxno = (String) resultMap.get("v_toolid"); + return wxno; + } } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataWmsServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataWmsServiceImpl.java index 5e24db8f8..6bba80b45 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataWmsServiceImpl.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpDataWmsServiceImpl.java @@ -1,9 +1,12 @@ package org.springblade.erpdata.service.impl; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.common.exception.BusinessException; +import org.springblade.erpdata.mapper.ErpDataWmsMapper; +import org.springblade.erpdata.pojo.vo.StGoodsExtStatusVO; import org.springblade.erpdata.service.IErpDataWmsService; import org.springblade.wms.pojo.entity.StRealtimeStock; import org.springframework.jdbc.core.JdbcTemplate; @@ -31,6 +34,9 @@ import java.util.Map; @Service public class ErpDataWmsServiceImpl implements IErpDataWmsService { + @Resource + private final ErpDataWmsMapper erpDataWmsMapper; + private final JdbcTemplate jdbcTemplate; @Override @@ -209,4 +215,9 @@ public class ErpDataWmsServiceImpl implements IErpDataWmsService { return excflag; } + @Override + public StGoodsExtStatusVO getGoodsExtStatus(String goodsCode){ + return erpDataWmsMapper.getGoodsExtStatus(goodsCode); + } + } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/QualityGradeController.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/QualityGradeController.java index a4d415c2f..d1703293e 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/QualityGradeController.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/controller/QualityGradeController.java @@ -25,6 +25,8 @@ */ package org.springblade.scheduling.scheduling.controller; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; @@ -34,6 +36,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; @@ -43,20 +46,25 @@ import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; -import org.springblade.desk.basic.pojo.entity.OemCraftAbilityEntity; -import org.springblade.desk.basic.pojo.entity.WorkCenter; -import org.springblade.scheduling.pojo.entity.CraftAbilityEntity; +import org.springblade.desk.basic.constant.ExcelConst; import org.springblade.scheduling.pojo.entity.QualityGradeEntity; import org.springblade.scheduling.scheduling.excel.QualityGradeExcel; import org.springblade.scheduling.scheduling.service.IQualityGradeService; import org.springblade.scheduling.scheduling.vo.QualityGradeVO; import org.springblade.scheduling.scheduling.wrapper.QualityGradeWrapper; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.*; import java.util.stream.Collectors; /** @@ -292,4 +300,105 @@ public class QualityGradeController extends BladeController { return R.data(list); } + @PostMapping("/importExcel") + @ApiOperationSupport(order = 72) + @Operation(summary = "导入Excel", description = "MultipartFile") + public R importExcel(@RequestParam("file") MultipartFile file) { + importExcelCheck(file); + + List list = ExcelUtil.read(file, QualityGradeEntity.class); + if (CollUtil.isEmpty(list)){ + return R.fail("导入数据为空"); + } + list.forEach(s -> { + String type = s.getType(); + if (StrUtil.isNotEmpty(type)) { + List typeCodes = new ArrayList<>(); + List typeNames = new ArrayList<>(); + for (Map.Entry entry : QualityGradeEntity.typeMap.entrySet()) { + if (type.contains(entry.getValue())) { + typeCodes.add(entry.getKey()); + typeNames.add(entry.getValue()); + } + } + if (!typeCodes.isEmpty()) { + s.setType(String.join(",", typeCodes)); + s.setTypeNames(String.join(",", typeNames)); + } + } + + // isLocal + String isLocal = s.getIsLocal(); + if (StrUtil.isNotEmpty(isLocal)) { + for (Map.Entry entry : QualityGradeEntity.isLocalMap.entrySet()) { + if (entry.getValue().equals(isLocal)) { + s.setIsLocal(entry.getKey()); + break; + } + } + } + + // isThickness + String isThickness = s.getIsThickness(); + if (StrUtil.isNotEmpty(isThickness)) { + for (Map.Entry entry : QualityGradeEntity.isThicknessMap.entrySet()) { + if (entry.getValue().equals(isThickness)) { + s.setIsThickness(entry.getKey()); + break; + } + } + } + }); + + return R.data(qualityGradeService.saveBatch(list)); + } + public static R importExcelCheck(MultipartFile file) { + if (file.isEmpty()) { + return R.fail("请上传文件"); + } + String fileName = file.getOriginalFilename(); + if (StringUtils.isBlank(fileName)) { + return R.fail("文件名为空"); + } + if (!StringUtils.endsWith(fileName, ExcelConst.EXT_XLS) && + !StringUtils.endsWith(fileName, ExcelConst.EXT_XLSX)) { + return R.fail("格式不正确"); + } + return null; + } + /** + * 下载模板 + */ + @IsAdmin + @GetMapping("/downloadTemplate") + @ApiOperationSupport(order = 9) + @Operation(summary = "导出模板", description = "导出模板") + public ResponseEntity exportQualityGrade(HttpServletResponse response) { + return downloadXlsTemplate( + "Excel/质量等级表数据导入模板.xlsx", + "导入模版-质量等级表数据.xlsx"); + } + + public static ResponseEntity downloadXlsTemplate(String path, String downloadFileName) { + if (StringUtils.isAnyBlank(path, downloadFileName)) { + throw new IllegalArgumentException("path or downloadFileName is null"); + } + // 读取resource下的Excel文件,路径从resource根目录开始。 + org.springframework.core.io.Resource resource = new ClassPathResource(path); + // 检查文件是否存在。 + if (!resource.exists()) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + // 构建响应头。 + HttpHeaders headers = new HttpHeaders(); + // 文件名编码,解决中文乱码问题。 + String encodedFileName = URLEncoder.encode(downloadFileName, StandardCharsets.UTF_8) + .replaceAll("\\+", "%20"); + headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + encodedFileName + "\""); + // 返回文件流 + return ResponseEntity.ok() + .headers(headers) + .contentType(MediaType.parseMediaType(ExcelConst.CONTENT_TYPE_XLSX)) + .body(resource); + } } diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml index cb4e168de..d35f6121d 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml @@ -120,7 +120,7 @@ LEFT JOIN MES_YIELD_ORDER g on g.id = a.yo_id a.is_deleted = 0 and b.is_deleted = 0 and a.status in (1,2,3,5) - and b.plan_start_time is not null and b.plan_end_time is not null and g.work_center_id in (81,122,162) + and b.plan_start_time is not null and b.plan_end_time is not null and to_char(b.plan_start_time,'YYYY-MM-DD') = ]]> #{startTime} diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java index 2b4a64929..62fc4577a 100644 --- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java @@ -635,6 +635,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl resourceList = entry1.getValue(); for (EquipResourceEntity equipResource : resourceList) { + if(equipResource.getStartTime().compareTo(prevProcessEnd) <0){ + continue; + } //烧结订单需判断零件类型 if(order.getYieldType() != YieldOrderEnum.YIELD_TYPE_1.getCode()){ //玻璃饼订单查询玻璃饼直径,壳体查询最大外径 @@ -664,11 +667,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl personAbilityList = personAbilityService.list(Wrappers.lambdaQuery() .eq(PersonAbilityEntity::getWorkCenterId,craft.getWorkCenterId()) @@ -1953,7 +1956,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl voList = JsonUtil.readValue(personAbility.getStandardTime(), new TypeReference>() {}); for(PersonAbilityVO vo : voList){ if(part.getExternalDiameter() != null && part.getExternalDiameter() > vo.getStartNum() && part.getExternalDiameter() <= vo.getEndNum()){ - personTime = Double.parseDouble(vo.getStandardTime()) * order.getYpQty() + personAbility.getPrepareTime().doubleValue(); + personTime = Double.parseDouble(vo.getStandardTime()) * qty + personAbility.getPrepareTime().doubleValue(); break; } } @@ -1966,7 +1969,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl voList = JsonUtil.readValue(personAbility.getStandardTime(), new TypeReference>() {}); for(PersonAbilityVO vo : voList){ if(part.getBlbDiameter() != null && part.getBlbDiameter() >vo.getStartNum() && part.getBlbDiameter() <= vo.getEndNum()){ - personTime = Double.parseDouble(vo.getStandardTime()) * order.getYpQty() + personAbility.getPrepareTime().doubleValue(); + personTime = Double.parseDouble(vo.getStandardTime()) * qty + personAbility.getPrepareTime().doubleValue(); break; } } @@ -1990,7 +1993,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl voList = JsonUtil.readValue(personAbility.getStandardTime(), new TypeReference>() {}); for(PersonAbilityVO vo : voList){ if(quota > vo.getStartNum() && quota <= vo.getEndNum()){ - personTime = Double.parseDouble(vo.getStandardTime()) * order.getYpQty() + personAbility.getPrepareTime().doubleValue(); + personTime = Double.parseDouble(vo.getStandardTime()) * qty + personAbility.getPrepareTime().doubleValue(); break; } } @@ -2003,7 +2006,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); @@ -2106,11 +2109,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); @@ -2220,11 +2223,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); @@ -2297,7 +2300,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl 80) { result = 15.6 + 1.5 * sumOfQuota; } - result = result * order.getYpQty() + 7; + result = result * qty + 7; } else { if (n <= 15) { result = 6.6 + 3.5 * sumOfQuota; @@ -2314,13 +2317,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl 80) { result = 15.6 + 3.5 * sumOfQuota; } - result = result * order.getYpQty() + 10; + result = result * qty + 10; } } return Math.ceil(result); } //单侧折针、双侧折针 - public Double calPersonHoursByZz(YieldOrderEntity order,PartEntity part,String processName){ + public Double calPersonHoursByZz(Integer qty,PartEntity part,String processName){ Double result = 0.0; if (part != null && part.getId() != null) { List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); @@ -2340,11 +2343,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(PartRelationEntity::getPartId,part.getId())); @@ -2357,7 +2360,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl mergeYieldOrderList(List originalList) { diff --git a/blade-service/blade-scheduling/src/main/resources/excel/质量等级表数据导入模板.xlsx b/blade-service/blade-scheduling/src/main/resources/excel/质量等级表数据导入模板.xlsx new file mode 100644 index 000000000..697183e9d Binary files /dev/null and b/blade-service/blade-scheduling/src/main/resources/excel/质量等级表数据导入模板.xlsx differ diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java index bf169fcfa..d60f952b9 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java @@ -41,6 +41,7 @@ import org.springblade.core.tool.utils.StringPool; import org.springblade.core.tool.utils.StringUtil; import org.springblade.desk.basic.feign.IWorkCenterClient; import org.springblade.desk.basic.pojo.entity.BasicClazz; +import org.springblade.desk.basic.pojo.entity.PlatingAssortment; import org.springblade.desk.basic.pojo.entity.TeamSet; import org.springblade.system.cache.SysCache; import org.springblade.system.mapper.DeptMapper; @@ -190,7 +191,8 @@ public class DeptServiceImpl extends ServiceImpl implements ID // List list = userExtService.listAllByRoleIds("2032373544077012993,2032373858255548418"); // List userIds = list.stream().map(User::getId).collect(Collectors.toList()); - BasicClazz detail = workCenterClient.getClazzById(clazzId).getData(); + //BasicClazz detail = workCenterClient.getClazzById(clazzId).getData(); + PlatingAssortment detail = workCenterClient.platingAssortmentByid(clazzId).getData(); if(detail != null){ String teamId = detail.getTeamMemberId(); if(null != teamId && !"".equals(teamId)){ diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StBuyOrderController.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StBuyOrderController.java index eae94eec8..abcd7b3c0 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StBuyOrderController.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StBuyOrderController.java @@ -105,11 +105,6 @@ public class StBuyOrderController extends BladeController { stBuyOrder.setApprovalStatus(StBuyOrder.APPROVAL_STATUS_CHECKING); } - /* 2. 默认排序:boCode 升序(*/ - if (StrUtil.isBlank(query.getAscs()) && StrUtil.isBlank(query.getDescs())) { - query.setAscs("bo_code"); - } - IPage pages = stBuyOrderService.selectStBuyOrderPage(Condition.getPage(query), stBuyOrder); return R.data(pages); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java new file mode 100644 index 000000000..a5596d9af --- /dev/null +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/WmsTaskClientImpl.java @@ -0,0 +1,32 @@ +package org.springblade.wms.feign; + +import io.swagger.v3.oas.annotations.Hidden; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.core.tenant.annotation.NonDS; +import org.springblade.wms.service.IStGoodsExtService; +import org.springframework.web.bind.annotation.RestController; + +/** + * @version 1.0 + * @program: jonhon-mes-svr + * @ClassName WmsTaskClient + * @description: + * @autor: WuSiYu + * @create 2026-04-30 10:20 + **/ +@NonDS +@Hidden +@RestController +@AllArgsConstructor +@Slf4j +public class WmsTaskClientImpl implements WmsTaskClient{ + + private final IStGoodsExtService stGoodsExtService; + + @Override + public boolean executeGoodsStatusUpdate() { + stGoodsExtService.executeGoodsStatusUpdate(); + return true; + } +} diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StAllotRecordMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StAllotRecordMapper.xml index 1de33df73..b3e050bb2 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StAllotRecordMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StAllotRecordMapper.xml @@ -51,7 +51,7 @@ AND g.goods_code LIKE CONCAT('%', #{ew.entity.goodsCode}, '%') - + ORDER BY a.create_time DESC diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StExpireSubmissionMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StExpireSubmissionMapper.xml index 670f06084..6307e8c5f 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StExpireSubmissionMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StExpireSubmissionMapper.xml @@ -32,7 +32,7 @@ se.es_time AS esTime, se.es_man AS esMan, se.submit_status AS submitStatus, - NVL(se.es_qty, 0), + se.es_qty, -- 物料表:物料编码、物料名称 g.goods_code AS goodsCode, g.goods_name AS goodsName, diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.java index 2435a78cb..b7768eb0b 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.java @@ -41,5 +41,7 @@ public interface StGoodsExtMapper extends BaseMapper { List exportStGoodsExt(@Param("ew") Wrapper queryWrapper); IPage selectGoodsExtWithGoods(IPage page, @Param("ew") QueryWrapper queryWrapper); + + StGoodsExt getGoodsExt(Double invqty1j, Double planqty, Long goodsId); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.xml index 4b369cea0..e4e87a68c 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsExtMapper.xml @@ -87,6 +87,33 @@ ORDER BY se.create_time DESC + + diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGoodsExtService.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGoodsExtService.java index b3734138e..f8146cab1 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGoodsExtService.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGoodsExtService.java @@ -41,5 +41,7 @@ public interface IStGoodsExtService extends BaseService { IPage selectGoodsExtPage(IPage page, Map stGoodsExt); Boolean getSpecial(Long goodsId); + + void executeGoodsStatusUpdate(); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StBuyOrderServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StBuyOrderServiceImpl.java index 543e02495..b4c370ec7 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StBuyOrderServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StBuyOrderServiceImpl.java @@ -10,7 +10,6 @@ import lombok.extern.slf4j.Slf4j; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; -import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.desk.common.feign.IMesApprovalRecordClient; import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity; @@ -226,7 +225,7 @@ public class StBuyOrderServiceImpl extends BaseServiceImpl ruser = userClient.userInfoById(bo.getDeclareMan()); + User declareMan = ruser.getData(); + dto.setReqctlr(declareMan.getAccount()); // 当前登录人 dto.setCheckdate(bo.getCheckDate() == null ? "" : DateUtil.format(bo.getCheckDate(), "yyyy-MM-dd")); - dto.setCheckman(bo.getCheckMan() == null ? "" : bo.getCheckMan()); + R userR = userClient.userInfoById(bo.getCheckMan()); + User checkMan = userR.getData(); + dto.setCheckman(checkMan.getAccount() == null ? "" : checkMan.getAccount()); pdList.add(dto); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StExpireSubmissionServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StExpireSubmissionServiceImpl.java index 0ad5f1d39..0f7908a7a 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StExpireSubmissionServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StExpireSubmissionServiceImpl.java @@ -71,6 +71,8 @@ public class StExpireSubmissionServiceImpl extends BaseServiceImpl implements IStGoodsExtService { + @Resource + private StGoodsMapper stGoodsMapper; + @Resource + private IErpDataWmsClient erpDataWmsClient; + @Override public IPage selectStGoodsExtPage(IPage page, StGoodsExtVO stGoodsExt) { return page.setRecords(baseMapper.selectStGoodsExtPage(page, stGoodsExt)); @@ -58,6 +71,49 @@ public class StGoodsExtServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_deleted", 0); + List list = baseMapper.selectList(queryWrapper); + + List goodsIds = list.stream() + .map(StGoodsExt::getGoodsId) + .filter(Objects::nonNull) + .toList(); + + Map goodsIdToCodeMap = stGoodsMapper.selectBatchIds(goodsIds) + .stream() + .collect(Collectors.toMap(StGoods::getId, StGoods::getGoodsCode)); + + for (StGoodsExt ext : list) { + Long goodsId = ext.getGoodsId(); + String goodsCode = goodsIdToCodeMap.get(goodsId); + + StGoodsExtStatusVO vo = erpDataWmsClient.getGoodsExtStatus(goodsCode).getData(); + if (vo == null) { + log.warn("物料ERP信息不存在,跳过:goodsCode={}", goodsCode); + continue; + } + StGoodsExt goodsExt = baseMapper.getGoodsExt(vo.getInvqty1j(),vo.getPlanqty(),goodsId); + ext.setFirstStore(vo.getInvqty1j()); + ext.setLastStore(goodsExt.getLastStore()); + ext.setPlanQty(vo.getPlanqty()); + ext.setGoodsStatus(goodsExt.getGoodsStatus()); +// ext.setUpdateTime(new Date()); +// ext.setUpdateUser(AuthUtil.getUserId()); + + this.updateById(ext); + } + + log.info("===== 物料状态定时更新完成 =====", list.size()); + } catch (Exception e) { + log.info("===== 物料状态定时更新异常 =====", e); + } + } @Override public List exportStGoodsExt(Wrapper queryWrapper) { diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java index d58191541..8d72a25cf 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java @@ -73,6 +73,7 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl rlsIdList = new ArrayList<>(); - + List warnMsgList = new ArrayList<>(); // 遍历出入库记录列表,批量执行核心业务逻辑 for (int i = 0; i < inoutList.size(); i++) { // 3.1 获取当前索引对应的单个对象 @@ -357,9 +360,14 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl