diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java index 1079092c..4d4adc0e 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java @@ -378,6 +378,9 @@ public interface ErrorCodeConstants { ErrorCode PURCHASE_CLOSED_NOT_EXISTS = new ErrorCode(1_000_063_001, "采购订单已关闭"); ErrorCode PURCHASE_MAIN_CANNOT_CLOSE = new ErrorCode(1_000_073_004, "采购订单状态不支持关闭"); ErrorCode PURCHASE_MAIN_EXISTS = new ErrorCode(1_000_073_004, "采购订单存在要货计划任务单"); + ErrorCode PURCHASE_MAIN_Have = new ErrorCode(1_000_073_004, "已经生成了要货计划,不可以下架"); + ErrorCode PURCHASE_MAIN_NUMBERNO = new ErrorCode(1_000_073_004, "查未找到发布状态下的采购订单"); + //采购订单子ErrorCode ErrorCode PURCHASE_DETAIL_NOT_EXISTS = new ErrorCode(1_000_063_001, "采购订单子不存在"); ErrorCode PURCHASE_DETAIL_ARGUMENT_NOT_EXISTS = new ErrorCode(1_000_063_002, "采购订单明细:订单号ppo_number、订单行pline_number、零件号pitem_code无效"); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchase/PurchaseMainController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchase/PurchaseMainController.java index 36f40d4e..e4c46a0e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchase/PurchaseMainController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchase/PurchaseMainController.java @@ -162,8 +162,8 @@ public class PurchaseMainController { return success(returnMap); } - @PutMapping("/close") - @Operation(summary = "关闭采购订单申请主") + @PostMapping("/close") + @Operation(summary = "关闭采购订单主") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('wms:purchase-main:close')") public CommonResult closePurchaseMain(@RequestParam("id") Long id) { @@ -171,4 +171,31 @@ public class PurchaseMainController { return success(count > 0); } + @PostMapping("/open") + @Operation(summary = "打开采购订单主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:purchase-main:open')") + public CommonResult openPurchaseMain(@RequestParam("id") Long id) { + Integer count = purchaseMainService.openPurchaseMain(id); + return success(count > 0); + } + + @PostMapping("/publish") + @Operation(summary = "发布采购订单主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:purchase-main:publish')") + public CommonResult publishPurchaseMain(@RequestParam("id") Long id) { + Integer count = purchaseMainService.publishPurchaseMain(id); + return success(count > 0); + } + + @PostMapping("/wit") + @Operation(summary = "下架采购订单主") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:purchase-main:wit')") + public CommonResult witPurchaseMain(@RequestParam("id") Long id) { + Integer count = purchaseMainService.witPurchaseMain(id); + return success(count > 0); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainBaseVO.java index 1cbd14cc..f9ea9912 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainBaseVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainBaseVO.java @@ -1,15 +1,12 @@ package com.win.module.wms.controller.purchasePlan.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import javax.validation.constraints.*; +import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; /** @@ -55,12 +52,10 @@ public class PurchasePlanMainBaseVO { private String creator; @Schema(description = "开始时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime beginTime; + private String beginTime; @Schema(description = "结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime endTime; + private String endTime; @Schema(description = "状态") private String status; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExcelVO.java index ab774303..9cbcd303 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExcelVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExcelVO.java @@ -1,16 +1,11 @@ package com.win.module.wms.controller.purchasePlan.vo; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; - import com.alibaba.excel.annotation.ExcelProperty; import com.win.framework.excel.core.annotations.DictFormat; import com.win.framework.excel.core.convert.DictConvert; +import lombok.Data; + +import java.time.LocalDateTime; /** @@ -49,10 +44,10 @@ public class PurchasePlanMainExcelVO { private String creator; @ExcelProperty("开始时间") - private LocalDateTime beginTime; + private String beginTime; @ExcelProperty("结束时间") - private LocalDateTime endTime; + private String endTime; @ExcelProperty(value = "状态", converter = DictConvert.class) @DictFormat("plan_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExportReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExportReqVO.java index d1784a05..e74954a1 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExportReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainExportReqVO.java @@ -1,12 +1,11 @@ package com.win.module.wms.controller.purchasePlan.vo; -import lombok.*; -import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; -import com.win.framework.common.pojo.PageParam; -import java.time.LocalDateTime; +import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @Schema(description = "管理后台 - 要货计划主 Excel 导出 Request VO,参数和 PurchasePlanMainPageReqVO 是一致的") @@ -43,11 +42,11 @@ public class PurchasePlanMainExportReqVO { @Schema(description = "开始时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] beginTime; + private String[] beginTime; @Schema(description = "结束时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] endTime; + private String[] endTime; @Schema(description = "状态") private String status; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainPageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainPageReqVO.java index c6d6bbc3..dafb44a6 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainPageReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchasePlan/vo/PurchasePlanMainPageReqVO.java @@ -1,10 +1,12 @@ package com.win.module.wms.controller.purchasePlan.vo; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.win.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -44,12 +46,10 @@ public class PurchasePlanMainPageReqVO extends PageParam { private String creator; @Schema(description = "开始时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] beginTime; + private String[] beginTime; @Schema(description = "结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] endTime; + private String[] endTime; @Schema(description = "状态") private String status; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/documentSwitch/SwitchDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/documentSwitch/SwitchDO.java index 60380991..4d460592 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/documentSwitch/SwitchDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/documentSwitch/SwitchDO.java @@ -1,9 +1,8 @@ package com.win.module.wms.dal.dataobject.documentSwitch; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; -import java.util.*; -import com.baomidou.mybatisplus.annotation.*; -import com.win.framework.mybatis.core.dataobject.BaseDO; /** * 单据开关 DO @@ -12,12 +11,12 @@ import com.win.framework.mybatis.core.dataobject.BaseDO; */ @TableName("document_switch") @Data -@EqualsAndHashCode(callSuper = true) +//@EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class SwitchDO extends BaseDO { +public class SwitchDO { /** * id @@ -40,5 +39,14 @@ public class SwitchDO extends BaseDO { * 是否可用 */ private String available; + /** + * 是否删除 + */ + private Boolean deleted; + /** + * 租户编号 + */ + private Integer tenantId; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanDetailDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanDetailDO.java index a87ecdd0..4a5a4355 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanDetailDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanDetailDO.java @@ -1,13 +1,12 @@ package com.win.module.wms.dal.dataobject.purchasePlan; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.sun.xml.bind.v2.TODO; +import com.win.framework.mybatis.core.dataobject.BaseDO; import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.math.BigDecimal; + import java.math.BigDecimal; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; -import com.win.framework.mybatis.core.dataobject.BaseDO; /** * 要货计划子 DO @@ -81,4 +80,9 @@ public class PurchasePlanDetailDO extends BaseDO { */ private String available; + /** + * 多租户编号 + */ + private Long tenantId; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanMainDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanMainDO.java index d4ba58c5..345cdd91 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanMainDO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/purchasePlan/PurchasePlanMainDO.java @@ -1,13 +1,11 @@ package com.win.module.wms.dal.dataobject.purchasePlan; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.sun.xml.bind.v2.TODO; import com.win.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; /** * 要货计划主 DO @@ -26,7 +24,7 @@ public class PurchasePlanMainDO extends BaseDO { /** * id */ - @TableId + @TableId(type = IdType.AUTO) private Long id; /** * 供应商代码 @@ -67,11 +65,11 @@ public class PurchasePlanMainDO extends BaseDO { /** * 开始时间 */ - private LocalDateTime beginTime; + private String beginTime; /** * 结束时间 */ - private LocalDateTime endTime; + private String endTime; /** * 状态 * diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/enums/plan/PurchasePlanStatusEnum.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/enums/plan/PurchasePlanStatusEnum.java new file mode 100644 index 00000000..28a2334a --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/enums/plan/PurchasePlanStatusEnum.java @@ -0,0 +1,63 @@ +package com.win.module.wms.enums.plan; + +import java.util.stream.Stream; + +public enum PurchasePlanStatusEnum { + + NEW("1", "新增"), + CLOSED("2", "关闭"), + PUBLISHED("3", "发布"), + ACCEPTED("4", "接收"), + REJECTED("5", "不接收"), + COMPLETED("6", "完成"), + ; + private final String code; + private String name; + + PurchasePlanStatusEnum(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return this.code; + } + + public String getName() { + return this.name; + } + + /** + * 用状态值获取枚举 + * + * @param code + * @return + */ + static PurchasePlanStatusEnum getPlanStatusEnum(String code) { + for (PurchasePlanStatusEnum planStatusEnum : values()) { + if (planStatusEnum.getCode().equals(code)) { + return planStatusEnum; + } + } + return NEW; + } + + public static PurchasePlanStatusEnum convertCode(String code) { + return Stream.of(values()) + .filter(bean -> bean.code.equals(code)) + .findAny() + .orElse(NEW); + } + + public static PurchasePlanStatusEnum convertName(String name) { + return Stream.of(values()) + .filter(bean -> bean.name.equals(name)) + .findAny() + .orElse(NEW); + } + + public static String[] getStatusNameArray() { + return Stream.of(values()).map(PurchasePlanStatusEnum::getName).toArray(String[]::new); + } + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/documentSwitch/SwitchService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/documentSwitch/SwitchService.java index 01dcd581..a8ba57b5 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/documentSwitch/SwitchService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/documentSwitch/SwitchService.java @@ -1,15 +1,16 @@ package com.win.module.wms.service.documentSwitch; -import java.util.*; -import javax.validation.*; - import com.win.framework.common.pojo.CustomConditions; +import com.win.framework.common.pojo.PageResult; import com.win.module.wms.controller.documentSwitch.vo.SwitchCreateReqVO; import com.win.module.wms.controller.documentSwitch.vo.SwitchExportReqVO; import com.win.module.wms.controller.documentSwitch.vo.SwitchPageReqVO; import com.win.module.wms.controller.documentSwitch.vo.SwitchUpdateReqVO; import com.win.module.wms.dal.dataobject.documentSwitch.SwitchDO; -import com.win.framework.common.pojo.PageResult; + +import javax.validation.Valid; +import java.util.Collection; +import java.util.List; /** * 单据开关 Service 接口 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainService.java index 1b7f634a..c11c065c 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainService.java @@ -7,6 +7,7 @@ import com.win.module.wms.dal.dataobject.purchase.PurchaseDetailDO; import com.win.module.wms.dal.dataobject.purchase.PurchaseMainDO; import javax.validation.Valid; +import java.math.BigDecimal; import java.util.Collection; import java.util.List; @@ -96,9 +97,69 @@ public interface PurchaseMainService { /** * 关闭采购订单申请主 * - * @param id 采采购订单申请主ID + * @param id 采购订单申请主ID * @return 更新数量 */ Integer closePurchaseMain(Long id); + /** + * 打开采购订单申请主 + * + * @param id 采购订单申请主ID + * @return 更新数量 + */ + Integer openPurchaseMain(Long id); + + /** + * 发布采购订单申请主 + * + * @param id 采购订单申请主ID + * @return 更新数量 + */ + Integer publishPurchaseMain(Long id); + + /** + * 下架采购订单申请主 + * + * @param id 采采购订单申请主ID + * @return 更新数量 + */ + Integer witPurchaseMain(Long id); + + + /** + * 更新采购订单已计划数量 + * @param poNumber + * @param poLine + * @param itemCode + * @param planQty + */ + void updateOrderPurchasePlanQty(String poNumber , String poLine, String itemCode, BigDecimal planQty); + + /** + * 更新采购订单表的已收货数量 + * @param poNumber + * @param poLine + * @param itemCode + * @param receivedQty + */ + void updateOrderPurchaseReceivedQty(String poNumber , String poLine, String itemCode, BigDecimal receivedQty); + + /** + * 更新采购订单表的已发货数量 + * @param poNumber + * @param poLine + * @param itemCode + * @param shippedQty + */ + void updateOrderPurchaseShippedQty(String poNumber , String poLine, String itemCode, BigDecimal shippedQty); + + /** + * 更新采购订单表的已退货数量 + * @param poNumber + * @param poLine + * @param itemCode + * @param returnedQty + */ + void updateOrderPurchaseReturnQty(String poNumber , String poLine, String itemCode, BigDecimal returnedQty); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainServiceImpl.java index d0f26d49..a38847cc 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchase/PurchaseMainServiceImpl.java @@ -2,6 +2,8 @@ package com.win.module.wms.service.purchase; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.exceptions.UtilException; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.win.framework.common.enums.CommonStatusEnum; import com.win.framework.common.exception.ServiceException; @@ -11,25 +13,35 @@ import com.win.framework.dict.core.util.DictFrameworkUtils; import com.win.module.infra.api.trends.TrendsApi; import com.win.module.infra.enums.TrendsTypeEnum; import com.win.module.wms.controller.purchase.vo.*; +import com.win.module.wms.controller.rule.vo.RuleRespVO; import com.win.module.wms.convert.purchase.PurchaseDetailConvert; import com.win.module.wms.convert.purchase.PurchaseMainConvert; import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; import com.win.module.wms.dal.dataobject.currencyexchange.CurrencyexchangeDO; +import com.win.module.wms.dal.dataobject.documentSwitch.SwitchDO; import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.itempackaging.ItempackagingDO; import com.win.module.wms.dal.dataobject.purchase.PurchaseDetailDO; import com.win.module.wms.dal.dataobject.purchase.PurchaseMainDO; +import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanDetailDO; +import com.win.module.wms.dal.dataobject.purchasePlan.PurchasePlanMainDO; import com.win.module.wms.dal.dataobject.shift.ShiftDO; import com.win.module.wms.dal.dataobject.stdcostprice.StdcostpriceDO; import com.win.module.wms.dal.dataobject.supplieritem.SupplieritemDO; import com.win.module.wms.dal.mysql.purchase.PurchaseDetailMapper; import com.win.module.wms.dal.mysql.purchase.PurchaseMainMapper; +import com.win.module.wms.dal.mysql.purchasePlan.PurchasePlanDetailMapper; import com.win.module.wms.dal.mysql.purchasePlan.PurchasePlanMainMapper; import com.win.module.wms.enums.DictTypeConstants; +import com.win.module.wms.enums.order.OrderStatusEnum; +import com.win.module.wms.enums.plan.PlanStatusEnum; +import com.win.module.wms.enums.plan.PurchasePlanStatusEnum; import com.win.module.wms.enums.request.RequestStatusState; import com.win.module.wms.service.currencyexchange.CurrencyexchangeService; +import com.win.module.wms.service.documentSwitch.SwitchService; import com.win.module.wms.service.itembasic.ItembasicService; import com.win.module.wms.service.itempackaging.ItempackagingService; +import com.win.module.wms.service.purchasePlan.PurchasePlanMainService; import com.win.module.wms.service.requestsetting.RequestsettingService; import com.win.module.wms.service.rule.RuleService; import com.win.module.wms.service.shift.ShiftService; @@ -87,6 +99,12 @@ public class PurchaseMainServiceImpl implements PurchaseMainService { private TrendsApi trendsApi; @Resource private PurchasePlanMainMapper purchasePlanMainMapper; + @Resource + private SwitchService switchService; + @Resource + private PurchasePlanMainService purchasePlanMainService; + @Resource + private PurchasePlanDetailMapper purchasePlanDetailMapper; @Override @@ -302,7 +320,7 @@ public class PurchaseMainServiceImpl implements PurchaseMainService { } }); //错误不为空并非部分更新,手工回滚 - if(!errorList.isEmpty() && !updatePart) { + if (!errorList.isEmpty() && !updatePart) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return errorList; @@ -314,16 +332,268 @@ public class PurchaseMainServiceImpl implements PurchaseMainService { // 校验存在存在下级单据 PurchaseMainDO mainDO = validatePurchaseMainExists(id); Long count = purchasePlanMainMapper.selectBySonNumber(mainDO.getNumber()); - if(count > 0) { - throw new ServiceException(PURCHASERECEIPT_REQUEST_JOB_EXISTS); + if (count > 0) { + throw new ServiceException(PURCHASE_MAIN_EXISTS); } RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); boolean flag = requestStatusState.close(); - if(!flag) { + if (!flag) { throw new ServiceException(PURCHASE_MAIN_CANNOT_CLOSE); } - mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录 + mainDO.setStatus(OrderStatusEnum.CLOSED.getCode());//增加操作记录 trendsApi.createTrends(id, "plan_purchase_main", "关闭了采购订单申请", TrendsTypeEnum.UPDATE); return purchaseMainMapper.updateById(mainDO); } + + @Override + @Transactional + public Integer openPurchaseMain(Long id) { + // 校验存在存在下级单据 + PurchaseMainDO mainDO = validatePurchaseMainExists(id); + Long count = purchasePlanMainMapper.selectBySonNumber(mainDO.getNumber()); + if (count > 0) { + throw new ServiceException(PURCHASE_MAIN_EXISTS); + } +// RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); +// boolean flag = requestStatusState.close(); +// if(!flag) { +// throw new ServiceException(PURCHASE_MAIN_CANNOT_CLOSE); +// } + mainDO.setStatus(OrderStatusEnum.READY.getCode());//增加操作记录 + trendsApi.createTrends(id, "plan_purchase_main", "打开了采购订单申请", TrendsTypeEnum.UPDATE); + return purchaseMainMapper.updateById(mainDO); + } + + @Override + @Transactional + public Integer publishPurchaseMain(Long id) { + int res = 0; + // 校验存在存在下级单据 + PurchaseMainDO mainDO = validatePurchaseMainExists(id); + Long count = purchasePlanMainMapper.selectBySonNumber(mainDO.getNumber()); + if (count > 0) { + throw new ServiceException(PURCHASE_MAIN_EXISTS); + } + //如果是离散单 + if ("DISCRETE".equals(mainDO.getType())) { + SwitchDO switchDO = switchService.selectSwitchExist("CreatePurchasePlanAfterDiscretePurchaseOrderPublished"); + if (switchDO != null) { + //新增要货计划主表 + PurchasePlanMainDO purchasePlanMainDO = new PurchasePlanMainDO(); + purchasePlanMainDO.setStatus(PurchasePlanStatusEnum.NEW.getCode()); + BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("PurchasePlan"); + if (businesstypeDO != null) { + purchasePlanMainDO.setBusinessType(businesstypeDO.getCode()); + } + purchasePlanMainDO.setNumber(mainDO.getNumber()); + purchasePlanMainDO.setAvailable("TRUE"); + //供应商代码 + purchasePlanMainDO.setSupplierCode(mainDO.getSupplierCode()); + RuleRespVO ruleRespVO = ruleService.deliverGoods(null, mainDO.getSupplierCode(), null); + if (ruleRespVO == null) { + throw new ServiceException(STDCOSTPRICE_SUPPLIER_CODE_NOT_EXISTS); + } else { + JSONObject conditionObject = JSONUtil.parseObj(ruleRespVO.getConfiguration()); + purchasePlanMainDO.setWarehouseCode(String.valueOf(conditionObject.get("WarehouseCode"))); + purchasePlanMainDO.setDockCode(String.valueOf(conditionObject.get("DockCode"))); + purchasePlanMainDO.setBeginTime(String.valueOf(conditionObject.get("BeginTime"))); + purchasePlanMainDO.setEndTime(String.valueOf(conditionObject.get("EndTime"))); + purchasePlanMainDO.setTimeWindow(purchasePlanMainDO.getBeginTime() + "-" + purchasePlanMainDO.getEndTime()); + } + purchasePlanMainMapper.insert(purchasePlanMainDO); + //新增要货计划子表 + QueryWrapper purchaseDetailDOQueryWrapper = new QueryWrapper(); + purchaseDetailDOQueryWrapper.eq("number", mainDO.getNumber()); + List purchasePlanDetailDOList = purchaseDetailMapper.selectList(purchaseDetailDOQueryWrapper); + for (PurchaseDetailDO purchaseDetailDO : purchasePlanDetailDOList) { + PurchasePlanDetailDO purchasePlanDetailDO = new PurchasePlanDetailDO(); + purchasePlanDetailDO.setMasterId(purchasePlanMainDO.getId()); + purchasePlanDetailDO.setPlanQty(purchaseDetailDO.getOrderQty()); + purchasePlanDetailDO.setPoNumber(purchaseDetailDO.getNumber()); + purchasePlanDetailDO.setPoLine(purchaseDetailDO.getLineNumber()); + purchasePlanDetailDO.setItemCode(purchaseDetailDO.getItemCode()); + purchasePlanDetailDO.setUom(purchaseDetailDO.getUom()); + purchasePlanDetailDO.setAvailable("TRUE"); + purchasePlanDetailDO.setTenantId(1L); + purchasePlanDetailMapper.insert(purchasePlanDetailDO); + } + } + } + mainDO.setStatus(OrderStatusEnum.PUBLISHED.getCode());//增加操作记录 + trendsApi.createTrends(id, "plan_purchase_main", "发布了采购订单申请", TrendsTypeEnum.UPDATE); + res = purchaseMainMapper.updateById(mainDO); + return res; + } + + @Override + @Transactional + public Integer witPurchaseMain(Long id) { + int res = 0; + // 校验存在存在下级单据 + PurchaseMainDO mainDO = validatePurchaseMainExists(id); + Long count = purchasePlanMainMapper.selectBySonNumber(mainDO.getNumber()); + if (count > 0) { + throw new ServiceException(PURCHASE_MAIN_EXISTS); + } + //查询要货计划子表 + QueryWrapper purchasePlanDetailDOQueryWrapper = new QueryWrapper(); + purchasePlanDetailDOQueryWrapper.eq("po_number", mainDO.getNumber()); + List purchasePlanDetailDOList = purchasePlanDetailMapper.selectList(purchasePlanDetailDOQueryWrapper); + for (PurchasePlanDetailDO purchasePlanDetailDO : purchasePlanDetailDOList) { + if (purchasePlanDetailDO.getAvailable() != "FALSE") { + QueryWrapper purchasePlanMainDOQueryWrapper = new QueryWrapper(); + purchasePlanMainDOQueryWrapper.eq("number", mainDO.getNumber()); + purchasePlanMainDOQueryWrapper.ne("status", PlanStatusEnum.CLOSED.getCode()); + PurchasePlanMainDO purchasePlanMainDO = purchasePlanMainMapper.selectOne(purchasePlanMainDOQueryWrapper); + if (purchasePlanMainDO != null) { + throw new ServiceException(PURCHASE_MAIN_Have); + } + } + } + mainDO.setStatus(OrderStatusEnum.READY.getCode());//增加操作记录 + trendsApi.createTrends(id, "plan_purchase_main", "下架了采购订单申请", TrendsTypeEnum.UPDATE); + return purchaseMainMapper.updateById(mainDO); + } + + //更新采购订单已计划数量 + @Override + public void updateOrderPurchasePlanQty(String poNumber, String poLine, String itemCode, BigDecimal planQty) { + QueryWrapper purchaseMainDOQueryWrapper = new QueryWrapper(); + purchaseMainDOQueryWrapper.eq("number", poNumber); + purchaseMainDOQueryWrapper.eq("status", OrderStatusEnum.PUBLISHED.getCode()); + List purchaseMainDOList = purchaseMainMapper.selectList(purchaseMainDOQueryWrapper); + if (purchaseMainDOList != null && purchaseMainDOList.size() > 0) { + for (PurchaseMainDO purchaseMainDO : purchaseMainDOList) { + QueryWrapper purchaseDetailDOQueryWrapper = new QueryWrapper(); + purchaseDetailDOQueryWrapper.eq("number", poNumber); + purchaseDetailDOQueryWrapper.eq("line_number", poNumber); + purchaseDetailDOQueryWrapper.eq("item_code", poNumber); + purchaseDetailDOQueryWrapper.eq("available", "TRUE"); + List purchaseDetailDOList = purchaseDetailMapper.selectList(purchaseDetailDOQueryWrapper); + for (PurchaseDetailDO purchaseDetailDO : purchaseDetailDOList) { + //如果是离散单 + if ("DISCRETE".equals(purchaseMainDO.getType())) { + purchaseDetailDO.setPlannedQty(purchaseDetailDO.getPlannedQty().add(planQty)); + } else { + purchaseDetailDO.setPlannedQty(planQty); + } + trendsApi.createTrends(purchaseDetailDO.getId(), "plan_purchase_detail", "修改了采购订单申请子", TrendsTypeEnum.UPDATE); + purchaseDetailMapper.updateById(purchaseDetailDO); + } + } + } else { + throw new ServiceException(PURCHASE_MAIN_NUMBERNO); + } + } + + //更新采购订单表的已收货数量 + @Override + public void updateOrderPurchaseReceivedQty(String poNumber, String poLine, String itemCode, BigDecimal receivedQty) { + QueryWrapper purchaseMainDOQueryWrapper = new QueryWrapper(); + purchaseMainDOQueryWrapper.eq("number", poNumber); + purchaseMainDOQueryWrapper.eq("status", OrderStatusEnum.PUBLISHED.getCode()); + List purchaseMainDOList = purchaseMainMapper.selectList(purchaseMainDOQueryWrapper); + if (purchaseMainDOList != null && purchaseMainDOList.size() > 0) { + for (PurchaseMainDO purchaseMainDO : purchaseMainDOList) { + QueryWrapper purchaseDetailDOQueryWrapper = new QueryWrapper(); + purchaseDetailDOQueryWrapper.eq("number", poNumber); + purchaseDetailDOQueryWrapper.eq("line_number", poNumber); + purchaseDetailDOQueryWrapper.eq("item_code", poNumber); + purchaseDetailDOQueryWrapper.eq("available", "TRUE"); + List purchaseDetailDOList = purchaseDetailMapper.selectList(purchaseDetailDOQueryWrapper); + Boolean res = false; + for (PurchaseDetailDO purchaseDetailDO : purchaseDetailDOList) { + if ("TRUE".equals(purchaseDetailDO.getAvailable())) { + res = true; + } + } + if ("DISCRETE".equals(purchaseMainDO.getType()) && res == true) { + purchaseMainDO.setStatus(OrderStatusEnum.COMPLETED.getCode()); + } + for (PurchaseDetailDO purchaseDetailDO : purchaseDetailDOList) { + //如果是离散单 + if ("DISCRETE".equals(purchaseMainDO.getType())) { + if (purchaseDetailDO.getReceivedQty() == purchaseDetailDO.getOrderQty() + || purchaseDetailDO.getReceivedQty().compareTo(purchaseDetailDO.getOrderQty().multiply(new BigDecimal(1).add(purchaseDetailDO.getOverReceivingPercent()))) + == 1) { + purchaseDetailDO.setAvailable("FALSE"); + } else { + purchaseDetailDO.setReceivedQty(receivedQty); + } + } else { + purchaseDetailDO.setReceivedQty(purchaseDetailDO.getReceivedQty().add(receivedQty)); + } + trendsApi.createTrends(purchaseDetailDO.getId(), "plan_purchase_detail", "修改了采购订单申请子", TrendsTypeEnum.UPDATE); + purchaseDetailMapper.updateById(purchaseDetailDO); + } + trendsApi.createTrends(purchaseMainDO.getId(), "plan_purchase_main", "修改了采购订单申请", TrendsTypeEnum.UPDATE); + purchaseMainMapper.updateById(purchaseMainDO); + } + } else { + throw new ServiceException(PURCHASE_MAIN_NUMBERNO); + } + } + + + //更新采购订单表的已发货数量 + @Override + public void updateOrderPurchaseShippedQty(String poNumber, String poLine, String itemCode, BigDecimal shippedQty) { + QueryWrapper purchaseMainDOQueryWrapper = new QueryWrapper(); + purchaseMainDOQueryWrapper.eq("number", poNumber); + purchaseMainDOQueryWrapper.eq("status", OrderStatusEnum.PUBLISHED.getCode()); + List purchaseMainDOList = purchaseMainMapper.selectList(purchaseMainDOQueryWrapper); + if (purchaseMainDOList != null && purchaseMainDOList.size() > 0) { + for (PurchaseMainDO purchaseMainDO : purchaseMainDOList) { + QueryWrapper purchaseDetailDOQueryWrapper = new QueryWrapper(); + purchaseDetailDOQueryWrapper.eq("number", poNumber); + purchaseDetailDOQueryWrapper.eq("line_number", poNumber); + purchaseDetailDOQueryWrapper.eq("item_code", poNumber); + purchaseDetailDOQueryWrapper.eq("available", "TRUE"); + List purchaseDetailDOList = purchaseDetailMapper.selectList(purchaseDetailDOQueryWrapper); + for (PurchaseDetailDO purchaseDetailDO : purchaseDetailDOList) { + //如果是离散单 + if ("DISCRETE".equals(purchaseMainDO.getType())) { + purchaseDetailDO.setShippedQty(purchaseDetailDO.getShippedQty().add(shippedQty)); + } else { + purchaseDetailDO.setPlannedQty(shippedQty); + } + trendsApi.createTrends(purchaseDetailDO.getId(), "plan_purchase_detail", "修改了采购订单申请子", TrendsTypeEnum.UPDATE); + purchaseDetailMapper.updateById(purchaseDetailDO); + } + } + } else { + throw new ServiceException(PURCHASE_MAIN_NUMBERNO); + } + } + //更新采购订单表的已发货数量 + @Override + public void updateOrderPurchaseReturnQty(String poNumber, String poLine, String itemCode, BigDecimal returnedQty) { + QueryWrapper purchaseMainDOQueryWrapper = new QueryWrapper(); + purchaseMainDOQueryWrapper.eq("number", poNumber); + purchaseMainDOQueryWrapper.eq("status", OrderStatusEnum.PUBLISHED.getCode()); + List purchaseMainDOList = purchaseMainMapper.selectList(purchaseMainDOQueryWrapper); + if (purchaseMainDOList != null && purchaseMainDOList.size() > 0) { + for (PurchaseMainDO purchaseMainDO : purchaseMainDOList) { + QueryWrapper purchaseDetailDOQueryWrapper = new QueryWrapper(); + purchaseDetailDOQueryWrapper.eq("number", poNumber); + purchaseDetailDOQueryWrapper.eq("line_number", poNumber); + purchaseDetailDOQueryWrapper.eq("item_code", poNumber); + purchaseDetailDOQueryWrapper.eq("available", "TRUE"); + List purchaseDetailDOList = purchaseDetailMapper.selectList(purchaseDetailDOQueryWrapper); + for (PurchaseDetailDO purchaseDetailDO : purchaseDetailDOList) { + //如果是离散单 + if ("DISCRETE".equals(purchaseMainDO.getType())) { + purchaseDetailDO.setReturnedQty(returnedQty); + } else { + purchaseDetailDO.setReturnedQty(purchaseDetailDO.getReturnedQty().add(returnedQty)); + } + trendsApi.createTrends(purchaseDetailDO.getId(), "plan_purchase_detail", "修改了采购订单申请子", TrendsTypeEnum.UPDATE); + purchaseDetailMapper.updateById(purchaseDetailDO); + } + } + } else { + throw new ServiceException(PURCHASE_MAIN_NUMBERNO); + } + } + }