pangyang 3 weeks ago
commit b35a769cc1
  1. 8
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 14
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCloseProdPlanProcessor.java
  3. 8
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynCraftProcessor.java
  4. 8
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynGlassCakeProcessor.java
  5. 10
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynMesRbWoProcessor.java
  6. 8
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynOutsourcingProcessor.java
  7. 8
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseLOTTJProcessor.java
  8. 10
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynPurchaseProcessor.java
  9. 8
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSinterProcessor.java
  10. 8
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynSupportingFacilitiesProcessor.java
  11. 8
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynTemporaryProcessor.java
  12. 7
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/enums/DsCraftEnum.java
  13. 12
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/LocationVO.java
  14. 20
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/vo/StationVO.java
  15. 20
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IApsOrderClient.java
  16. 31
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClient.java
  17. 19
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/feign/StRealtimeStockClientFallback.java
  18. 48
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/LocationController.java
  19. 34
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/StationController.java
  20. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/LocationMapper.java
  21. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/LocationMapper.xml
  22. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.java
  23. 20
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.xml
  24. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ILocationService.java
  25. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java
  26. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/LocationServiceImpl.java
  27. 31
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StationServiceImpl.java
  28. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/ApsOrderClient.java
  29. 19
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  30. 76
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  31. 186
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java
  32. 22
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java
  33. 4
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.java
  34. 15
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpMesRbWoMapper.xml
  35. 128
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java
  36. 18
      blade-service/blade-wms/src/main/java/org/springblade/wms/feign/StRealtimeStockClientImpl.java
  37. 16
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStRealtimeStockService.java
  38. 10
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java

