diff --git a/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/FuncUtil.java b/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/FuncUtil.java index 3448110..b535252 100644 --- a/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/FuncUtil.java +++ b/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/FuncUtil.java @@ -597,7 +597,7 @@ public class FuncUtil extends StringUtils { return requestAttributes == null ? null : ((ServletRequestAttributes) requestAttributes).getRequest(); } - public static LocalDateTime parseDate(Long timestamp) { + public static LocalDateTime timeToLocalDate(Long timestamp) { if(isEmpty(timestamp)){ return null; } @@ -605,6 +605,13 @@ public class FuncUtil extends StringUtils { // 将 Instant 转换为 LocalDateTime return LocalDateTime.ofInstant(instant, java.time.ZoneId.systemDefault()); } + public static Long localDateToLong(LocalDateTime date) { + if(isEmpty(date)){ + return null; + } + Instant instant = date.atZone(TimeZone.getDefault().toZoneId()).toInstant(); + return instant.getEpochSecond(); + } private static final Snowflake snowflake = IdUtil.getSnowflake(); public static long getNextId() { return snowflake.nextId(); diff --git a/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/validation/AssertUtil.java b/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/validation/AssertUtil.java index 1f5589a..042f5cb 100644 --- a/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/validation/AssertUtil.java +++ b/hangtag-framework/hangtag-common/src/main/java/cn/hangtag/framework/common/util/validation/AssertUtil.java @@ -1,5 +1,6 @@ package cn.hangtag.framework.common.util.validation; +import cn.hangtag.framework.common.exception.ErrorCode; import cn.hangtag.framework.common.exception.ServiceException; import cn.hangtag.framework.common.util.FuncUtil; import org.springframework.util.Assert; @@ -28,4 +29,22 @@ public class AssertUtil { } } + + public static void isEmpty(Object field, ErrorCode errorCode) { + if (FuncUtil.isEmpty(field)) { + throw new ServiceException(errorCode); + } + } + + public static void isNull(Object field, String errorMessage) { + if (field == null) { + throw new ServiceException(600,errorMessage); + } + } + + public static void isNull(Object field, ErrorCode errorCode) { + if (field == null){ + throw new ServiceException(errorCode); + } + } } diff --git a/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/common/BillStatusEnum.java b/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/common/BillStatusEnum.java index a10d973..c17dce8 100644 --- a/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/common/BillStatusEnum.java +++ b/hangtag-module-oms/hangtag-module-oms-api/src/main/java/cn/hangtag/module/oms/enums/common/BillStatusEnum.java @@ -3,6 +3,9 @@ package cn.hangtag.module.oms.enums.common; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.ArrayList; +import java.util.List; + /** * 单据状态 * @author wwb @@ -29,4 +32,30 @@ public enum BillStatusEnum { */ private final String name; + + + public static BillStatusEnum getByValue(String value) { + for (BillStatusEnum item : BillStatusEnum.values()) { + if (item.getValue().equals(value)) { + return item; + } + } + return null; + } + + private static final List CAN_STATUS = new ArrayList<>();; + static { + CAN_STATUS.add(BillStatusEnum.REJECT.getValue()); + CAN_STATUS.add(BillStatusEnum.SAVE.getValue()); + CAN_STATUS.add(BillStatusEnum.SUBMIT.getValue()); + } + /** + * 是否允许 编辑订单状态 + * + * @return {@link List }<{@link String }> + */ + public static boolean isCanEditOrder(String status){ + return CAN_STATUS.contains(status); + } + } diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/app/AppSaleOrderController.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/app/AppSaleOrderController.java index 82d9505..2787107 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/app/AppSaleOrderController.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/app/AppSaleOrderController.java @@ -10,18 +10,12 @@ import cn.hangtag.framework.common.util.object.BeanUtils; import cn.hangtag.framework.excel.core.util.ExcelUtils; import cn.hangtag.framework.security.core.LoginUser; import cn.hangtag.framework.security.core.util.SecurityFrameworkUtils; -import cn.hangtag.module.oms.controller.admin.productinfo.vo.ProductInfoPageReqVO; -import cn.hangtag.module.oms.controller.admin.productinfo.vo.ProductInfoRespVO; -import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderPageReqVO; -import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRemarkReqVO; -import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRespVO; -import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderSaveReqVO; +import cn.hangtag.module.oms.controller.admin.saleorder.front.vo.SaleOrderFollowerUserVO; +import cn.hangtag.module.oms.controller.admin.saleorder.vo.*; import cn.hangtag.module.oms.convert.saleorder.SaleOrderConvert; import cn.hangtag.module.oms.dal.dataobject.customer.CustomerDO; -import cn.hangtag.module.oms.dal.dataobject.productinfo.ProductInfoDO; import cn.hangtag.module.oms.dal.dataobject.saleorder.SaleOrderDO; import cn.hangtag.module.oms.service.customer.CustomerService; -import cn.hangtag.module.oms.service.productinfo.ProductInfoService; import cn.hangtag.module.oms.service.saleorder.SaleOrderService; import cn.hangtag.module.system.api.user.AdminUserApi; import cn.hangtag.module.system.api.user.dto.AdminUserRespDTO; @@ -30,12 +24,10 @@ import com.alibaba.fastjson.JSONObject; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; @@ -189,5 +181,18 @@ public class AppSaleOrderController{ } + @GetMapping("/follower-user/{brandId}") + @Operation(summary = "获取指定品牌跟单员") + public CommonResult> getFollowerUserList(@PathVariable("brandId") String brandId) { + List users = saleOrderService.queryFollowerUserListByBrandId(brandId); + return success(users); + } + + @GetMapping("/contract-code") + @Operation(summary = "获取销售合同号") + public CommonResult getContractCode() { + String code = saleOrderService.getNewContractCode2(); + return success(code); + } } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoRespVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoRespVO.java index 59ad735..a371149 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoRespVO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoRespVO.java @@ -98,6 +98,11 @@ public class ProductInfoRespVO { @ExcelProperty("规格材质") private String specMaterial; + /** + * 模板类型-字典 product_draft_template_type 1有模板 2无模板 3尺码唛 + */ + private String templateType; + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") private LocalDateTime createTime; diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoSaveReqVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoSaveReqVO.java index 47b950c..3a0d4dc 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoSaveReqVO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/productinfo/vo/ProductInfoSaveReqVO.java @@ -73,6 +73,12 @@ public class ProductInfoSaveReqVO { @Schema(description = "规格材质") private String specMaterial; + /** + * 模板类型-字典 product_draft_template_type 1有模板 2无模板 3尺码唛 + */ + @Schema(description = "模板类型") + private String templateType; + @Schema(description = "产品信息工艺列表") private List productProcessList; diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/SaleOrderFrontController.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/SaleOrderFrontController.java index c7b875d..fed8526 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/SaleOrderFrontController.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/SaleOrderFrontController.java @@ -34,5 +34,17 @@ public class SaleOrderFrontController { public CommonResult placeOrder(@Valid @RequestBody CreateSaleOrderDTO dto) { return success(saleOrderService.placeOrder(dto)); } + @PostMapping("/editOrder/{id}") + @Operation(summary = "修改订单") + public CommonResult editOrder(@PathVariable Long id,@Valid @RequestBody CreateSaleOrderDTO dto) { + return success(saleOrderService.editOrder(id,dto)); + } + + @GetMapping("/details/{id}") + @Operation(summary = "编辑订单") + public CommonResult placeOrder(@PathVariable Long id) { + CreateSaleOrderDTO dto = saleOrderService.queryEditOrder(id); + return success(dto); + } } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/CreateSaleOrderDTO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/CreateSaleOrderDTO.java index 42762fa..e9afd70 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/CreateSaleOrderDTO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/CreateSaleOrderDTO.java @@ -9,6 +9,8 @@ import java.util.List; @Data public class CreateSaleOrderDTO implements Serializable { + Long id; + /** * 联系人信息 */ @@ -89,6 +91,10 @@ public class CreateSaleOrderDTO implements Serializable { */ private String deliveryRemark; + /** + * 跟单员id system_user.id + */ + private String orderFollowerUser; /** * 是否分批交货 @@ -96,7 +102,6 @@ public class CreateSaleOrderDTO implements Serializable { private Boolean isBatch; - private List saleOrderEntry; } diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/SaleOrderEntryItemDTO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/SaleOrderEntryItemDTO.java index 334b0fc..c7f23ce 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/SaleOrderEntryItemDTO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/SaleOrderEntryItemDTO.java @@ -1,6 +1,10 @@ package cn.hangtag.module.oms.controller.admin.saleorder.front.dto; +import cn.hangtag.framework.common.util.FuncUtil; +import cn.hangtag.module.oms.dal.dataobject.saleorderentry.SaleOrderEntryDO; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.List; @@ -12,6 +16,8 @@ import java.util.List; * @date 2024/10/02 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class SaleOrderEntryItemDTO implements Serializable { /** @@ -43,10 +49,17 @@ public class SaleOrderEntryItemDTO implements Serializable { private String cover; + /** * 订货数量 */ private Integer orderQty; + + /** + * 计量单位 + */ + private String unit; + /** * 总数量 */ @@ -56,11 +69,18 @@ public class SaleOrderEntryItemDTO implements Serializable { */ private Long deliveryDate; - + /** + * 产品详情 + */ + private String details; /** * 产品sku */ List productSkuList; - + public SaleOrderEntryItemDTO(SaleOrderEntryDO entryDO) { + this.productId = entryDO.getMaterialId(); + this.orderQty = entryDO.getQty(); + this.deliveryDate = FuncUtil.localDateToLong(entryDO.getDeliveryDate()); + } } diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/SaleOrderSkuDTO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/SaleOrderSkuDTO.java index 465db36..60be45d 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/SaleOrderSkuDTO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/dto/SaleOrderSkuDTO.java @@ -1,6 +1,10 @@ package cn.hangtag.module.oms.controller.admin.saleorder.front.dto; +import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO; +import cn.hutool.json.JSONUtil; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.List; @@ -12,6 +16,8 @@ import java.util.List; * @date 2024/10/02 */ @Data +@NoArgsConstructor +@AllArgsConstructor public class SaleOrderSkuDTO implements Serializable { private String itemKey; @@ -24,7 +30,7 @@ public class SaleOrderSkuDTO implements Serializable { /** * 订货数量 */ - private Long orderQty; + private Integer orderQty; /** * 草图设计id @@ -47,11 +53,21 @@ public class SaleOrderSkuDTO implements Serializable { */ private String previewImage; + /** + * 模板类型-字典 product_draft_template_type 1有模板 2无模板 3尺码唛 + */ + private String productTemplateType; + /** * 动态属性json配置信息 */ private String propInfo; + /** + * 尺码信息 + */ + private String labelSize; + /** * 动态属性 排序信息 */ @@ -63,5 +79,20 @@ public class SaleOrderSkuDTO implements Serializable { private SpecInfoDTO specInfo; - + public SaleOrderSkuDTO(SaleOrderSkuDO saleOrderSkuDO) { + this.itemKey = saleOrderSkuDO.getItemKey(); + this.productId = saleOrderSkuDO.getProductId(); + this.orderQty = saleOrderSkuDO.getOrderQty(); + this.draftDesignId = saleOrderSkuDO.getDraftDesignId(); + this.width = saleOrderSkuDO.getWidth().doubleValue(); + this.height = saleOrderSkuDO.getHeight().doubleValue(); + this.previewImage = saleOrderSkuDO.getPreviewImage(); + this.productTemplateType = saleOrderSkuDO.getProductTemplateType(); + this.propInfo = saleOrderSkuDO.getPropInfo(); + this.labelSize = saleOrderSkuDO.getLabelSize(); + String specInfo1 = saleOrderSkuDO.getSpecInfo(); + if(specInfo1 != null){ + this.specInfo = JSONUtil.toBean(specInfo1, SpecInfoDTO.class); + } + } } diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/vo/SaleOrderFollowerUserVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/vo/SaleOrderFollowerUserVO.java new file mode 100644 index 0000000..9b51f73 --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleorder/front/vo/SaleOrderFollowerUserVO.java @@ -0,0 +1,28 @@ +package cn.hangtag.module.oms.controller.admin.saleorder.front.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 销售订单跟单员vo + * + * @author YuanFeng + * @date 2024/11/09 + */ +@Data +public class SaleOrderFollowerUserVO { + + /** + * system_users id + */ + @Schema(description = "用户Id") + private Long id; + + /** + * 跟单员名称 + * system_users username + */ + @Schema(description = "跟单员名称") + private String username; + +} \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuSaveReqVO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuSaveReqVO.java index 0641f88..fa78f83 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuSaveReqVO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/controller/admin/saleordersku/vo/SaleOrderSkuSaveReqVO.java @@ -46,6 +46,9 @@ public class SaleOrderSkuSaveReqVO { @Schema(description = "规格 json完整信息") private String specInfo; + @Schema(description = "产品尺码") + private String labelSize; + @Schema(description = "宽(mm)") private BigDecimal specSizeWidth; diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productinfo/ProductInfoDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productinfo/ProductInfoDO.java index 93abe1d..a09032f 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productinfo/ProductInfoDO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/productinfo/ProductInfoDO.java @@ -97,6 +97,11 @@ public class ProductInfoDO extends BaseDO { @TableField("spec_material") private String specMaterial; + /** + * 模板类型-字典 product_draft_template_type 1有模板 2无模板 3尺码唛 + */ + @TableField("template_type") + private String templateType; /** diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderDO.java index 2d42fe0..9f1be46 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderDO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorder/SaleOrderDO.java @@ -159,6 +159,11 @@ public class SaleOrderDO extends BaseDO { */ private String deliveryRemark; + /** + * 跟单员id system_user.id + */ + private String orderFollowerUser; + public SaleOrderDO(CreateSaleOrderDTO dto) { BeanUtil.copyProperties(dto, this,"bizdate","plansenddate"); } diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorderentry/SaleOrderEntryDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorderentry/SaleOrderEntryDO.java index 4601653..7825ece 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorderentry/SaleOrderEntryDO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleorderentry/SaleOrderEntryDO.java @@ -55,6 +55,12 @@ public class SaleOrderEntryDO extends BaseDO { * 数量 */ private Integer qty; + + /** + * 计量单位 + */ + private String unit; + /** * 金额 */ diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleordersku/SaleOrderSkuDO.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleordersku/SaleOrderSkuDO.java index af06fa6..73408a5 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleordersku/SaleOrderSkuDO.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/dal/dataobject/saleordersku/SaleOrderSkuDO.java @@ -72,6 +72,17 @@ public class SaleOrderSkuDO extends BaseDO { * 动态属性 json动态属性 */ private String propInfo; + + /** + * 模板类型-字典 product_draft_template_type 1有模板 2无模板 3尺码唛 + */ + private String productTemplateType; + + /** + * 尺码唛的 尺码信息 + */ + private String labelSize; + /** * 规格 json完整信息 */ diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderService.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderService.java index 8d7fd22..6b2fe05 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderService.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderService.java @@ -7,6 +7,7 @@ import javax.validation.*; import cn.hangtag.module.oms.controller.admin.common.vo.DataComparisonRespVO; import cn.hangtag.module.oms.controller.admin.saleorder.front.dto.CreateSaleOrderDTO; +import cn.hangtag.module.oms.controller.admin.saleorder.front.vo.SaleOrderFollowerUserVO; import cn.hangtag.module.oms.controller.admin.saleorder.vo.*; import cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderSummaryRespVO; import cn.hangtag.module.oms.controller.admin.trade.vo.TradeOrderTrendReqVO; @@ -107,9 +108,32 @@ public interface SaleOrderService { * @return {@link Long } */ Long placeOrder(CreateSaleOrderDTO dto); + Long editOrder(Long id,CreateSaleOrderDTO dto); - public String getNewOrderCode(); - public String getNewOrderCode2(); + /** + * 获取销售订单编码 + * + * @return {@link String } + */ + String getNewOrderCode(); + + /** + * 获取销售合同编码 + * + * @return {@link String } + */ + String getNewContractCode2(); List getSaleOrderSkuEntryListByEntryId(Long entryId); + + List queryFollowerUserListByBrandId(String brandId); + + + /** + * 查询编辑订单 + * + * @param id ID + * @return {@link CreateSaleOrderDTO } + */ + CreateSaleOrderDTO queryEditOrder(Long id); } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java index de4ecf6..f5a4be3 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java @@ -4,14 +4,12 @@ import cn.hangtag.framework.common.exception.ServiceException; import cn.hangtag.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.hangtag.framework.common.pojo.PageResult; import cn.hangtag.framework.common.util.FuncUtil; -import cn.hangtag.framework.common.util.http.HttpUtils; import cn.hangtag.framework.common.util.object.BeanUtils; import cn.hangtag.framework.common.util.validation.AssertUtil; import cn.hangtag.framework.mybatis.core.dataobject.BaseDO; import cn.hangtag.framework.security.core.LoginUser; import cn.hangtag.framework.security.core.util.SecurityFrameworkUtils; import cn.hangtag.module.oms.common.utils.NumberChineseFormatterUtils; -import cn.hangtag.module.oms.common.utils.WKHtmlToPdfUtil; import cn.hangtag.module.oms.controller.admin.common.vo.DataComparisonRespVO; import cn.hangtag.module.oms.controller.admin.produceorder.vo.ProduceOrderSaveReqVO; import cn.hangtag.module.oms.controller.admin.product.vo.ProductPriceSaveReqVO; @@ -19,6 +17,7 @@ import cn.hangtag.module.oms.controller.admin.salecontract.vo.SaleContractSaveRe import cn.hangtag.module.oms.controller.admin.saleorder.front.dto.CreateSaleOrderDTO; import cn.hangtag.module.oms.controller.admin.saleorder.front.dto.SaleOrderEntryItemDTO; import cn.hangtag.module.oms.controller.admin.saleorder.front.dto.SaleOrderSkuDTO; +import cn.hangtag.module.oms.controller.admin.saleorder.front.vo.SaleOrderFollowerUserVO; import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderPageReqVO; import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderRemarkReqVO; import cn.hangtag.module.oms.controller.admin.saleorder.vo.SaleOrderSaveReqVO; @@ -50,6 +49,7 @@ import cn.hangtag.module.oms.service.produceorder.ProduceOrderService; import cn.hangtag.module.oms.service.product.ProductPriceService; import cn.hangtag.module.oms.service.productinfo.ProductInfoService; import cn.hangtag.module.oms.service.salecontract.SaleContractService; +import cn.hangtag.module.oms.service.saleordersku.SaleOrderSkuService; import cn.hangtag.module.system.mq.message.mail.MailSendMessage; import cn.hangtag.module.system.service.mail.MailSendService; import cn.hutool.core.bean.BeanUtil; @@ -62,6 +62,7 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Maps; @@ -75,7 +76,6 @@ import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import javax.annotation.Resource; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import java.io.*; @@ -83,10 +83,7 @@ import java.math.BigDecimal; import java.net.URLEncoder; import java.time.Duration; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -112,6 +109,9 @@ public class SaleOrderServiceImpl implements SaleOrderService { private SaleOrderEntryMapper saleOrderEntryMapper; @Resource private SaleOrderSkuMapper skuOrderSkuMapper; + + @Resource + private SaleOrderSkuService saleOrderSkuService; @Resource private ProduceOrderService produceOrderService; @Resource @@ -638,18 +638,19 @@ public class SaleOrderServiceImpl implements SaleOrderService { .materialId(itemDTO.getProductId()) .materialName(itemDTO.getProductName()) .qty(itemDTO.getOrderQty()) - .deliveryDate(FuncUtil.parseDate(itemDTO.getDeliveryDate())).build(); + .deliveryDate(FuncUtil.timeToLocalDate(itemDTO.getDeliveryDate())).build(); entryList.add(entry); List productSkuList = itemDTO.getProductSkuList(); // sku for (SaleOrderSkuDTO saleOrderSkuDTO : productSkuList) { SaleOrderSkuDO saleOrderSkuDO = new SaleOrderSkuDO(); - BeanUtil.copyProperties(saleOrderSkuDTO,saleOrderSkuDO); + BeanUtil.copyProperties(saleOrderSkuDTO,saleOrderSkuDO,"specInfo"); saleOrderSkuDO.setSaleOrderId(order.getId()); saleOrderSkuDO.setEntryId(entry.getId()); + saleOrderSkuDO.setProductTemplateType(saleOrderSkuDTO.getProductTemplateType()); + saleOrderSkuDO.setSpecInfo(JSONUtil.toJsonStr(saleOrderSkuDTO.getSpecInfo())); saleOrderSkuDO.setId(FuncUtil.getNextId()); - skuList.add(saleOrderSkuDO); } @@ -662,6 +663,60 @@ public class SaleOrderServiceImpl implements SaleOrderService { System.out.println(order); return order.getId(); } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long editOrder(Long id,CreateSaleOrderDTO dto) { + + SaleOrderDO saleOrderDO = checkEditOrder(id); + // 校验订单 + SaleOrderDO order = new SaleOrderDO(dto); + order.setId(saleOrderDO.getId()); + order = wrapperEntity(order, dto); + // 不进行修改 + order.setOrderCode(saleOrderDO.getOrderCode()); + order.setContractCode(saleOrderDO.getContractCode()); + order.setBillno(saleOrderDO.getBillno()); + order.setCustomerId(saleOrderDO.getCustomerId()); + order.setBizdate(saleOrderDO.getBizdate()); + List saleOrderEntry = dto.getSaleOrderEntry(); + List entryList = new ArrayList<>(); + List skuList = new ArrayList<>(); + + // 删除之前的的订单条目 + deleteSaleOrderEntryByParentId(order.getId()); + saleOrderSkuService.delSkuByOrderId(order.getId()); + + // 转成订单条目 + for (SaleOrderEntryItemDTO itemDTO : saleOrderEntry) { + SaleOrderEntryDO entry = SaleOrderEntryDO.builder() + .id(FuncUtil.getNextId()) + .parentId(order.getId()) + .materialId(itemDTO.getProductId()) + .materialName(itemDTO.getProductName()) + .qty(itemDTO.getOrderQty()) + .deliveryDate(FuncUtil.timeToLocalDate(itemDTO.getDeliveryDate())).build(); + entryList.add(entry); + List productSkuList = itemDTO.getProductSkuList(); + // sku + for (SaleOrderSkuDTO saleOrderSkuDTO : productSkuList) { + SaleOrderSkuDO saleOrderSkuDO = new SaleOrderSkuDO(); + BeanUtil.copyProperties(saleOrderSkuDTO,saleOrderSkuDO,"specInfo"); + saleOrderSkuDO.setSaleOrderId(order.getId()); + saleOrderSkuDO.setEntryId(entry.getId()); + saleOrderSkuDO.setProductTemplateType(saleOrderSkuDTO.getProductTemplateType()); + saleOrderSkuDO.setSpecInfo(JSONUtil.toJsonStr(saleOrderSkuDTO.getSpecInfo())); + saleOrderSkuDO.setId(FuncUtil.getNextId()); + skuList.add(saleOrderSkuDO); + } + + } + saleOrderMapper.updateById(order); + saleOrderEntryMapper.insertBatch(entryList); + skuOrderSkuMapper.insertBatch(skuList); + updateCustomerInvoiceData(order); + return order.getId(); + } private static final long codeId = 6L; private static final long saleContractCodeId = 7L; @Override @@ -684,14 +739,14 @@ public class SaleOrderServiceImpl implements SaleOrderService { } } @Override - public String getNewOrderCode2() { + public String getNewContractCode2() { String s = ""; int count = 10; while (true){ count --; try { s = CodingRulesUtils.generateCode(saleContractCodeId, false); - checkCode2(null,s); + checkSaleContractCode2(null,s); return s; }catch (ServiceException e){ log.warn("重复或者下一个编码"); @@ -724,7 +779,7 @@ public class SaleOrderServiceImpl implements SaleOrderService { } - private void checkCode2(Long id,String code){ + private void checkSaleContractCode2(Long id, String code){ if(FuncUtil.isNotEmpty(code)){ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.select(SaleContractDO::getId,SaleContractDO::getBillno, BaseDO::getDeleted); @@ -756,7 +811,7 @@ public class SaleOrderServiceImpl implements SaleOrderService { order.setId(FuncUtil.getNextId()); } order.setBizdate(LocalDateTime.now()); - order.setPlansenddate( FuncUtil.parseDate(dto.getPlansenddate())); + order.setPlansenddate( FuncUtil.timeToLocalDate(dto.getPlansenddate())); // 设置订单状态 order.setOrderStatus(SaleOrderStatusEnum.YXD.getValue()); order.setBillStatus(BillStatusEnum.SUBMIT.getValue()); @@ -859,7 +914,12 @@ public class SaleOrderServiceImpl implements SaleOrderService { private SaleContractSaveReqVO toSaleContractVO(SaleOrderDO saleOrder, List entrys){ CustomerDO customer = customerService.getCustomer(saleOrder.getCustomerId()); SaleContractSaveReqVO saveReqVO = new SaleContractSaveReqVO(); - saveReqVO.setBillno(getNewOrderCode2()); + // 优先使用销售订单合同号 + String billno = saleOrder.getContractCode(); + if(FuncUtil.isEmpty(billno)){ + billno = getNewContractCode2(); + } + saveReqVO.setBillno(billno); saveReqVO.setCustomerId(saleOrder.getCustomerId()); saveReqVO.setCustomerName(customer.getName()); saveReqVO.setCustomerBuyNo(saleOrder.getBillno()); @@ -896,6 +956,65 @@ public class SaleOrderServiceImpl implements SaleOrderService { return skuOrderSkuMapper.selectListByEntryId(entryId); } + @Override + public List queryFollowerUserListByBrandId(String brandId) { + // TODO 查询品牌下的所有跟单人员 + List res = new ArrayList<>(); + + // 测试数据 + res.add(new SaleOrderFollowerUserVO().setId(1L).setUsername("admin")); + + return res; + } + + @Override + public CreateSaleOrderDTO queryEditOrder(Long id) { + CreateSaleOrderDTO res = new CreateSaleOrderDTO(); + SaleOrderDO saleOrderDO = checkEditOrder(id); + BeanUtil.copyProperties(saleOrderDO, res); + LambdaQueryWrapper entryQueryWrapper = new LambdaQueryWrapper<>(); + entryQueryWrapper.eq(SaleOrderEntryDO::getParentId, saleOrderDO.getId()); + entryQueryWrapper.eq(SaleOrderEntryDO::getDeleted, false); + List entryDOS = saleOrderEntryMapper.selectList(entryQueryWrapper); + List saleOrderEntry = new ArrayList<>(); + for (SaleOrderEntryDO entryDO : entryDOS) { + SaleOrderEntryItemDTO dto = new SaleOrderEntryItemDTO(entryDO); + + // 获取产品信息 + + Long productId = dto.getProductId(); + ProductInfoDO productInfo = productInfoService.getProductInfo(productId); + dto.setCover(productInfo.getCover()); + dto.setProductCode(productInfo.getCode()); + dto.setProductName(entryDO.getMaterialName()); + dto.setProducer(productInfo.getBrandName()); + dto.setCover(productInfo.getCover()); + dto.setDetails(productInfo.getDetails()); + dto.setUnit(entryDO.getUnit()); +// productId: row.id, +// productCode: row.code, +// productName: row.name, +// producer: row.producer, +// cover: row.cover, +// unit: row.unit || 'pcs', + + // sku list + LambdaQueryWrapper skuWrapper = new LambdaQueryWrapper<>(); + skuWrapper.eq(SaleOrderSkuDO::getSaleOrderId, saleOrderDO.getId()); + skuWrapper.eq(SaleOrderSkuDO::getDeleted, false); + List sukList = skuOrderSkuMapper.selectList(skuWrapper); + List skus = new ArrayList<>(); + for (SaleOrderSkuDO saleOrderSkuDO : sukList) { + SaleOrderSkuDTO toSaleOrderSkuDTO = new SaleOrderSkuDTO(saleOrderSkuDO); + skus.add(toSaleOrderSkuDTO); + } + dto.setProductSkuList(skus); + saleOrderEntry.add(dto); + } + res.setSaleOrderEntry(saleOrderEntry); + return res; + } + /** * 下载ZIP压缩包(会对下载后的压缩包进行删除) * @@ -933,4 +1052,16 @@ public class SaleOrderServiceImpl implements SaleOrderService { } } + private SaleOrderDO checkEditOrder(Long id){ + SaleOrderDO saleOrderDO = saleOrderMapper.selectById(id); + AssertUtil.isEmpty(saleOrderDO, "订单不存在"); + String billStatus = saleOrderDO.getBillStatus(); + + boolean order1 = BillStatusEnum.isCanEditOrder(billStatus); + BillStatusEnum byValue = BillStatusEnum.getByValue(billStatus); + AssertUtil.isEmpty(byValue, "订单状态异常"); + AssertUtil.isTrue(!order1,byValue.getName()+"状态不允许修改" ); + return saleOrderDO; + } + } \ No newline at end of file diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuService.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuService.java index 62113c0..7e5d688 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuService.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuService.java @@ -1,11 +1,9 @@ package cn.hangtag.module.oms.service.saleordersku; -import java.util.*; import javax.validation.*; import cn.hangtag.module.oms.controller.admin.saleordersku.vo.*; import cn.hangtag.module.oms.dal.dataobject.saleordersku.SaleOrderSkuDO; import cn.hangtag.framework.common.pojo.PageResult; -import cn.hangtag.framework.common.pojo.PageParam; /** * 销售订单产品属性表 Service 接口 @@ -36,6 +34,13 @@ public interface SaleOrderSkuService { */ void deleteSaleOrderSku(Long id); + /** + * 通过销售订单ID删除销售订单SKU + * oms_saleorder id + * @param id ID + */ + int delSkuByOrderId(Long id); + /** * 获得销售订单产品属性表 * diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImpl.java index 7d8806f..22d60bf 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImpl.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleordersku/SaleOrderSkuServiceImpl.java @@ -1,5 +1,6 @@ package cn.hangtag.module.oms.service.saleordersku; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -55,6 +56,20 @@ public class SaleOrderSkuServiceImpl implements SaleOrderSkuService { saleOrderSkuMapper.deleteById(id); } + @Override + public int delSkuByOrderId(Long orderId) { + + LambdaQueryWrapper skuWrapper = new LambdaQueryWrapper<>(); + skuWrapper.eq(SaleOrderSkuDO::getSaleOrderId, orderId); + skuWrapper.eq(SaleOrderSkuDO::getDeleted, false); + List sukList = saleOrderSkuMapper.selectList(skuWrapper); + List skus = new ArrayList<>(); + for (SaleOrderSkuDO saleOrderSkuDO : sukList) { + skus.add(saleOrderSkuDO.getId()); + } + return saleOrderSkuMapper.deleteBatchIds(skus); + } + private void validateSaleOrderSkuExists(Long id) { if (saleOrderSkuMapper.selectById(id) == null) { throw exception(SALE_ORDER_SKU_NOT_EXISTS); diff --git a/hangtag-ui/hangtag-ui-admin/src/components/DraftDesign/components/DesignPreviewDialog.vue b/hangtag-ui/hangtag-ui-admin/src/components/DraftDesign/components/DesignPreviewDialog.vue index 1a1e3ce..d8fe295 100644 --- a/hangtag-ui/hangtag-ui-admin/src/components/DraftDesign/components/DesignPreviewDialog.vue +++ b/hangtag-ui/hangtag-ui-admin/src/components/DraftDesign/components/DesignPreviewDialog.vue @@ -12,8 +12,8 @@ @@ -24,7 +24,8 @@ import {ElAlert} from "element-plus"; import {reactive, computed, watch} from 'vue' import {calculateVectorDifference} from "@/components/DraftDesign/utils/FuncUtil"; import {useMessage} from "@/hooks/web/useMessage"; - +import { useI18n } from 'vue-i18n' +const { t } = useI18n() const emit = defineEmits(['update:visible', 'submit']) const designPropEditRef = ref(); const that = reactive({ @@ -61,7 +62,7 @@ const previewByDraftDesignId = (id: string | number,prop={})=>{ },100) } const submit = ()=>{ - useMessage().confirm("是否提交?").then(async (r) => { + useMessage().confirm(t('designInfo.auditTips')).then(async (r) => { const res = await designPropEditRef.value.getPropInfo() emit("submit",res); updateVisible(false) diff --git a/hangtag-ui/hangtag-ui-admin/src/components/DraftDesign/components/DesignPropEdit.vue b/hangtag-ui/hangtag-ui-admin/src/components/DraftDesign/components/DesignPropEdit.vue index 5ca75f3..3313cc2 100644 --- a/hangtag-ui/hangtag-ui-admin/src/components/DraftDesign/components/DesignPropEdit.vue +++ b/hangtag-ui/hangtag-ui-admin/src/components/DraftDesign/components/DesignPropEdit.vue @@ -1,88 +1,82 @@ + + diff --git a/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/ProductList.vue b/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/ProductList.vue index a754277..08458a1 100644 --- a/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/ProductList.vue +++ b/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/ProductList.vue @@ -10,6 +10,7 @@ highlight-current-row stripe :data="that.tableData" + border @row-click="rowChange" style="width: 100%"> @@ -57,9 +58,10 @@ diff --git a/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/ProductSkuList.vue b/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/ProductSkuList.vue index 471a5b0..d19379e 100644 --- a/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/ProductSkuList.vue +++ b/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/ProductSkuList.vue @@ -2,32 +2,47 @@
- 添加SKU + 添加SKU
-
+
+
+ +
diff --git a/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/index.vue b/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/index.vue index ee07629..5d339eb 100644 --- a/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/index.vue +++ b/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/components/OrderAddProductStep/index.vue @@ -4,7 +4,7 @@
订单产品列表
- +
@@ -22,7 +22,7 @@ import ProductList from "./ProductList.vue"; import ProductSkuList from "./ProductSkuList.vue"; import {useEmitt} from "@/hooks/web/useEmitt"; -import {STEP0_FINISH} from "@/constants/EmitEventName"; +import {STEP0_FINISH_EVENT} from "@/constants/EmitEventName"; const skuListRef = ref(null); const listRef = ref(null); @@ -30,6 +30,7 @@ const that = reactive({ selectRow: null, }) const rowClick = (row) => { + console.log("init",row) that.selectRow = { productSkuList: [], ...row, @@ -37,7 +38,9 @@ const rowClick = (row) => { //@ts-nocheck skuListRef.value.init(that.selectRow) } - +const delRow = (row)=>{ + skuListRef.value.resetFields(); +} const changeDetails = (tableData)=>{ that.selectRow.productSkuList = []; @@ -48,10 +51,10 @@ const changeDetails = (tableData)=>{ }) } listRef.value.setSelectRow(that.selectRow) + } const getTableData = () => { - const list = []; for (let i = 0; i < listRef.value.getTableData().length; i++) { list.push({ @@ -61,9 +64,12 @@ const getTableData = () => { } return list } - +const init = (saleOrderEntry)=>{ + listRef.value.init(saleOrderEntry) +} defineExpose({ - getTableData + getTableData, + init }) diff --git a/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/index.vue b/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/index.vue index 9eda88d..fda5755 100644 --- a/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/index.vue +++ b/hangtag-ui/hangtag-ui-front/src/views/oms/order/createorder/index.vue @@ -40,8 +40,8 @@ disabled prefix-icon="" style="width: 760px" - type="date" - value-format="YYYY-MM-DD" + type="datetime" + value-format="YYYY-MM-DD hh:mm:ss" /> @@ -62,7 +62,7 @@ - + @@ -149,9 +149,10 @@
- 生成 + 获取
@@ -166,6 +167,20 @@
+ + + + + + + + + @@ -391,21 +406,23 @@ import * as BrandApi from "@/api/oms/brand"; import {AddressApi} from "@/api/oms/customer/address"; import {CustomerApi} from "@/api/oms/customer"; import {SaleOrderApi} from "@/api/oms/saleorder"; - +const { push } = useRouter() import OrderAddProductStep from "./components/OrderAddProductStep/index.vue"; import {useEmitt} from "@/hooks/web/useEmitt"; -import {STEP0_FINISH, UPDATE_ADDRESS} from "@/constants/EmitEventName"; +import {STEP0_FINISH_EVENT, UPDATE_ADDRESS_EVENT} from "@/constants/EmitEventName"; import {formatDate} from "@/utils/formatTime"; - +import {ElLoading} from "element-plus"; +const route = useRoute() // 路由 // 计算当前时间之后指定天数的日期 const calculateDateAfterDays = (days) => { return formatDate(new Date(Date.now() + ((24 * 60 * 60 * 1000) * days))); } - +const {emitter} = useEmitt(); const loading = ref(false) // 列表的加载中 const list = ref([]) // 列表的数据 const total = ref(0) // 列表的总页数 const queryParams = reactive({ + id: null, pageNo: 1, pageSize: 10, name: null, @@ -423,13 +440,14 @@ const editAddress = () => { addressRef.value.openDialog() } useEmitt({ - name: UPDATE_ADDRESS, + name: UPDATE_ADDRESS_EVENT, callback: ()=>{ getCustomerAddressList(); }, }); const that = reactive({ formLoading: false, + pageLoading: {}, addressList: [], addressId: null, tmpFormData: { @@ -437,6 +455,8 @@ const that = reactive({ emailList: [], planDate: calculateDateAfterDays(7), }, + followerUserList:[], + subListSize: 0, }) const formData = ref({ contactName: '', @@ -463,12 +483,15 @@ const formData = ref({ deliveryAddress: '', deliveryRemark: '', saleOrderEntry: [], + orderFollowerUser: '', +}) +const isEditState = computed(()=>{ + return route.query.id != undefined }) - const formRules = reactive({ contactName: [{required: true, message: '联系人不能为空', trigger: 'blur'}], brandId: [{required: true, message: '品牌不能为空', trigger: 'blur'}], - contractCode: [{required: true, message: '品牌不能为空', trigger: 'blur'}], + contractCode: [{required: true, message: '合同号不能为空', trigger: 'blur'}], phone: [{required: true, message: '联系人手机号不能为空', trigger: 'blur'}, { pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/, @@ -479,13 +502,8 @@ const formRules = reactive({ }) const activeNames = ref(['1', '2', '3']) - -const onAddEmail = () => { - if (!that.tmpFormData.inputEmail || that.tmpFormData.inputEmail.trim() === '') { - useMessage().warning('请输入邮箱'); - return; - } - const tmp = that.tmpFormData.inputEmail.trim(); +const pushEmail = (input:string)=>{ + const tmp = input.trim(); const index = that.tmpFormData.emailList.indexOf(tmp); if (index != -1) { that.tmpFormData.emailList.splice(index, 1); @@ -494,8 +512,16 @@ const onAddEmail = () => { } else { that.tmpFormData.emailList.push(tmp); } +} +const onAddEmail = () => { + if (!that.tmpFormData.inputEmail || that.tmpFormData.inputEmail.trim() === '') { + useMessage().warning('请输入邮箱'); + return; + } + pushEmail(that.tmpFormData.inputEmail); that.tmpFormData.inputEmail = ''; // 清空输入框 } + const onDelEmail = () => { if (selectedIndex.value >= 0) { that.tmpFormData.emailList.splice(selectedIndex.value, 1); // 从数组中移除指定索引的元素 @@ -509,16 +535,24 @@ const onDelEmail = () => { const selectItem = async (index: number) => { selectedIndex.value = index; } +const changeBrand = computed(()=>{ + return that.subListSize > 0; +}) const generateContractCode = () => { - const code = `CT-${Math.floor(Date.now() / 1000) + '-' + Math.random().toString(10).substring(2, 6).padEnd(4, '0')}`; - formData.value.contractCode = code; - return code; + // 后台获取合同号 + SaleOrderApi.getContractCode().then(res =>{ + formData.value.contractCode = res; + }) + } const backStep = async () => { stepIndex.value = stepIndex.value - 1; + that.subListSize = 0; + if(stepRef.value){ + that.subListSize = stepRef.value.getTableData().length + } } -const {emitter} = useEmitt(); const nextStep = async () => { if (stepIndex.value === 0) { formRef.value.validate().then(() => { @@ -530,7 +564,7 @@ const nextStep = async () => { if (!formData.isBatch && that.tmpFormData.planDate) { formData.value.plansenddate = new Date(that.tmpFormData.planDate).getTime() } - emitter.emit(STEP0_FINISH, { + emitter.emit(STEP0_FINISH_EVENT, { ...formData.value }) }).catch(() => { @@ -539,7 +573,6 @@ const nextStep = async () => { } else { stepIndex.value = stepIndex.value + 1; } - } const onChangeAddress = (id)=>{ console.log(id) @@ -549,28 +582,78 @@ const onChangeAddress = (id)=>{ } } } -const addNewBill = () => { - console.log("stepRef.value.getTableData()", stepRef.value.getTableData()) - // todo 校验 - const tableData = stepRef.value.getTableData(); - if (tableData.length === 0) { - useMessage().warning("请添加产品") - return; - } +/** + * 提交前处理 + */ +const submitPreHandler = (showMsg = true) => { + return new Promise((resolve, reject) => { + // todo 校验 + const tableData = stepRef.value.getTableData(); + if (tableData.length === 0) { + if(showMsg){ + useMessage().warning("请添加产品") + } + reject("请添加产品") + } + if (that.tmpFormData.emailList) { + formData.value.emails = that.tmpFormData.emailList.join(";") + } + if (!formData.isBatch && that.tmpFormData.planDate) { + formData.value.plansenddate = new Date(that.tmpFormData.planDate).getTime() + } + formData.value.saleOrderEntry = tableData - for (let i = 0; i < tableData.length; i++) { - - } - formData.value.saleOrderEntry = tableData - console.log("333", formData.value) - SaleOrderApi.placeOrder({ - ...formData.value - }).then(res => { - useMessage().success("下单成功") - resFrom(); - stepIndex.value = 0 + if ( formData.value.bizdate) { + formData.value.bizdate = new Date(formData.value.bizdate).getTime() + } + resolve(true); }) } +const addNewBill = () => { + console.log("stepRef.value.getTableData()", stepRef.value.getTableData()) + submitPreHandler().then(res=>{ + if(formData.value.id){ + SaleOrderApi.editOrder(formData.value.id,{ + ...formData.value + }).then(res => { + that.pageLoading = ElLoading.service({ + lock: true, + text: '修改成功...', + background: 'rgba(0,0,0,0.5)' + }) + setTimeout(()=>{ + that.pageLoading.close() + push("/") + },800) + }) + }else { + SaleOrderApi.placeOrder({ + ...formData.value + }).then(res => { + that.pageLoading = ElLoading.service({ + lock: true, + text: '下单成功...', + background: 'rgba(0,0,0,0.5)' + }) + setTimeout(()=>{ + that.pageLoading.close() + push("/") + },800) + }) + } + + }); + +} + +/** 初始化 **/ +onMounted(() => { + queryParams.id = ''; + if(route.query){ + queryParams.id = route.query.id ?? '' + } + +}) const hasLastIndex = computed(() => { return stepIndex.value >= 1; @@ -578,9 +661,26 @@ const hasLastIndex = computed(() => { /** 初始化 **/ const brandList = ref([]) // 品牌列表 + + +watch(() => formData.value.brandId, async (val)=>{ + if(val){ + const data = await SaleOrderApi.getFollowerUser(val) + that.followerUserList = data + if(that.followerUserList.length > 0 && !formData.value.orderFollowerUser){ + formData.value.orderFollowerUser = that.followerUserList[0].id + } + } +}) + onMounted(async () => { // 获取品牌列表 - brandList.value = await BrandApi.getSimpleBrandList() + BrandApi.getSimpleBrandList().then(res =>{ + brandList.value = res + if(res.length > 0 && !formData.value.brandId){ + formData.value.brandId = brandList.value[0].id + } + }) const customerData = await CustomerApi.getCustomerInfo() if (customerData) { that.addressList = customerData.addressList; @@ -589,6 +689,9 @@ onMounted(async () => { formData.value.company = customerData.company; formData.value.contactName = customerData.contacts; formData.value.phone = customerData.phone; + if(customerData.email){ + pushEmail(customerData.email); + } formData.value.invoiceCode = customerData.invoiceCode; formData.value.invoiceName = customerData.invoiceName; formData.value.invoiceAddress = customerData.invoiceAddress; @@ -597,6 +700,19 @@ onMounted(async () => { that.addressId = that.addressList[0].id; } } + // 获取订单信息 + if(queryParams.id){ + const res = await SaleOrderApi.queryEditById(queryParams.id); + formData.value = res + formData.value.bizdate = formatDate( new Date(res.bizdate), 'YYYY-MM-DD hh:mm:ss'); + that.tmpFormData.planDate = formatDate( new Date(res.plansenddate), 'YYYY-MM-DD'); + that.tmpFormData.emailList = res.emails.split(";") + formData.value = { + ...formData.value, + id: queryParams.id + } + stepRef.value.init(res.saleOrderEntry ?? []); + } }) const getCustomerAddressList = async () => { @@ -621,7 +737,7 @@ const resFrom = (init = {}) => { invoiceName: '', invoiceCode: '', invoiceRemarks: '', - contractCode: '', + contractCode: 'tmp1', retailerCode: '', remarks: '', isBatch: false, diff --git a/hangtag-ui/hangtag-ui-front/src/views/oms/saleorder/index.vue b/hangtag-ui/hangtag-ui-front/src/views/oms/saleorder/index.vue index 6d683c8..8d7f326 100644 --- a/hangtag-ui/hangtag-ui-front/src/views/oms/saleorder/index.vue +++ b/hangtag-ui/hangtag-ui-front/src/views/oms/saleorder/index.vue @@ -236,6 +236,16 @@ />