diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCloseProdPlanProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCloseProdPlanProcessor.java index f60c3327..e608d57f 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCloseProdPlanProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCloseProdPlanProcessor.java @@ -2,7 +2,6 @@ package org.springblade.job.processor.erp; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.desk.order.feign.IApsOrderClient; import org.springblade.erpdata.feign.IErpMesRbWoClient; import tech.powerjob.worker.core.processor.ProcessResult; import tech.powerjob.worker.core.processor.TaskContext; @@ -16,15 +15,18 @@ public class SynCloseProdPlanProcessor implements BasicProcessor { private final IErpMesRbWoClient mesRbWoClient; - //private final IApsOrderClient orderClient; - - @Override public ProcessResult process(TaskContext taskContext) throws Exception { log.info("同步关闭生产计划定时任务开始"); - CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synCloseProdPlan()); - log.info("同步关闭生产计划定时任务结束"); + CompletableFuture runFuture = CompletableFuture.runAsync(() -> mesRbWoClient.synCloseProdPlan()); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步关闭生产计划定时任务失败", exception); + } else { + log.info("同步关闭生产计划定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCraftProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCraftProcessor.java index 89bab0db..c8892abd 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCraftProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCraftProcessor.java @@ -21,7 +21,13 @@ public class SynCraftProcessor implements BasicProcessor { public ProcessResult process(TaskContext taskContext) throws Exception { log.info("同步正式工艺订单定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synCraft()); - log.info("同步正式工艺订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步正式工艺订单定时任务失败", exception); + } else { + log.info("同步正式工艺订单定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynGlassCakeProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynGlassCakeProcessor.java index e547d355..5ff307ee 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynGlassCakeProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynGlassCakeProcessor.java @@ -22,7 +22,13 @@ public class SynGlassCakeProcessor implements BasicProcessor { public ProcessResult process(TaskContext taskContext) throws Exception { log.info("同步玻璃饼订单定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> orderClient.synGlassCake()); - log.info("同步玻璃饼订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步玻璃饼订单定时任务失败", exception); + } else { + log.info("同步玻璃饼订单定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynMesRbWoProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynMesRbWoProcessor.java index e874e7bc..d9933473 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynMesRbWoProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynMesRbWoProcessor.java @@ -19,9 +19,15 @@ public class SynMesRbWoProcessor implements BasicProcessor { @Override public ProcessResult process(TaskContext taskContext) throws Exception { - log.info("同步生产订单定时任务开始"); + log.info("同步生产计划定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synMesRbWo()); - log.info("同步生产订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步生产计划定时任务失败", exception); + } else { + log.info("同步生产计划定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynOutsourcingProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynOutsourcingProcessor.java index f624389d..e2a6231c 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynOutsourcingProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynOutsourcingProcessor.java @@ -21,7 +21,13 @@ public class SynOutsourcingProcessor implements BasicProcessor { public ProcessResult process(TaskContext taskContext) throws Exception { log.info("同步外协订单定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synOutsourcing()); - log.info("同步外协订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步外协订单定时任务失败", exception); + } else { + log.info("同步外协订单定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseLOTTJProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseLOTTJProcessor.java index 0a30c4bc..f84d4c73 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseLOTTJProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseLOTTJProcessor.java @@ -21,7 +21,13 @@ public class SynPurchaseLOTTJProcessor implements BasicProcessor { public ProcessResult process(TaskContext taskContext) throws Exception { log.info("同步采购LOTTJ订单定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synPurchaseLOTTJ()); - log.info("同步采购LOTTJ订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步采购LOTTJ订单定时任务失败", exception); + } else { + log.info("同步采购LOTTJ订单定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseProcessor.java index a9707cbf..41b2c195 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseProcessor.java @@ -19,9 +19,15 @@ public class SynPurchaseProcessor implements BasicProcessor { @Override public ProcessResult process(TaskContext taskContext) throws Exception { - log.info("同步采购订单定时任务开始"); + log.info("同步物资转车间协作加工订单定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synPurchase()); - log.info("同步采购订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步物资转车间协作加工订单定时任务失败", exception); + } else { + log.info("同步物资转车间协作加工订单定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSinterProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSinterProcessor.java index 453a08b3..1afda091 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSinterProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSinterProcessor.java @@ -21,7 +21,13 @@ public class SynSinterProcessor implements BasicProcessor { public ProcessResult process(TaskContext taskContext) throws Exception { log.info("同步烧结订单定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synSinter()); - log.info("同步烧结订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步烧结订单定时任务失败", exception); + } else { + log.info("同步烧结订单定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSupportingFacilitiesProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSupportingFacilitiesProcessor.java index 6f597370..b98ac197 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSupportingFacilitiesProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSupportingFacilitiesProcessor.java @@ -21,7 +21,13 @@ public class SynSupportingFacilitiesProcessor implements BasicProcessor { public ProcessResult process(TaskContext taskContext) throws Exception { log.info("同步配套订单定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synSupportingFacilities()); - log.info("同步配套订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步配套订单定时任务失败", exception); + } else { + log.info("同步配套订单定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynTemporaryProcessor.java b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynTemporaryProcessor.java index 8be3f8b1..aa43fb0c 100644 --- a/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynTemporaryProcessor.java +++ b/blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynTemporaryProcessor.java @@ -21,7 +21,13 @@ public class SynTemporaryProcessor implements BasicProcessor { public ProcessResult process(TaskContext taskContext) throws Exception { log.info("同步临时订单定时任务开始"); CompletableFuture runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synTemporary()); - log.info("同步临时订单定时任务结束"); + runFuture.whenComplete((result, exception) -> { + if (exception != null) { + log.error("同步临时订单定时任务失败", exception); + } else { + log.info("同步临时订单定时任务结束"); + } + }); return new ProcessResult(true); } } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IApsOrderClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IApsOrderClient.java index c92b8b04..1d4788e3 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IApsOrderClient.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IApsOrderClient.java @@ -29,6 +29,7 @@ public interface IApsOrderClient { String GET_CRAFT_LIST = API_PREFIX + "/getDsCraftList"; String GET_PLAN_LIST = API_PREFIX + "/getPlanList"; String GET_PART_LIST = API_PREFIX + "/getPartList"; + String GET_PART_LIST_BY_PARAM = API_PREFIX + "/getPartListByParam"; String UPDATE_BY_ID = API_PREFIX + "/updateById"; String CLOSE_PLAN_LIST = API_PREFIX + "/getClosePlanList"; String MAX_CARD_NO = API_PREFIX + "/getMaxCardNo"; @@ -37,6 +38,8 @@ public interface IApsOrderClient { String GET_SELECT_TIME = API_PREFIX + "/getSelectTime"; String GET_CRAFT_CODE = API_PREFIX + "/getDsCraftListByCode"; String SAVE_ORDER_LIST = API_PREFIX + "/saveOrderList"; + String SAVE_ORDER = API_PREFIX + "/saveOrder"; + String GET_PART_BY_CODE = API_PREFIX + "/getPartByCode"; String UP_DATE_MAX = API_PREFIX + "/upByDateMax"; @PostMapping(SYNC_PLAN_FROM_SAVE) @@ -45,8 +48,11 @@ public interface IApsOrderClient { List getDsCraftList(); @GetMapping(GET_PLAN_LIST) List getPlanList(); + + @GetMapping(GET_PART_LIST_BY_PARAM) + List getPartListByParam(List partCodeList); @GetMapping(GET_PART_LIST) - List getPartList(List partCodeList); + List getPartList(); @GetMapping(UPDATE_BY_ID) void updateById(YieldPlan yieldPlan); @GetMapping(CLOSE_PLAN_LIST) @@ -65,4 +71,16 @@ public interface IApsOrderClient { void saveOrderList(List yieldOrderList); @GetMapping (UP_DATE_MAX) void upByDateMax(@RequestParam("max") String max,@RequestParam("code") String code); + + // Long getCount(@RequestParam("yoCode") String yoCode,@RequestParam("cardNo") String cardNo,@RequestParam("batchNo") String batchNo,@RequestParam("roamNo") String roamNo); + @GetMapping(GET_PART_BY_CODE) + DsPartEntity getPartByCode(String code); + + /** + * 生产订单通用保存方法 + * + * @param yieldOrderList + */ + @PostMapping(SAVE_ORDER) + void saveOrder(List yieldOrderList); } diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClient.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClient.java index 4c8b6e2e..c859233b 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClient.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClient.java @@ -4,12 +4,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.wms.pojo.entity.StGoods; +import org.springblade.wms.pojo.entity.StRealtimeStock; +import org.springblade.wms.pojo.vo.StGoodStatisVO; import org.springblade.wms.pojo.vo.StRealtimeStockVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; /** * 仓库实时结余远程调用 @@ -27,6 +32,12 @@ public interface StRealtimeStockClient { String MEASURING_Id = API_PREFIX + "/getById"; + String GET_REALTIME_STOCK_BY_GOOD = API_PREFIX + "/getRealtimeStockByGood"; + + String COUNT_QUANTITY_AND_OCCUPY_QUANTITY = API_PREFIX + "/countQuantityAndOccupyQuantity"; + + String SAVE_OR_UPDATE_BATCH = API_PREFIX + "/saveOrUpdateBatch"; + /** * 量具库存 */ @@ -36,4 +47,24 @@ public interface StRealtimeStockClient { @PostMapping(MEASURING_Id) R getById(@RequestBody StGoods stGoods); + /** + * 查询指定物料的可用库存记录 + * + * @param goodCode + * @return + */ + @GetMapping(GET_REALTIME_STOCK_BY_GOOD) + List getRealtimeStockByGood(@RequestParam("goodCode") String goodCode); + + /** + * 汇总指定物料的总库存、总已占用库存 + * + * @param goodCode + * @return + */ + @GetMapping(COUNT_QUANTITY_AND_OCCUPY_QUANTITY) + StGoodStatisVO countQuantityAndOccupyQuantity(@RequestParam("goodCode") String goodCode); + + @PostMapping(SAVE_OR_UPDATE_BATCH) + R saveOrUpdateBatch(List stockList); } diff --git a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClientFallback.java b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClientFallback.java index 9edfa5da..5b332f09 100644 --- a/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClientFallback.java +++ b/blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClientFallback.java @@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.wms.pojo.entity.StGoods; +import org.springblade.wms.pojo.entity.StRealtimeStock; +import org.springblade.wms.pojo.vo.StGoodStatisVO; import org.springblade.wms.pojo.vo.StRealtimeStockVO; import org.springframework.stereotype.Component; +import java.util.List; + /** * Feign失败配置 * @@ -25,5 +29,20 @@ public class StRealtimeStockClientFallback implements StRealtimeStockClient { return null; } + @Override + public List getRealtimeStockByGood(String goodCode) { + return List.of(); + } + + @Override + public StGoodStatisVO countQuantityAndOccupyQuantity(String goodCode) { + return null; + } + + @Override + public R saveOrUpdateBatch(List stockList) { + return R.fail("更新失败"); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/ApsOrderClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/ApsOrderClient.java index a9e2c632..08331967 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/ApsOrderClient.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/ApsOrderClient.java @@ -1,5 +1,7 @@ package org.springblade.desk.order.feign; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.v3.oas.annotations.Hidden; import lombok.RequiredArgsConstructor; @@ -57,7 +59,12 @@ public class ApsOrderClient implements IApsOrderClient { } @Override - public List getPartList(List partCodeList) { + public List getPartList() { + return dsPartService.list(); + } + + @Override + public List getPartListByParam(List partCodeList) { return dsPartService.list(new QueryWrapper().lambda() .in(DsPartEntity::getPartCode, partCodeList) .like(DsPartEntity::getPartName, "玻璃")); @@ -124,4 +131,21 @@ public class ApsOrderClient implements IApsOrderClient { public void upByDateMax(String max, String code) { yieldPlanService.updateByNewlevdateMax(max,code); } + + @Override + public DsPartEntity getPartByCode(String code) { + return dsPartService.getOne(new LambdaQueryWrapper() + .eq(DsPartEntity::getPartCode, code)); + } + + @Override + public void saveOrder(List yieldOrderList) { + yieldOrderService.saveOrder(yieldOrderList); + } + +// @Override +// public Long getCount(String yoCode, String cardNo, String batchNo, String roamNo) { +// return yieldOrderService.getCount(yoCode,cardNo,batchNo,roamNo); +// } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java index 41c27231..d09b3b90 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java @@ -258,4 +258,23 @@ public interface IYieldOrderService extends BaseService { * @param dsPartSub */ void saveGlassCake(String yoCode, String cardNo, String batchNo, YieldPlan po, DsPartEntity dsPartSub); + + /** + * 根据下列参数查询生产订单数量 + * + * @param yoCode + * @param cardNo + * @param batchNo + * @param roamNo + * @return + */ + Long getCount(String yoCode, String cardNo, String batchNo, String roamNo); + + + /** + * 生产订单通用保存方法 + * + * @param yieldOrderList + */ + void saveOrder(List yieldOrderList); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java index 6a6236a4..1d071754 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java @@ -5,9 +5,11 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; 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.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -35,10 +37,12 @@ import org.springblade.desk.dashboard.service.IDsPartService; import org.springblade.desk.dashboard.service.IDsProcessService; import org.springblade.desk.order.constant.YieldOrderConst; import org.springblade.desk.order.mapper.YieldOrderMapper; +import org.springblade.desk.order.mapper.YieldPlanMapper; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldOrderCraft; import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springblade.desk.order.pojo.enums.YieldOrderEnum; +import org.springblade.desk.order.pojo.vo.LineMemoVo; import org.springblade.desk.order.service.IYieldOrderCraftService; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.mapper.WorkOrderMapper; @@ -69,6 +73,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpllambdaQuery().eq(YieldOrder::getYoCode, yoCode) + .eq(YieldOrder::getCardNo, cardNo) + .eq(YieldOrder::getBatchNo, batchNo) + .eq(YieldOrder::getRoamNo, roamNo)); + } + @Override public R getCardNo(String cardNo) { if (cardNo.isEmpty()) { @@ -828,6 +842,68 @@ public class YieldOrderServiceImpl extends BaseServiceImpl yieldOrderList) { + yieldOrderList.forEach(order -> { + Long vCount = 0L; + //1.从生产订单表中查询订单 + vCount = this.getCount(order.getYoCode(), order.getCardNo(), order.getBatchNo(), order.getRoamNo()); + if (vCount > 0) { + //2.判断是否查询到订单,若查询到,直接退出 + log.error(String.format("零件号【%s】,批号【%s】工单已转交,请勿重复转交!", order.getPartCode(), order.getBatchNo())); + } + //3.按零级号查询零件信息,零件信息处理 + order.setYpArea((double) 0); + List dsPartList = dsPartService.list(new QueryWrapper().lambda() + .eq(DsPartEntity::getPartCode, order.getPartCode())); + if (dsPartList != null && dsPartList.size() > 0) { + DsPartEntity dsPartEntity = dsPartList.get(0); + order.setProductType(dsPartEntity.getProductType()); + order.setPartName(dsPartEntity.getPartName()); + if (dsPartEntity.getArea() != null) { + order.setYpArea(dsPartEntity.getArea()); + } + order.setPrimaryCraft(dsPartEntity.getCraftWay()); + order.setPlate(dsPartEntity.getPlate()); + } + //4.查询是否为会议急件 + Long vPriority = yieldPlanMapper.getMaxPriority(order.getYpCode()); + order.setPriorityErp(vPriority.intValue()); + //5. 厂内生产急件标识赋值 + Long count = yieldPlanMapper.getCount(order.getYpCode(), order.getPartCode(), order.getBatchNo()); + if (count > 0) { + order.setSiteWork(true); + order.setPriorityErp(5); + } + //6.对优先级字段进行转换,新旧mes中订单优先级的值不一致 + vPriority += 14000; + order.setPriorityErp(Integer.parseInt(vPriority.toString())); + //7.烧结订单处理, -- 默认厂内加工 + if ("2".equals(order.getYieldType()) || "3".equals(order.getYieldType())) { + order.setSiteWork(true); + } + //8.玻璃饼订单自动入库, 更新接收状态 + order.setReceiveStatus(11000); + if ("3".equals(order.getYieldType())) { + order.setStatus(11001); + //对接受人赋值 + Long receiveUser = yieldPlanMapper.getReceiveUser(); + order.setReceiveUser(receiveUser); + //对接收时间进行赋值 + order.setReceiveTime(new Date()); + } + //9.从生产计划中查询产品系列和订单备注 + LineMemoVo lineMemoVo = yieldPlanMapper.getLineMemo(order.getYpCode()); + if (lineMemoVo != null && lineMemoVo.getSum() == 0) { + order.setMemo(""); + order.setYpProductLine(""); + } else { + order.setMemo(lineMemoVo.getMemo()); + order.setYpProductLine(lineMemoVo.getProdLine()); + } + }); + this.saveBatch(yieldOrderList); + } /** * 验证零件子件信息 * diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java index 311a5a5d..87c27e02 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java @@ -1,13 +1,13 @@ package org.springblade.desk.order.service.impl; +import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.common.utils.StringUtils; 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 lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.ResultCode; @@ -20,17 +20,25 @@ import org.springblade.desk.order.mapper.YieldPlanMapper; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldPlan; import org.springblade.desk.order.pojo.enums.YieldPlanEnum; -import org.springblade.desk.order.pojo.vo.LineMemoVo; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.order.service.IYieldPlanService; import org.springblade.erpdata.feign.IErpPartoplinkFirseqClient; import org.springblade.erpdata.pojo.dto.PartoplinkFirseqDTO; +import org.springblade.system.cache.UserCache; +import org.springblade.system.pojo.vo.RegionVO; +import org.springblade.wms.feign.StRealtimeStockClient; +import org.springblade.wms.pojo.entity.StRealtimeStock; +import org.springblade.wms.pojo.vo.StGoodStatisVO; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** @@ -46,7 +54,7 @@ public class YieldPlanServiceImpl extends BaseServiceImpl selectPageElectroplate(IPage page, YieldPlan entity) { @@ -159,109 +167,109 @@ public class YieldPlanServiceImpl extends BaseServiceImpl yieldPlanList=baseMapper.selectList(new QueryWrapper().lambda() .eq(YieldPlan::getIsDeleted, 0).eq(YieldPlan::getPlanType, 12002) .eq(YieldPlan::getGenerateGlassCake, 0));; List partCodeList=yieldPlanList.stream().map(x->x.getPartCode()).toList(); - //b1. 查询该计划的零件是否是玻璃相关的零件列表(sub_cursor) + //查询该计划的零件是否是玻璃相关的零件列表(sub_cursor) List dsPartList=dsPartService.list(new QueryWrapper().lambda() .in(DsPartEntity::getPartCode, partCodeList) .like(DsPartEntity::getPartName, "玻璃"));// 获取零件信息 - List partList=dsPartList.stream().map(x->x.getPartCode()).toList(); + Map> partMap = dsPartList.stream() + .collect(Collectors.groupingBy(DsPartEntity::getPartCode)); + List yieldOrderList = new ArrayList<>(); + List realtimeStocks = new ArrayList<>(); + // 初始化序号 + String maxCardNo = yieldOrderService.getMaxCardNo(); + Long startNum = 1L; + if (StringUtils.hasText(maxCardNo)) { + startNum = Long.valueOf(maxCardNo.replace("RB" + new SimpleDateFormat("yyMMdd").format(new Date()), "")) + 1; + } + AtomicLong counter = new AtomicLong(startNum); + String dateStr = new SimpleDateFormat("yyMMdd").format(new Date()); + + //遍历烧结主制计划列表 yieldPlanList.forEach(yieldPlan -> { - if(!partList.contains(yieldPlan.getPartCode())){ + //若不含玻璃相关的零件,表示不需要生成 + if (!partMap.containsKey(yieldPlan.getPartCode())) { yieldPlan.setGenerateGlassCake(1); yieldPlan.setId(yieldPlan.getId()); baseMapper.updateById(yieldPlan); + return; } - //b3.1 生成流程卡号、批次号 - //查询RB相关的流程卡号 - String cardNo=yieldOrderService.getMaxCardNo();; - Long num; - if(StringUtils.isEmpty(cardNo)){ - num=1L; - }else { - num=Long.valueOf(cardNo.replace("RB"+new SimpleDateFormat("yyMMdd").format(new Date()), ""))+1; - } - cardNo="RB"+new SimpleDateFormat("yyMMdd").format(new Date())+String.format("%05d", num); - String bathNo="Y"+new SimpleDateFormat("yyMMdd").format(new Date())+String.format("%05d", num); - //调用公共保存方法 todo - //查询order订单 - for (int i = 0; i < dsPartList.size(); i++) { - DsPartEntity dsPart = dsPartList.get(i); - List yieldOrderList=yieldOrderService.list(new QueryWrapper() - .lambda().eq(YieldOrder::getYpCode, yieldPlan.getYpCode()) - .eq(YieldOrder::getCardNo, cardNo) - .eq(YieldOrder::getBatchNo, bathNo) - .eq(YieldOrder::getRoamNo, yieldPlan.getRoamNo())); - if(yieldOrderList.size()>0){ - new ServiceException("'零件号【' "+dsPart.getPartCode()+" '】,批号【'\n" + - " "+bathNo+" '】工单已转交,请勿重复转交!!'"); - } - DsPartEntity zPartEntity = dsPartService.getOne(new QueryWrapper().lambda() - .eq(DsPartEntity::getPartCode, yieldPlan.getPartCode()).last("limit 1")); - if(zPartEntity.getArea()==null){ - yieldPlan.setYpArea(0.0); - } - Long vPriority=baseMapper.getMaxPriority(yieldPlan.getYpCode()); - //7. 厂内生产急件标识赋值 - Long vCount=baseMapper.getCount(yieldPlan.getYpCode(),yieldPlan.getPartCode(),bathNo); - YieldOrder yieldOrder=new YieldOrder(); - vPriority=vPriority+14000; - yieldOrder.setPriorityErp(Integer.parseInt(vPriority.toString())); - if(vCount>0){ - yieldOrder.setSiteWork(true); - yieldOrder.setPriorityErp(5); + //遍历零件列表 + List dsPartEntities = partMap.get(yieldPlan.getPartCode()); + dsPartEntities.forEach(dsPartEntity -> { + //生成流程卡号、批次号 + // 生成序号,全局自增,而不是每个外层循环重新开始 + long num = counter.getAndIncrement(); + String cardNo = "RB" + dateStr + String.format("%05d", num); + String bathNo = "Y" + dateStr + String.format("%05d", num); + //创建生产订单并赋值 + YieldOrder yieldOrder = new YieldOrder(); + yieldOrder.setRoamNo(""); + String yoCode = "WO-B" + new SimpleDateFormat("yyMMdd").format(new Date()) + String.format("%05d", num); + yieldOrder.setRoamNoNext(""); + yieldOrder.setYoCode(yoCode); + yieldOrder.setYpCode(""); + yieldOrder.setPartCode(dsPartEntity.getPartCode()); + yieldOrder.setPartName(dsPartEntity.getPartName()); + yieldOrder.setProductIdent(yieldPlan.getProductIdent()); + yieldOrder.setUseDept("热表分厂"); + yieldOrder.setDemandDate(yieldPlan.getDemandDate()); + if (null != UserCache.getUser(yieldPlan.getPlanUser())) { + yieldOrder.setPlanUser(UserCache.getUser(yieldPlan.getPlanUser()).getRealName()); } - if("2".equals(yieldOrder.getYieldType())||"3".equals(yieldOrder.getYieldType())){ - yieldOrder.setSiteWork( true); - yieldOrder.setReceiveStatus(11000); - } - if("3".equals(yieldOrder.getYieldType())){ - yieldOrder.setStatus(11001); - } - //对接受人赋值 - Long receiveUser=baseMapper.getReceiveUser(); - yieldOrder.setReceiveUser(receiveUser); - //对接收时间进行赋值 - yieldOrder.setReceiveTime(new Date()); + yieldOrder.setReleaseDate(new Date()); + yieldOrder.setMemo(yieldPlan.getMemo()); + yieldOrder.setCardNo(cardNo); + yieldOrder.setBatchNo(bathNo); + yieldOrder.setYpQty(yieldPlan.getYpQty().doubleValue()); + yieldOrder.setYieldType(3); + yieldOrder.setEntrustDept("热表分厂"); + yieldOrder.setUseDeptCode("3400"); + yieldOrderList.add(yieldOrder); - LineMemoVo lineMemoVo = baseMapper.getLineMemo(yieldPlan.getYpCode()); - if(lineMemoVo!=null&&lineMemoVo.getSum()==0){ - yieldOrder.setMemo(""); - yieldOrder.setYpProductLine(""); - }else { - yieldOrder.setMemo(lineMemoVo.getMemo()); - yieldOrder.setYpProductLine(lineMemoVo.getProdLine()); + //玻璃饼预占用 + //从仓库相关表中查询指定物料的可用库存记录 + List stRealtimeStockList = stRealtimeStockClient.getRealtimeStockByGood(dsPartEntity.getPartCode()); + //汇总指定物料的总库存、总已占用库存 + StGoodStatisVO stGoodStatisVO = stRealtimeStockClient.countQuantityAndOccupyQuantity(dsPartEntity.getPartCode()); + //计算子件需要占用的总数量 + AtomicReference subPorqty = new AtomicReference<>(yieldPlan.getYpQty().doubleValue()); + //判断库存是否满足需求并逐行占用 + if (null == stGoodStatisVO || CollUtil.isEmpty(stRealtimeStockList)) { + return; } - //保存订单 - yieldOrderService.saveOrUpdate(yieldOrder); - - } -// dsPartList.forEach(dsPart -> { -// List stockList=stRealtimeStockService.getGoodsByPartCode(dsPart.getPartCode()); -// StGoodStatisVO statisVO=stRealtimeStockService.getGoodsByCode(dsPart.getPartCode()); -// Double subPorqty=dsPart.getQuota()*yieldPlan.getDeliveryQty() ; -// if(statisVO.getTotalQuantity()-statisVO.getZyQuantity()>=subPorqty){ -// stockList.forEach(stock -> { -// if(stock.getQuantity()-stock.getOccupyQuantity()>=subPorqty){ -// StRealtimeStock rs=new StRealtimeStock(); -// rs.setId(stock.getId()); -// rs.setOccupyQuantity(rs.getOccupyQuantity()+subPorqty); -// stRealtimeStockService.updateById(rs); -// }else { -// StRealtimeStock rs=new StRealtimeStock(); -// rs.setId(stock.getId()); -// rs.setOccupyQuantity(rs.getQuantity()); -// stRealtimeStockService.updateById(rs); -// } -// }); -// } -// }); + if (stGoodStatisVO.getTotalQuantity() - stGoodStatisVO.getZyQuantity() >= subPorqty.get()) { + stRealtimeStockList.forEach(stRealtimeStock -> { + StRealtimeStock rs = new StRealtimeStock(); + if (stRealtimeStock.getQuantity() - stRealtimeStock.getOccupyQuantity() >= subPorqty.get()) { + //当前库存记录的可用库存 ≥ 剩余需要占用的数量 + //只占用当前记录的部分库存:已占用数量 += 剩余需要占用的数量 + rs.setId(stRealtimeStock.getId()); + rs.setOccupyQuantity(stRealtimeStock.getOccupyQuantity() + subPorqty.get()); + realtimeStocks.add(rs); + } else { + //当前库存记录的可用库存 < 剩余需要占用的数量 + //剩余需要占用的数量 = 剩余数量 - 当前记录的可用库存 + subPorqty.set(dsPartEntity.getQuota() - (stRealtimeStock.getQuantity() - stRealtimeStock.getOccupyQuantity())); + rs.setId(stRealtimeStock.getId()); + rs.setOccupyQuantity(stRealtimeStock.getQuantity()); + realtimeStocks.add(rs); + } + }); + } + }); + //调用生成订单的通用存储方法,保存玻璃饼生产订单 + yieldOrderService.saveOrder(yieldOrderList); + //更新库存记录 + stRealtimeStockClient.saveOrUpdateBatch(realtimeStocks); //更新状态标记为已读`update MES_YIELD_PLAN set GENERATE_GLASS_CAKE = 1 where id = ?` yieldPlan.setGenerateGlassCake(1); - yieldPlan.setId(yieldPlan.getId()); baseMapper.updateById(yieldPlan); }); } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.java index 1a43be8b..5f99b575 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.java @@ -17,5 +17,7 @@ public interface ErpMesRbWoMapper extends Mapper { * * @return */ - List getYieldPlanErpList(); + List getYieldPlanErpList(String newlevdateMax); + + String getNewlevdateMax(String selectTime); } diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml index 9078f1b2..c38990d3 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml @@ -21,8 +21,21 @@ a.kdofplat, a.processlinedesc, a.prodline - FROM dba_mgr.v_mes_rb_wo + FROM dba_mgr.v_mes_rb_wo a + + a.wopordat = ]]> to_date(#{newlevdateMax},'YYYY-MM-DD HH24:MI:SS') + WHERE rownum 2000 + diff --git a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java index 01189b6b..68bb9871 100644 --- a/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java +++ b/blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java @@ -10,17 +10,22 @@ import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.order.feign.IApsOrderClient; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.pojo.entity.YieldPlan; +import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.order.pojo.enums.YieldPlanEnum; import org.springblade.erpdata.mapper.ErpMesRbWoMapper; import org.springblade.erpdata.pojo.dto.table.Rrbwoerptomes; import org.springblade.erpdata.pojo.dto.table.Wo; import org.springblade.erpdata.pojo.dto.view.*; import org.springblade.erpdata.service.*; +import org.springblade.system.cache.DictCache; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @author lqk @@ -58,12 +63,18 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { @Override public List getList(MesRbWo entity) { - return mesRbWoMapper.getYieldPlanErpList(); + return mesRbWoMapper.getYieldPlanErpList(entity.getWoreqdat()); } @Override + @Transactional(rollbackFor = Exception.class) public void synMesRbWo() { - List mesRbWoList=mesRbWoMapper.getYieldPlanErpList(); + //用字典的code查更新日期 + String selectTime = apsOrderClient.getSelectTime("SYCN_MESRBWO_TIME"); + //从ERP视图查询最大日期 + String newlevdateMax = mesRbWoMapper.getNewlevdateMax(selectTime); + apsOrderClient.upByDateMax(newlevdateMax, "SYCN_MESRBWO_TIME"); + List mesRbWoList = mesRbWoMapper.getYieldPlanErpList(newlevdateMax); /** * 有多个实体类 * b1. 根据零件号从`DS_PART`表中查询零件信息 @@ -73,26 +84,18 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { * INTO v_product_type, v_part_name, v_po_area, v_craft_way, v_config_no * FROM ds_part a WHERE a.part_code = v_prtno; */ - List dsPartList=new ArrayList<>();//todo 获取零件信息 - List partCodeList=dsPartList.stream().map(x->x.getPartCode()).toList(); + List dsPartList = apsOrderClient.getPartList(); + Map partMap = dsPartList.stream().collect(Collectors.toMap(DsPartEntity::getPartCode, v -> v)); List yieldPlanList=new ArrayList<>(); //若零件不为空, 验证零件是否存在二级零件工艺 List dsCraftList= apsOrderClient.getDsCraftList(); - List partIdList=dsCraftList.stream().map(x->x.getPartId()).toList(); + List partIdList = dsCraftList.stream().map(x -> x.getPartId()).toList(); final Long[] partId = {0L}; List rbwoerptomesList=new ArrayList<>(); mesRbWoList.forEach(mesRbWo -> { YieldPlan yieldPlan=new YieldPlan(); //b1. 根据零件号从`DS_PART`表中查询零件信息 - dsPartList.forEach(dsPart -> { - if(dsPartList!=null&&dsPart.getPartCode().equals(mesRbWo.getPrtno())){ - yieldPlan.setProductType(dsPart.getProductType()); - yieldPlan.setPartName(dsPart.getPartName()); - yieldPlan.setYpArea(dsPart.getArea()); - yieldPlan.setPrimaryCraft(dsPart.getCraftWay()); - partId[0] =dsPart.getId(); - } - }); + DsPartEntity dsPart = partMap.get(mesRbWo.getPrtno()); yieldPlan.setPlanType(12001L);//赋值默认值12001 if(mesRbWo.getProcesslinedesc().contains("封接") ||"LX08-05-028,LX08-05-030,LX08-05-031".contains(mesRbWo.getProcessline())){ @@ -103,11 +106,16 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { yieldPlan.setStatus(YieldPlanEnum.STATUS_DISPATCHED.getCode()); yieldPlan.setRoamNo(""); //1. 若零件为空 - if(!partCodeList.contains(mesRbWo.getPrtno())){ + if (null == dsPart) { yieldPlan.setStatus(YieldPlanEnum.STATUS_NO_CRAFT.getCode()); yieldPlan.setRoamNo("无零件信息!!"); - }else {//2. 若零件不为空, 验证零件是否存在二级零件工艺 - if(partId==null||partId[0]==null||(partId!=null&&partId[0]!=null&&!partIdList.contains(partId[0]))){ + } else { + yieldPlan.setProductType(dsPart.getProductType()); + yieldPlan.setPartName(dsPart.getPartName()); + yieldPlan.setYpArea(dsPart.getArea()); + yieldPlan.setPrimaryCraft(dsPart.getCraftWay()); + //2. 若零件不为空, 验证零件是否存在二级零件工艺 + if (!partIdList.contains(dsPart.getId())) { yieldPlan.setStatus(YieldPlanEnum.STATUS_NO_CRAFT.getCode()); yieldPlan.setRoamNo("无二级工艺信息!!"); } @@ -128,7 +136,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { rbwoerptomesList.add(rbwoerptomes); }); apsOrderClient.saveList(yieldPlanList); - rbwoerptomesService.saveOrUpdateBatch(rbwoerptomesList); +// rbwoerptomesService.saveOrUpdateBatch(rbwoerptomesList); } @Override @@ -164,6 +172,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { * 同步关闭计划 */ @Override + @Transactional(rollbackFor = Exception.class) public void synCloseProdPlan() { List yieldPlanList=apsOrderClient.getClosePlanList(); yieldPlanList.forEach(yieldPlan -> { @@ -187,11 +196,14 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { return R.data(wo); } /** - * 同步采购工单 + * 同步物资转车间协作加工 */ @Override + @Transactional(rollbackFor = Exception.class) public void synPurchase() { + //用字典的code查更新日期 String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERCG_TIME1"); + //从ERP视图查询最大日期 String newlevdateMax=mesRbPurtosoService.getNewlevdateMax(selectTime); apsOrderClient.upByDateMax(newlevdateMax, "SYCN_TRANSFERCG_TIME1"); List purtosoList=mesRbPurtosoService.getMesRbPurtosoList(newlevdateMax); @@ -217,9 +229,10 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { yieldOrder.setPkUsername(mesRbPurtoso.getNewlevname()); yieldOrder.setPkDate(mesRbPurtoso.getNewlevdate()); List dsPartList=apsOrderClient.getDsCraftListByCode(mesRbPurtoso.getPrtno()); - yieldOrder.setYieldType(12001); - if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){ - yieldOrder.setYieldType(12002); + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode()); + //若零件不为空,查询零件的工艺路线 + if (dsPartList != null && dsPartList.get(0).getCraftWay().contains("封接")) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode()); } yieldOrder.setRoamNo("");//当前b号 yieldOrder.setRoamNoNext("");//下级b号 @@ -238,8 +251,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { * 同步临时工单 */ @Override + @Transactional(rollbackFor = Exception.class) public void synTemporary() { + //用字典的code查更新日期 String selectTime=apsOrderClient.getSelectTime("SYCN_PACTURNRECORD_TIME"); + //从ERP视图查询最大日期 String newlevdateMax=mesRbPacturnrecordService.getNewlevdateMax(selectTime); apsOrderClient.upByDateMax(newlevdateMax, "SYCN_PACTURNRECORD_TIME"); List pacturnrecordList=mesRbPacturnrecordService.getMesRbPacturnrecordList(newlevdateMax); @@ -273,6 +289,8 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbPacturnrecord.getPrtno(),mesRbPacturnrecord.getFirseq()); yieldOrder.setRoamNoNext(roamNoNext);//下级b号 } + //委托车间 + yieldOrder.setEntrustDept(mesRbPacturnrecord.getDeptno()); yieldOrderList.add(yieldOrder); }); this.saveOrder(yieldOrderList); @@ -281,8 +299,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { * 同步烧结数据 */ @Override + @Transactional(rollbackFor = Exception.class) public void synSinter() { + //用字典的code查更新日期 String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERSJ_TIME"); + //从ERP视图查询最大日期 String newlevdateMax=mesRbSjsoService.getNewlevdateMax(selectTime); apsOrderClient.upByDateMax(newlevdateMax, "SYCN_TRANSFERSJ_TIME"); List rbtosoList=mesRbSjsoService.getMesRbSjsoList(newlevdateMax); @@ -305,7 +326,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { yieldOrder.setUseDeptCode(mesRbtoso.getPrtudeptcode()); yieldOrder.setPkUsername(mesRbtoso.getNewlevname()); yieldOrder.setPkDate(mesRbtoso.getNewlevdate()); - yieldOrder.setYieldType(12002); + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode()); yieldOrder.setRoamNoNext( ""); if(StringUtils.isNotEmpty(mesRbtoso.getFirseq())){ String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbtoso.getPrtno(),mesRbtoso.getFirseq()); @@ -319,8 +340,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { * 同步采购LOTTJ */ @Override + @Transactional(rollbackFor = Exception.class) public void synPurchaseLOTTJ() { + //用字典的code查更新日期 String selectTime=apsOrderClient.getSelectTime("SYCN_BUYTRANSFER_TIME"); + //从ERP视图查询最大日期 String dateMax=mesRbWxpromotionService.getNewlevdateMax(selectTime); apsOrderClient.upByDateMax(dateMax,"SYCN_BUYTRANSFER_TIME"); List wxpromotionList=mesRbWxpromotionService.getMesRbWxpromotionList(dateMax); @@ -345,9 +369,9 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { yieldOrder.setPkUsername(mesRbWxpromotion.getNewlevname()); yieldOrder.setPkDate(mesRbWxpromotion.getNewlevdate()); List dsPartList=apsOrderClient.getDsCraftListByCode(mesRbWxpromotion.getPrtno()); - yieldOrder.setYieldType(12001); - if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){ - yieldOrder.setYieldType(12002); + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode()); + if (dsPartList != null && dsPartList.get(0).getCraftWay().contains("封接")) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode()); } yieldOrder.setRoamNo("");//当前b号 yieldOrder.setRoamNoNext("");//下级b号 @@ -366,8 +390,11 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { * 同步外协工单 */ @Override + @Transactional(rollbackFor = Exception.class) public void synOutsourcing() { + //用字典的code查更新日期 String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERWX_TIME"); + //从ERP视图查询最大日期 String dateMax=erpMesRbSodelrecwxService.getNewlevdateMax(selectTime); apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERWX_TIME"); List mesRbSodelrecwxList=erpMesRbSodelrecwxService.getMesRbSodelrecwxList(dateMax); @@ -391,9 +418,9 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { yieldOrder.setPkUsername(mesRbSodelrecwx.getNewlevname()); yieldOrder.setPkDate(mesRbSodelrecwx.getNewlevdate()); List dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelrecwx.getPrtno()); - yieldOrder.setYieldType(12001); + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode()); if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){ - yieldOrder.setYieldType(12002); + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode()); } yieldOrder.setRoamNo("");//当前b号 yieldOrder.setRoamNoNext("");//下级b号 @@ -412,13 +439,18 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { * 同步工艺工单 */ @Override + @Transactional(rollbackFor = Exception.class) public void synCraft() { + //用字典的code查更新日期 String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERZG_TIME1"); + //从ERP视图查询最大日期 String dateMax=erpMesRbSodelreczgService.getNewlevdateMax(selectTime); + //更新配置表的基准时间 apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERZG_TIME1"); List mesRbSodelreczgList=erpMesRbSodelreczgService.getMesRbSodelreczgList(dateMax); List yieldOrderList=new ArrayList<>(); mesRbSodelreczgList.forEach(mesRbSodelreczg -> { + //将查询出的数据放到单个的变量中 YieldOrder yieldOrder=new YieldOrder(); yieldOrder.setYpMemo("正式工艺转工"); yieldOrder.setManualIncrease(false); @@ -437,30 +469,39 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { yieldOrder.setUseDeptCode(mesRbSodelreczg.getPrtudeptcode()); yieldOrder.setPkUsername(mesRbSodelreczg.getNewlevname()); yieldOrder.setPkDate(mesRbSodelreczg.getNewlevdate()); + //从零件表中查询零件信息 List dsPartList=apsOrderClient.getDsCraftListByCode(mesRbSodelreczg.getPrtno()); - yieldOrder.setYieldType(12001); - if(dsPartList!=null&&dsPartList.get(0).getCraftWay().contains("封接")){ - yieldOrder.setYieldType(12002); + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode()); + //若零件不为空,查询零件的工艺路线 + if (dsPartList != null && dsPartList.get(0).getCraftWay().contains("封接")) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode()); } yieldOrder.setRoamNo("");//当前b号 yieldOrder.setRoamNoNext("");//下级b号 + //根据零件号和上级b号查询视图 Long vCount=mesRbPartoplinkService.getVcount(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq()); if(vCount>0){ + //从ERP视图中查询当前B号 String roamNo=mesRbPartoplinkService.getRoamNo(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq()); yieldOrder.setRoamNo(roamNo);//当前b号 + //从ERP视图中查询下级B号 String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbSodelreczg.getPrtno(),mesRbSodelreczg.getFirseq()); yieldOrder.setRoamNoNext(roamNoNext);//下级b号 } yieldOrderList.add(yieldOrder); }); + //调用通用保存方法,保存生产订单 this.saveOrder(yieldOrderList); } /** * 同步配套工单 */ @Override + @Transactional(rollbackFor = Exception.class) public void synSupportingFacilities() { + //用字典的code查更新日期 String selectTime=apsOrderClient.getSelectTime("SYCN_TRANSFERPK_TIME"); + //从ERP视图查询最大日期 String dateMax=erpMesRbPkService.getNewlevdateMax(selectTime); apsOrderClient.upByDateMax(dateMax,"SYCN_TRANSFERPK_TIME"); List mesRbPkList=erpMesRbPkService.getMesRbPkList(dateMax); @@ -485,7 +526,7 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { yieldOrder.setUseDeptCode(mesRbPk.getPrtudeptcode()); yieldOrder.setPkUsername(mesRbPk.getNewlevname()); yieldOrder.setPkDate(mesRbPk.getNewlevdate()); - yieldOrder.setYieldType(12001); + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode()); yieldOrder.setRoamNoNext( ""); if(StringUtils.isNotEmpty(mesRbPk.getFirseq())){ String roamNoNext=mesRbPartoplinkService.getRoamNoNext(mesRbPk.getPrtno(),mesRbPk.getFirseq()); @@ -495,21 +536,14 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService { }); this.saveOrder(yieldOrderList); } - private void saveOrder(List yieldOrderList){ - yieldOrderList.forEach(order -> { - Long vCount=0L;//apsOrderClient.getCount(transfer.getYoCode(),transfer.getCardNo(),transfer.getBatchNo(),transfer.getWorkRoam()); - if(vCount>0) { - /* - v_excnote := '零件号【' || v_part_code || '】,批号【' || v_batch_no || '】工单已转交,请勿重复转交!!'; - v_excflag := '0'; - RETURN; - */ - } - List dsPartList=apsOrderClient.getDsCraftListByCode(order.getPartCode()); - if(dsPartList!=null&&dsPartList.size()>0){ - } - }); - apsOrderClient.saveOrderList(yieldOrderList); + /** + * 生产订单通用保存方法 + * + * @param yieldOrderList + */ + private void saveOrder(List yieldOrderList) { + apsOrderClient.saveOrder(yieldOrderList); +// apsOrderClient.saveOrderList(yieldOrderList); } } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/StRealtimeStockClientImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/StRealtimeStockClientImpl.java index 853e3ca8..68220b10 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/StRealtimeStockClientImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/feign/StRealtimeStockClientImpl.java @@ -12,12 +12,15 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.wms.pojo.entity.StGoods; +import org.springblade.wms.pojo.entity.StRealtimeStock; +import org.springblade.wms.pojo.vo.StGoodStatisVO; import org.springblade.wms.pojo.vo.StRealtimeStockVO; import org.springblade.wms.service.IStGoodsNewService; import org.springblade.wms.service.IStRealtimeStockService; import org.springframework.web.bind.annotation.RestController; import java.util.Date; +import java.util.List; /** @@ -71,4 +74,19 @@ public class StRealtimeStockClientImpl implements StRealtimeStockClient { return R.data(detail); } + @Override + public List getRealtimeStockByGood(String goodCode) { + return stRealtimeStockService.getGoodsByPartCode(goodCode); + } + + @Override + public StGoodStatisVO countQuantityAndOccupyQuantity(String goodCode) { + return stRealtimeStockService.getGoodsByCode(goodCode); + } + + @Override + public R saveOrUpdateBatch(List stockList) { + return this.saveOrUpdateBatch(stockList); + } + } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStRealtimeStockService.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStRealtimeStockService.java index 5403c78e..3e18e768 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStRealtimeStockService.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStRealtimeStockService.java @@ -99,12 +99,14 @@ public interface IStRealtimeStockService extends BaseService { * @param partCode * @return */ -// List getGoodsByPartCode(String partCode); -// /** -// * 根据物料编码统计信息 -// * @param partCode -// * @return -// */ -// StGoodStatisVO getGoodsByCode(String partCode); + List getGoodsByPartCode(String partCode); + + /** + * 根据物料编码统计信息 + * + * @param partCode + * @return + */ + StGoodStatisVO getGoodsByCode(String partCode); } diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java index b1437a19..40678aa5 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java @@ -912,6 +912,16 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl getGoodsByPartCode(String partCode) { + return baseMapper.getGoodsByPartCode(partCode); + } + + @Override + public StGoodStatisVO getGoodsByCode(String partCode) { + return baseMapper.getGoodsByCode(partCode); + } + private String generateBarcodeAsBase64(String content, int width, int height) { try { // 1. 创建条形码(Code128 类型)