@ -12,9 +12,9 @@ public interface LauncherConstant {
/**
* nacos 命名空间
*/
// String NACOS_NAMESPACE = "feaf627f-a847-463b-8b73-24a0538f526e";
String NACOS_NAMESPACE = "feaf627f-a847-463b-8b73-24a0538f526e";
// 生产环境
String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401";
// String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401";
// 测试环境
// String NACOS_NAMESPACE = "6cdd0310-0d61-4f54-891a-7fb06224d9b8";
@ -31,8 +31,8 @@ public interface LauncherConstant {
/**
* nacos dev 地址
*/
String NACOS_DEV_ADDR = "192.168.249.27:8848";
// String NACOS_DEV_ADDR = "127.0.0.1:8848";
// String NACOS_DEV_ADDR = "192.168.249.27:8848";
String NACOS_DEV_ADDR = "127.0.0.1:8848";
/**R
* nacos prod 地址

@ -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<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synCloseProdPlan());
log.info("同步关闭生产计划定时任务结束");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(() -> mesRbWoClient.synCloseProdPlan());
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步关闭生产计划定时任务失败", exception);
} else {
log.info("同步关闭生产计划定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -21,7 +21,13 @@ public class SynCraftProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步正式工艺订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synCraft());
log.info("同步正式工艺订单定时任务结束");
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步正式工艺订单定时任务失败", exception);
} else {
log.info("同步正式工艺订单定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -22,7 +22,13 @@ public class SynGlassCakeProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步玻璃饼订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> orderClient.synGlassCake());
log.info("同步玻璃饼订单定时任务结束");
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步玻璃饼订单定时任务失败", exception);
} else {
log.info("同步玻璃饼订单定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -19,9 +19,15 @@ public class SynMesRbWoProcessor implements BasicProcessor {
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步生产订单定时任务开始");
log.info("同步生产计划定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synMesRbWo());
log.info("同步生产订单定时任务结束");
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步生产计划定时任务失败", exception);
} else {
log.info("同步生产计划定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -21,7 +21,13 @@ public class SynOutsourcingProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步外协订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synOutsourcing());
log.info("同步外协订单定时任务结束");
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步外协订单定时任务失败", exception);
} else {
log.info("同步外协订单定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -21,7 +21,13 @@ public class SynPurchaseLOTTJProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步采购LOTTJ订单定时任务开始");
CompletableFuture<Void> 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);
}
}

@ -19,9 +19,15 @@ public class SynPurchaseProcessor implements BasicProcessor {
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步采购订单定时任务开始");
log.info("同步物资转车间协作加工订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synPurchase());
log.info("同步采购订单定时任务结束");
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步物资转车间协作加工订单定时任务失败", exception);
} else {
log.info("同步物资转车间协作加工订单定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -21,7 +21,13 @@ public class SynSinterProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步烧结订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synSinter());
log.info("同步烧结订单定时任务结束");
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步烧结订单定时任务失败", exception);
} else {
log.info("同步烧结订单定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -21,7 +21,13 @@ public class SynSupportingFacilitiesProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步配套订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synSupportingFacilities());
log.info("同步配套订单定时任务结束");
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步配套订单定时任务失败", exception);
} else {
log.info("同步配套订单定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -21,7 +21,13 @@ public class SynTemporaryProcessor implements BasicProcessor {
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步临时订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synTemporary());
log.info("同步临时订单定时任务结束");
runFuture.whenComplete((result, exception) -> {
if (exception != null) {
log.error("同步临时订单定时任务失败", exception);
} else {
log.info("同步临时订单定时任务结束");
}
});
return new ProcessResult(true);
}
}

@ -30,10 +30,11 @@ public enum DsCraftEnum {
/**
* 工艺级别; 11001一级11002:二级11003三级
* 工艺级别 工艺对应 20260327
*/
RANK_ONE("一级", 11001),
RANK_TWO("二级", 11002),
RANK_THREE("三级", 11003),
RANK_ONE("一级", 1),
RANK_TWO("二级", 2),
RANK_THREE("三级", 3),
/**
* 优先级

@ -0,0 +1,12 @@
package org.springblade.desk.logistics.pojo.vo;
import lombok.Data;
import org.springblade.desk.logistics.pojo.entity.Location;
/**
* @author: liweidong
* @create: 2026-03-27
*/
@Data
public class LocationVO extends Location {
}

@ -0,0 +1,20 @@
package org.springblade.desk.logistics.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.desk.logistics.pojo.entity.Station;
/**
* @author: liweidong
* @create: 2026-03-27
*/
@Data
public class StationVO extends Station {
/**
* 作业中心名称
*/
@Schema(description = "作业中心名称")
private String wcName;
}

@ -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<DsCraftEntity> getDsCraftList();
@GetMapping(GET_PLAN_LIST)
List<YieldPlan> getPlanList();
@GetMapping(GET_PART_LIST_BY_PARAM)
List<DsPartEntity> getPartListByParam(List<String> partCodeList);
@GetMapping(GET_PART_LIST)
List<DsPartEntity> getPartList(List<String> partCodeList);
List<DsPartEntity> getPartList();
@GetMapping(UPDATE_BY_ID)
void updateById(YieldPlan yieldPlan);
@GetMapping(CLOSE_PLAN_LIST)
@ -65,4 +71,16 @@ public interface IApsOrderClient {
void saveOrderList(List<YieldOrder> 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<YieldOrder> yieldOrderList);
}

@ -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<StGoods> getById(@RequestBody StGoods stGoods);
/**
* 查询指定物料的可用库存记录
*
* @param goodCode
* @return
*/
@GetMapping(GET_REALTIME_STOCK_BY_GOOD)
List<StRealtimeStock> 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<StRealtimeStock> stockList);
}

@ -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<StRealtimeStock> getRealtimeStockByGood(String goodCode) {
return List.of();
}
@Override
public StGoodStatisVO countQuantityAndOccupyQuantity(String goodCode) {
return null;
}
@Override
public R saveOrUpdateBatch(List<StRealtimeStock> stockList) {
return R.fail("更新失败");
}
}

@ -0,0 +1,48 @@
package org.springblade.desk.logistics.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.checkerframework.checker.units.qual.A;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.desk.logistics.pojo.vo.LocationVO;
import org.springblade.desk.logistics.pojo.vo.StationVO;
import org.springblade.desk.logistics.service.ILocationService;
import org.springblade.desk.logistics.service.IOrderBoxService;
import org.springblade.desk.logistics.service.IStationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@AllArgsConstructor
@RequestMapping("/location")
@Tag(name = "库位", description = "库位相关接口")
public class LocationController {
@Autowired
ILocationService locationService;
/**
* 获取库位列表
*/
@GetMapping("/getLocationList")
@ApiOperationSupport(order = 1)
@Operation(summary = "分页", description = "获取站点列表")
public R<IPage<LocationVO>> getLocationList(LocationVO locationVO, Query query) {
IPage<LocationVO> pages = locationService.getLocationList(Condition.getPage(query), locationVO);
return R.data(pages);
}
}

@ -1,16 +1,25 @@
package org.springblade.desk.logistics.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import oracle.jdbc.proxy.annotation.Post;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.desk.dashboard.pojo.vo.DsTaskingVO;
import org.springblade.desk.logistics.pojo.entity.Station;
import org.springblade.desk.logistics.pojo.vo.StationVO;
import org.springblade.desk.logistics.service.IOrderBoxService;
import org.springblade.desk.logistics.service.IStationService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.pojo.vo.YieldOrderVo;
import org.springblade.desk.order.wrapper.YieldOrderWrapper;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
@RestController
@AllArgsConstructor
@ -37,4 +46,21 @@ public class StationController {
public R getStationNameBoxBarcode(@RequestParam String stationCode) {
return iOrderBoxService.getStationNameBoxBarcode(stationCode);
}
/**
* 获取站点列表
*/
@GetMapping("/getStationList")
@ApiOperationSupport(order = 1)
@Operation(summary = "分页", description = "获取站点列表")
public R<IPage<StationVO>> getStationList(StationVO station, Query query) {
IPage<StationVO> pages = stationService.getStationList(Condition.getPage(query), station);
return R.data(pages);
}
}

@ -1,9 +1,11 @@
package org.springblade.desk.logistics.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.pojo.entity.OrderBind;
import org.springblade.desk.logistics.pojo.vo.LocationVO;
import java.util.List;
@ -15,4 +17,6 @@ public interface LocationMapper extends BaseMapper<Location> {
List<Location> selectByStatus(@Param("status") Integer status);
Location selectByLocationCode(@Param("locationCode") String locationCode, @Param("status")int status);
List<LocationVO> selectLocationList(IPage<LocationVO> page,@Param("location") LocationVO locationVO);
}

@ -17,4 +17,14 @@
select id, location_name, location_code, location_status, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark
from LM_LOCATION where IS_DELETED = 0 and status = #{status} and LOCATION_CODE = #{locationCode};
</select>
<select id="selectLocationList" resultType="org.springblade.desk.logistics.pojo.vo.LocationVO">
select id, location_name, location_code, location_status, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark
from LM_LOCATION where IS_DELETED = 0
<if test="location.locationCode != null and location.locationCode !=''">
and LOCATION_CODE = #{location.locationCode}
</if>
<if test="location.locationStatus != null and location.locationStatus !=''">
and LOCATION_STATUS = #{location.locationStatus}
</if>
</select>
</mapper>

@ -1,9 +1,12 @@
package org.springblade.desk.logistics.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.dashboard.pojo.vo.DsTaskingVO;
import org.springblade.desk.logistics.pojo.entity.OrderBind;
import org.springblade.desk.logistics.pojo.entity.Station;
import org.springblade.desk.logistics.pojo.vo.StationVO;
import java.util.List;
@ -12,4 +15,6 @@ public interface StationMapper extends BaseMapper<Station> {
List<Station> selectByWcId(@Param("wcId") Long wcId);
Station selectByStationCode(@Param("StationCode") String StationCode);
List<StationVO> selectStationList(IPage<StationVO> page, @Param("station") Station station);
}

@ -14,4 +14,24 @@
select id, station_name, station_code, station_status, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark, station_position, wc_id
from LM_STATION where IS_DELETED = 0 and STATION_CODE = #{StationCode}
</select>
<select id="selectStationList" resultType="org.springblade.desk.logistics.pojo.vo.StationVO">
select id, station_name, station_code, station_status, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark, station_position, wc_id
from LM_STATION where IS_DELETED = 0
<if test="station.stationName != null and station.stationName != ''">
and STATION_NAME = #{station.stationName}
</if>
<if test="station.stationCode != null and station.stationCode != ''">
and STATION_CODE = #{station.stationCode}
</if>
<if test="station.stationStatus != null and station.stationStatus != ''">
and STATION_STATUS = #{station.stationStatus}
</if>
<if test="station.stationPosition != null and station.stationPosition != ''">
and STATION_POSITION = #{station.stationPosition}
</if>
<if test="station.wcId != null and station.wcId != ''">
and WC_ID = #{station.wcId}
</if>
</select>
</mapper>

@ -25,9 +25,11 @@
*/
package org.springblade.desk.logistics.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.pojo.entity.WeighData;
import org.springblade.desk.logistics.pojo.vo.LocationVO;
import java.math.BigDecimal;
import java.util.List;
@ -60,4 +62,12 @@ public interface ILocationService extends BaseService<Location> {
* @return
*/
Location selectByLocationCode(String locationCode, int status);
/**
* 获取库位
* @param page
* @param locationVO
* @return
*/
IPage<LocationVO> getLocationList(IPage<LocationVO> page, LocationVO locationVO);
}

@ -25,10 +25,13 @@
*/
package org.springblade.desk.logistics.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.core.tool.api.R;
import org.springblade.desk.dashboard.pojo.vo.DsTaskingVO;
import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.pojo.entity.Station;
import org.springblade.desk.logistics.pojo.vo.StationVO;
import java.util.List;
@ -56,5 +59,11 @@ public interface IStationService extends BaseService<Station> {
R getStationName(String stationCode);
/**
* 站点列表
* @param page
* @param station
* @return
*/
IPage<StationVO> getStationList(IPage<StationVO> page, Station station);
}

@ -25,11 +25,14 @@
*/
package org.springblade.desk.logistics.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.logistics.mapper.LocationMapper;
import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.pojo.vo.LocationVO;
import org.springblade.desk.logistics.pojo.vo.StationVO;
import org.springblade.desk.logistics.service.ILocationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -64,4 +67,11 @@ public class LocationServiceImpl extends BaseServiceImpl<LocationMapper, Locatio
public Location selectByLocationCode(String locationCode, int status) {
return baseMapper.selectByLocationCode(locationCode,status);
}
@Override
public IPage<LocationVO> getLocationList(IPage<LocationVO> page, LocationVO locationVO) {
List<LocationVO> locationList = baseMapper.selectLocationList(page, locationVO);
return page.setRecords(locationList);
}
}

@ -26,14 +26,21 @@
package org.springblade.desk.logistics.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.service.IWorkCenterService;
import org.springblade.desk.dashboard.pojo.vo.DsTaskingVO;
import org.springblade.desk.logistics.mapper.StationMapper;
import org.springblade.desk.logistics.pojo.entity.Station;
import org.springblade.desk.logistics.pojo.vo.StationVO;
import org.springblade.desk.logistics.service.IStationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
@ -48,6 +55,8 @@ import java.util.List;
public class StationServiceImpl extends BaseServiceImpl<StationMapper, Station> implements IStationService {
@Autowired
IWorkCenterService workCenterService;
@Override
public List<Station> selectByWcId(Long wcId) {
@ -70,4 +79,26 @@ public class StationServiceImpl extends BaseServiceImpl<StationMapper, Station>
}
return R.data(list.get(0));
}
@Override
public IPage<StationVO> getStationList(IPage<StationVO> page, Station station) {
List<StationVO> stationList = baseMapper.selectStationList(page, station);
if(CollectionUtils.isEmpty(stationList)){
return page.setRecords(stationList);
}
for (StationVO stationVO : stationList) {
if(null != stationVO && null != stationVO.getWcId()){
WorkCenter workCenter = workCenterService.getById(stationVO.getWcId());
if(null != workCenter && !StringUtils.isEmpty(workCenter.getWcName())){
stationVO.setWcName(workCenter.getWcName());
}
}
}
return page.setRecords(stationList);
}
}

@ -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<DsPartEntity> getPartList(List<String> partCodeList) {
public List<DsPartEntity> getPartList() {
return dsPartService.list();
}
@Override
public List<DsPartEntity> getPartListByParam(List<String> partCodeList) {
return dsPartService.list(new QueryWrapper<DsPartEntity>().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<DsPartEntity>()
.eq(DsPartEntity::getPartCode, code));
}
@Override
public void saveOrder(List<YieldOrder> yieldOrderList) {
yieldOrderService.saveOrder(yieldOrderList);
}
// @Override
// public Long getCount(String yoCode, String cardNo, String batchNo, String roamNo) {
// return yieldOrderService.getCount(yoCode,cardNo,batchNo,roamNo);
// }
}

@ -258,4 +258,23 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
* @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<YieldOrder> yieldOrderList);
}

@ -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 BaseServiceImpl<YieldOrderMapper, Yie
private final IDsProcessService dsProcessService;
private final WorkOrderMapper workOrderMapper;
private final YieldPlanMapper yieldPlanMapper;
private final IErpYieldOrderClient yieldOrderClient;
@Value("${business.oldMes.url}")
@ -815,6 +821,14 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
po.getYpCode(), po.getYpQty(), dsPartSub.getPartCode(), dsPartSub.getQuota());
}
@Override
public Long getCount(String yoCode, String cardNo, String batchNo, String roamNo) {
return this.count(Wrappers.<YieldOrder>lambdaQuery().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<YieldOrderMapper, Yie
return R.data(list.get(0));
}
@Override
public void saveOrder(List<YieldOrder> 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<DsPartEntity> dsPartList = dsPartService.list(new QueryWrapper<DsPartEntity>().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);
}
/**
* 验证零件子件信息
*

@ -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<YieldPlanMapper, Yield
private final IDsPartService dsPartService;
//private final IStRealtimeStockService stRealtimeStockService;
private final StRealtimeStockClient stRealtimeStockClient;
@Override
public IPage<YieldPlan> selectPageElectroplate(IPage<YieldPlan> page, YieldPlan entity) {
@ -159,109 +167,109 @@ public class YieldPlanServiceImpl extends BaseServiceImpl<YieldPlanMapper, Yield
* 同步玻璃饼
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void synGlassCake() {
//查询未生成玻璃饼订单的烧结主制计划列表
List<YieldPlan> yieldPlanList=baseMapper.selectList(new QueryWrapper<YieldPlan>().lambda()
.eq(YieldPlan::getIsDeleted, 0).eq(YieldPlan::getPlanType, 12002)
.eq(YieldPlan::getGenerateGlassCake, 0));;
List<String> partCodeList=yieldPlanList.stream().map(x->x.getPartCode()).toList();
//b1. 查询该计划的零件是否是玻璃相关的零件列表(sub_cursor)
//查询该计划的零件是否是玻璃相关的零件列表(sub_cursor)
List<DsPartEntity> dsPartList=dsPartService.list(new QueryWrapper<DsPartEntity>().lambda()
.in(DsPartEntity::getPartCode, partCodeList)
.like(DsPartEntity::getPartName, "玻璃"));// 获取零件信息
List<String> partList=dsPartList.stream().map(x->x.getPartCode()).toList();
Map<String, List<DsPartEntity>> partMap = dsPartList.stream()
.collect(Collectors.groupingBy(DsPartEntity::getPartCode));
List<YieldOrder> yieldOrderList = new ArrayList<>();
List<StRealtimeStock> 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<YieldOrder> yieldOrderList=yieldOrderService.list(new QueryWrapper<YieldOrder>()
.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<DsPartEntity>().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<DsPartEntity> 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<StRealtimeStock> stRealtimeStockList = stRealtimeStockClient.getRealtimeStockByGood(dsPartEntity.getPartCode());
//汇总指定物料的总库存、总已占用库存
StGoodStatisVO stGoodStatisVO = stRealtimeStockClient.countQuantityAndOccupyQuantity(dsPartEntity.getPartCode());
//计算子件需要占用的总数量
AtomicReference<Double> subPorqty = new AtomicReference<>(yieldPlan.getYpQty().doubleValue());
//判断库存是否满足需求并逐行占用
if (null == stGoodStatisVO || CollUtil.isEmpty(stRealtimeStockList)) {
return;
}
//保存订单
yieldOrderService.saveOrUpdate(yieldOrder);
}
// dsPartList.forEach(dsPart -> {
// List<StRealtimeStock> 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);
});
}

@ -1543,16 +1543,22 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if ("1".equals(frontWorkPlan.getOem()) && "1".equals(workPlan.getOem())) {
return;
}
List<PlateAround> pa = plateAroundMapper.selectList(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getPaType, PlateAround.BEFORE_PLAN_OUT).eq(PlateAround::getWpId, workPlan.getId()));
if (CollectionUtils.isEmpty(pa)) {
if ("1".equals(frontWorkPlan.getOem())) {
//上序外协,本序如果可以接收,验证镀前出库记录
throw new ServiceException("工序加工单位不同,未找到镀前出库记录,无法接收!");
} else if (!frontWorkPlan.getMakeTeam().equals(workPlan.getMakeTeam())) {
//加工班组不同,验证镀前出库记录
throw new ServiceException("工序加工单位不同,未找到镀前出库记录,无法接收!");
List<PlateAround> pa = plateAroundMapper.selectList(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getPaType, PlateAround.BEFORE_PLAT_IN).eq(PlateAround::getWpId, frontWorkPlan.getId()));
if (CollectionUtils.isNotEmpty(pa)) {
List<PlateAround> pa2 = plateAroundMapper.selectList(Wrappers.lambdaQuery(PlateAround.class).eq(PlateAround::getPaType, PlateAround.BEFORE_PLAN_OUT).eq(PlateAround::getWpId, frontWorkPlan.getId()));
if (CollectionUtils.isEmpty(pa2)) {
throw new ServiceException("上序未查询到镀前出库记录,无法接收!");
}
}
// if (CollectionUtils.isEmpty(pa)) {
// if ("1".equals(frontWorkPlan.getOem())) {
// //上序外协,本序如果可以接收,验证镀前出库记录
// throw new ServiceException("工序加工单位不同,未找到镀前出库记录,无法接收!");
// } else if (!frontWorkPlan.getMakeTeam().equals(workPlan.getMakeTeam())) {
// //加工班组不同,验证镀前出库记录
// throw new ServiceException("工序加工单位不同,未找到镀前出库记录,无法接收!");
// }
// }
}
private void workPlanStart(WorkPlan workPlan, Date startDate, Long userId, WorkOrder workOrder) {

@ -17,5 +17,7 @@ public interface ErpMesRbWoMapper extends Mapper {
*
* @return
*/
List<MesRbWo> getYieldPlanErpList();
List<MesRbWo> getYieldPlanErpList(String newlevdateMax);
String getNewlevdateMax(String selectTime);
}

@ -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
<where>
a.wopordat <![CDATA[ >= ]]> to_date(#{newlevdateMax},'YYYY-MM-DD HH24:MI:SS')
</where>
WHERE rownum <![CDATA[ <= ]]> 2000
</select>
<select id="getNewlevdateMax" resultType="java.lang.String">
SELECT nvl(max(a.wopordat), selectTime)
as newlevdateMax
FROM dba_mgr.v_mes_rb_wo a
<where>
a.is_deleted = 0
AND a.wopordat <![CDATA[ >= ]]> to_date(#{selectTime},'YYYY-MM-DD HH24:MI:SS')
</where>
ORDER BY a.wopordat DESC;
</select>
</mapper>

@ -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<MesRbWo> getList(MesRbWo entity) {
return mesRbWoMapper.getYieldPlanErpList();
return mesRbWoMapper.getYieldPlanErpList(entity.getWoreqdat());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void synMesRbWo() {
List<MesRbWo> mesRbWoList=mesRbWoMapper.getYieldPlanErpList();
//用字典的code查更新日期
String selectTime = apsOrderClient.getSelectTime("SYCN_MESRBWO_TIME");
//从ERP视图查询最大日期
String newlevdateMax = mesRbWoMapper.getNewlevdateMax(selectTime);
apsOrderClient.upByDateMax(newlevdateMax, "SYCN_MESRBWO_TIME");
List<MesRbWo> 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<DsPartEntity> dsPartList=new ArrayList<>();//todo 获取零件信息
List<String> partCodeList=dsPartList.stream().map(x->x.getPartCode()).toList();
List<DsPartEntity> dsPartList = apsOrderClient.getPartList();
Map<String, DsPartEntity> partMap = dsPartList.stream().collect(Collectors.toMap(DsPartEntity::getPartCode, v -> v));
List<YieldPlan> yieldPlanList=new ArrayList<>();
//若零件不为空, 验证零件是否存在二级零件工艺
List<DsCraftEntity> dsCraftList= apsOrderClient.getDsCraftList();
List<Long> partIdList=dsCraftList.stream().map(x->x.getPartId()).toList();
List<Long> partIdList = dsCraftList.stream().map(x -> x.getPartId()).toList();
final Long[] partId = {0L};
List<Rrbwoerptomes> 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<YieldPlan> 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<MesRbPurtoso> purtosoList=mesRbPurtosoService.getMesRbPurtosoList(newlevdateMax);
@ -217,9 +229,10 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPkUsername(mesRbPurtoso.getNewlevname());
yieldOrder.setPkDate(mesRbPurtoso.getNewlevdate());
List<DsPartEntity> 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<MesRbPacturnrecord> 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<MesRbSjso> 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<MesRbWxpromotion> wxpromotionList=mesRbWxpromotionService.getMesRbWxpromotionList(dateMax);
@ -345,9 +369,9 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPkUsername(mesRbWxpromotion.getNewlevname());
yieldOrder.setPkDate(mesRbWxpromotion.getNewlevdate());
List<DsPartEntity> 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<MesRbSodelrecwx> mesRbSodelrecwxList=erpMesRbSodelrecwxService.getMesRbSodelrecwxList(dateMax);
@ -391,9 +418,9 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
yieldOrder.setPkUsername(mesRbSodelrecwx.getNewlevname());
yieldOrder.setPkDate(mesRbSodelrecwx.getNewlevdate());
List<DsPartEntity> 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<MesRbSodelreczg> mesRbSodelreczgList=erpMesRbSodelreczgService.getMesRbSodelreczgList(dateMax);
List<YieldOrder> 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<DsPartEntity> 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<MesRbPk> 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<YieldOrder> 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<DsPartEntity> dsPartList=apsOrderClient.getDsCraftListByCode(order.getPartCode());
if(dsPartList!=null&&dsPartList.size()>0){
}
});
apsOrderClient.saveOrderList(yieldOrderList);
/**
* 生产订单通用保存方法
*
* @param yieldOrderList
*/
private void saveOrder(List<YieldOrder> yieldOrderList) {
apsOrderClient.saveOrder(yieldOrderList);
// apsOrderClient.saveOrderList(yieldOrderList);
}
}

@ -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<StRealtimeStock> getRealtimeStockByGood(String goodCode) {
return stRealtimeStockService.getGoodsByPartCode(goodCode);
}
@Override
public StGoodStatisVO countQuantityAndOccupyQuantity(String goodCode) {
return stRealtimeStockService.getGoodsByCode(goodCode);
}
@Override
public R saveOrUpdateBatch(List<StRealtimeStock> stockList) {
return this.saveOrUpdateBatch(stockList);
}
}

@ -99,12 +99,14 @@ public interface IStRealtimeStockService extends BaseService<StRealtimeStock> {
* @param partCode
* @return
*/
// List<StRealtimeStock> getGoodsByPartCode(String partCode);
// /**
// * 根据物料编码统计信息
// * @param partCode
// * @return
// */
// StGoodStatisVO getGoodsByCode(String partCode);
List<StRealtimeStock> getGoodsByPartCode(String partCode);
/**
* 根据物料编码统计信息
*
* @param partCode
* @return
*/
StGoodStatisVO getGoodsByCode(String partCode);
}

@ -912,6 +912,16 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl<StRealtimeStockM
return resultMap;
}
@Override
public List<StRealtimeStock> 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 类型)

Loading…
Cancel
Save