Browse Source

制品报废接口

master
廉洪喜 2 years ago
parent
commit
f3080c5f03
  1. 4
      win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java
  2. 43
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/ProductscrapRequestMainController.java
  3. 12
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/vo/ProductscrapRequestImportVO.java
  4. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/vo/ProductscrapRequestMainBaseVO.java
  5. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/vo/ProductscrapRequestMainImportVO.java
  6. 8
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/vo/ProductscrapRequestMainUpdateReqVO.java
  7. 8
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productscrapRequest/ProductscrapRequestDetailConvert.java
  8. 20
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productscrapRequest/ProductscrapRequestMainConvert.java
  9. 322
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productscrapRequest/ProductscrapRequestMainServiceImpl.java

4
win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java

@ -818,6 +818,10 @@ public interface ErrorCodeConstants {
ErrorCode UOM_ERROR = new ErrorCode(1_000_300_000, "计量单位单位应是【{}】"); ErrorCode UOM_ERROR = new ErrorCode(1_000_300_000, "计量单位单位应是【{}】");
ErrorCode UOM_ERRORR = new ErrorCode(1_000_300_001, "计量单位【{}】错误,应该是【{}】");
ErrorCode QTY_ERROR = new ErrorCode(1_000_301_000, "发货数量【{}】大于订单号【{}】、订单行【{}】、物品代码【{}】的未发货数量【{}】"); ErrorCode QTY_ERROR = new ErrorCode(1_000_301_000, "发货数量【{}】大于订单号【{}】、订单行【{}】、物品代码【{}】的未发货数量【{}】");
ErrorCode QTY_ERRORR = new ErrorCode(1_000_301_001, "上架数量【{}】不能大于库存数量【{}】");
} }

43
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/ProductscrapRequestMainController.java

@ -2,24 +2,21 @@ package com.win.module.wms.controller.productscrapRequest;
import com.win.framework.common.pojo.CommonResult; import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.dict.core.util.DictFrameworkUtils;
import com.win.framework.excel.core.util.ConvertUtil; import com.win.framework.excel.core.util.ConvertUtil;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.framework.excel.core.util.ConvertUtil;
import com.win.framework.excel.core.util.ExcelUtils; import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.productscrapRequest.vo.*; import com.win.module.wms.controller.productscrapRequest.vo.*;
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestImportErrorVO; import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestImportVO;
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestMainCreateReqVO;
import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.Parameters;
import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestMainConvert; import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestMainConvert;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO; import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO;
import com.win.module.wms.service.productscrapRequest.ProductscrapRequestMainService; import com.win.module.wms.service.productscrapRequest.ProductscrapRequestMainService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -27,36 +24,17 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.*;
import javax.servlet.http.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.common.pojo.CommonResult.success;
import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.win.module.wms.controller.productscrapRequest.vo.*;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO;
import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestMainConvert;
import com.win.module.wms.service.productscrapRequest.ProductscrapRequestMainService;
import org.springframework.web.multipart.MultipartFile;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
import static com.win.module.wms.enums.DictTypeConstants.INVENTORY_STATUS;
@Tag(name = "管理后台 - 制品报废申请主") @Tag(name = "管理后台 - 制品报废申请主")
@RestController @RestController
@ -153,14 +131,17 @@ public class ProductscrapRequestMainController {
@Operation(summary = "获得导入制品报废申请信息模板") @Operation(summary = "获得导入制品报废申请信息模板")
public void importTemplate(HttpServletResponse response) throws IOException { public void importTemplate(HttpServletResponse response) throws IOException {
List<ProductscrapRequestMainImportVO> list = new ArrayList<>(); List<ProductscrapRequestImportVO> list = new ArrayList<>();
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] inventoryStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.INVENTORY_STATUS);
ExcelUtils.write(response, "制品报废申请信息导入模板.xlsx", "制品报废申请信息列表", ProductscrapRequestMainImportVO.class, list); mapDropDown.put(3, inventoryStatus);
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(6, uom);
ExcelUtils.write(response, "制品报废申请信息导入模板.xlsx", "制品报废申请信息列表", ProductscrapRequestImportVO.class, list,mapDropDown);
} }
@PostMapping("/import") @PostMapping("/import")
@Operation(summary = "导入采购索赔基本信息") @Operation(summary = "导入制品报废申请基本信息")
@Parameters({ @Parameters({
@Parameter(name = "file", description = "Excel 文件", required = true), @Parameter(name = "file", description = "Excel 文件", required = true),
@Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"),
@ -178,7 +159,7 @@ public class ProductscrapRequestMainController {
Map<String, Object> returnMap = new HashMap<>(); Map<String, Object> returnMap = new HashMap<>();
returnMap.put("errorCount", errorList.size()); returnMap.put("errorCount", errorList.size());
if(!errorList.isEmpty()) { if(!errorList.isEmpty()) {
String url = ExcelUtils.writeLocalFile("采购索赔基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList); String url = ExcelUtils.writeLocalFile("制品报废申请基本信息导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xlsx", "错误列表", errorList);
returnMap.put("errorFile", url); returnMap.put("errorFile", url);
} }
return success(returnMap); return success(returnMap);

12
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/vo/ProductscrapRequestImportVO.java

@ -28,20 +28,19 @@ import java.time.LocalDateTime;
public class ProductscrapRequestImportVO { public class ProductscrapRequestImportVO {
@ExcelProperty("包装号") @ExcelProperty("包装号")
@NotBlank(message = "包装号不能为空")
private String packingNumber; private String packingNumber;
@ExcelProperty("器具号") @ExcelProperty("器具号")
private String containerNumber; private String containerNumber;
@ExcelProperty("批次") @ExcelProperty("批次")
@NotBlank(message = "批次不能为空")
private String batch; private String batch;
@ExcelProperty(value = "库存状态", converter = DictConvert.class) @ExcelProperty(value = "库存状态", converter = DictConvert.class)
@NotBlank(message = "库存状态不能为空") @DictFormat(DictTypeConstants.INVENTORY_STATUS)
@DictFormat("inventory_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String inventoryStatus; private String inventoryStatus;
@ExcelProperty("物品代码") @ExcelProperty("物品代码")
@ -52,12 +51,11 @@ public class ProductscrapRequestImportVO {
private BigDecimal qty; private BigDecimal qty;
@ExcelProperty(value = "计量单位", converter = DictConvert.class) @ExcelProperty(value = "计量单位", converter = DictConvert.class)
@DictFormat("uom") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 @DictFormat(DictTypeConstants.UOM)
private String uom; private String uom;
@ExcelProperty("来源库位代码") @ExcelProperty("来源库位代码")
@NotBlank(message = "来源库位代码不能为空") private String fromLocationCode;
private String fromlocationcode;

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/vo/ProductscrapRequestMainBaseVO.java

@ -1,5 +1,6 @@
package com.win.module.wms.controller.productscrapRequest.vo; package com.win.module.wms.controller.productscrapRequest.vo;
import com.win.framework.excel.core.annotations.OnlyOne;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
@ -27,6 +28,7 @@ public class ProductscrapRequestMainBaseVO {
private String fromWarehouseCode; private String fromWarehouseCode;
@Schema(description = "单据号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "单据号", requiredMode = Schema.RequiredMode.REQUIRED)
@OnlyOne
@NotNull(message = "单据号不能为空") @NotNull(message = "单据号不能为空")
private String number; private String number;

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/vo/ProductscrapRequestMainImportVO.java

@ -1,6 +1,9 @@
package com.win.module.wms.controller.productscrapRequest.vo; package com.win.module.wms.controller.productscrapRequest.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.win.framework.excel.core.annotations.DictFormat;
import com.win.framework.excel.core.convert.DictConvert;
import com.win.module.wms.enums.DictTypeConstants;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -34,7 +37,8 @@ public class ProductscrapRequestMainImportVO {
@ExcelProperty("数量") @ExcelProperty("数量")
private String qty; private String qty;
@ExcelProperty("记录单位") @ExcelProperty(value = "记录单位", converter = DictConvert.class)
@DictFormat(DictTypeConstants.UOM)
private String uom ; private String uom ;
@ExcelProperty("来源库位") @ExcelProperty("来源库位")

8
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productscrapRequest/vo/ProductscrapRequestMainUpdateReqVO.java

@ -1,12 +1,18 @@
package com.win.module.wms.controller.productscrapRequest.vo; package com.win.module.wms.controller.productscrapRequest.vo;
import com.win.framework.excel.core.annotations.SubObject;
import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailUpdateReqVO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.List;
@Schema(description = "管理后台 - 制品报废申请主更新 Request VO") @Schema(description = "管理后台 - 制品报废申请主更新 Request VO")
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true) @ToString(callSuper = true)
public class ProductscrapRequestMainUpdateReqVO extends ProductscrapRequestMainBaseVO { public class ProductscrapRequestMainUpdateReqVO extends ProductscrapRequestMainBaseVO {
@SubObject
@Schema(description = "子表数据")
private List<ProductscrapRequestDetailUpdateReqVO> subList;
} }

8
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productscrapRequest/ProductscrapRequestDetailConvert.java

@ -1,7 +1,13 @@
package com.win.module.wms.convert.productscrapRequest; package com.win.module.wms.convert.productscrapRequest;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.issueRequest.vo.IssueRequestDetailUpdateReqVO;
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayImportErrorVO;
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestDetailCreateReqVO;
import com.win.module.wms.controller.productputawayRequest.vo.ProductputawayRequestMainCreateReqVO;
import com.win.module.wms.controller.productscrapRequest.vo.*; import com.win.module.wms.controller.productscrapRequest.vo.*;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO;
import com.win.module.wms.dal.dataobject.productputawayRequest.ProductputawayRequestDetailDO;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestDetailDO; import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestDetailDO;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO; import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@ -35,6 +41,8 @@ public interface ProductscrapRequestDetailConvert {
List<ProductscrapRequestDetailDO> convertList03(List<ProductscrapRequestDetailCreateReqVO> list); List<ProductscrapRequestDetailDO> convertList03(List<ProductscrapRequestDetailCreateReqVO> list);
List<ProductscrapRequestDetailDO> convertList05(List<ProductscrapRequestDetailUpdateReqVO> list);
ProductscrapRequestImportErrorVO convert(ProductscrapRequestMainCreateReqVO mainVo, ProductscrapRequestDetailDO detailVo); ProductscrapRequestImportErrorVO convert(ProductscrapRequestMainCreateReqVO mainVo, ProductscrapRequestDetailDO detailVo);
ProductscrapRequestDetailCreateReqVO convert1(ProductscrapRequestDetailDO bean); ProductscrapRequestDetailCreateReqVO convert1(ProductscrapRequestDetailDO bean);

20
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productscrapRequest/ProductscrapRequestMainConvert.java

@ -4,11 +4,16 @@ import java.util.*;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.productscrapRequest.vo.ProductscrapRequestMainCreateReqVO; import com.win.module.wms.controller.issueRequest.vo.IssueRequestImportErrorVO;
import com.win.module.wms.controller.productscrapRequest.vo.ProductscrapRequestMainExcelVO; import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainBaseVO;
import com.win.module.wms.controller.productscrapRequest.vo.ProductscrapRequestMainRespVO; import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainCreateReqVO;
import com.win.module.wms.controller.productscrapRequest.vo.ProductscrapRequestMainUpdateReqVO; import com.win.module.wms.controller.productscrapRequest.vo.*;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestDetailDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO; import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO;
@ -24,6 +29,8 @@ public interface ProductscrapRequestMainConvert {
ProductscrapRequestMainDO convert(ProductscrapRequestMainCreateReqVO bean); ProductscrapRequestMainDO convert(ProductscrapRequestMainCreateReqVO bean);
ProductscrapRequestMainDO convert( ProductscrapRequestMainBaseVO bean);
ProductscrapRequestMainDO convert(ProductscrapRequestMainUpdateReqVO bean); ProductscrapRequestMainDO convert(ProductscrapRequestMainUpdateReqVO bean);
ProductscrapRequestMainRespVO convert(ProductscrapRequestMainDO bean); ProductscrapRequestMainRespVO convert(ProductscrapRequestMainDO bean);
@ -34,4 +41,9 @@ public interface ProductscrapRequestMainConvert {
List<ProductscrapRequestMainExcelVO> convertList02(List<ProductscrapRequestMainDO> list); List<ProductscrapRequestMainExcelVO> convertList02(List<ProductscrapRequestMainDO> list);
/* @Mappings({
@Mapping(source = "mainVo.number", target = "number"),
})*/
ProductscrapRequestImportErrorVO convert(ProductscrapRequestMainCreateReqVO mainVo, ProductscrapRequestDetailDO detailDo);
} }

322
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productscrapRequest/ProductscrapRequestMainServiceImpl.java

@ -4,13 +4,22 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.exceptions.UtilException;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.util.validation.ValidationUtils;
import com.win.framework.common.pojo.PageResult; import com.win.framework.common.pojo.PageResult;
import com.win.framework.dict.core.util.DictFrameworkUtils; 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.system.api.dict.DictDataApi; import com.win.module.system.api.dict.DictDataApi;
import com.win.module.system.api.dict.dto.DictDataRespDTO; import com.win.module.system.api.dict.dto.DictDataRespDTO;
import com.win.module.system.api.serialnumber.SerialNumberApi; import com.win.module.system.api.serialnumber.SerialNumberApi;
import com.win.module.system.enums.serialNumber.RuleCodeEnum; import com.win.module.system.enums.serialNumber.RuleCodeEnum;
import com.win.module.wms.controller.issueRequest.vo.*;
import com.win.module.wms.controller.productscrapRequest.vo.*; import com.win.module.wms.controller.productscrapRequest.vo.*;
import com.win.module.wms.convert.issueRequest.IssueRequestDetailConvert;
import com.win.module.wms.convert.issueRequest.IssueRequestMainConvert;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestDetailDO;
import com.win.module.wms.dal.dataobject.issueRequest.IssueRequestMainDO;
import com.win.module.wms.dal.mysql.productscrapRequest.*;
import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestDetailConvert; import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestDetailConvert;
import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestMainConvert; import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestMainConvert;
import com.win.module.wms.dal.dataobject.balance.BalanceDO; import com.win.module.wms.dal.dataobject.balance.BalanceDO;
@ -22,6 +31,7 @@ import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO;
import com.win.module.wms.dal.mysql.productscrapRequest.ProductscrapRequestDetailMapper; import com.win.module.wms.dal.mysql.productscrapRequest.ProductscrapRequestDetailMapper;
import com.win.module.wms.dal.mysql.productscrapRequest.ProductscrapRequestMainMapper; import com.win.module.wms.dal.mysql.productscrapRequest.ProductscrapRequestMainMapper;
import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.enums.DictTypeConstants;
import com.win.module.wms.enums.request.RequestStatusEnum;
import com.win.module.wms.service.itembasic.ItembasicService; import com.win.module.wms.service.itembasic.ItembasicService;
import com.win.module.wms.service.location.LocationService; import com.win.module.wms.service.location.LocationService;
import com.win.module.wms.service.requestsetting.RequestsettingService; import com.win.module.wms.service.requestsetting.RequestsettingService;
@ -31,17 +41,34 @@ import com.win.module.wms.util.JobUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import com.win.module.wms.service.itembasic.ItembasicService.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.productscrapRequest.vo.*;
import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestDetailConvert;
import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestMainConvert;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestDetailDO;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO;
import com.win.module.wms.dal.mysql.productscrapRequest.ProductscrapRequestDetailMapper;
import com.win.module.wms.dal.mysql.productscrapRequest.ProductscrapRequestMainMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import javax.validation.Validator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTSCRAP_REQUEST_MAIN_NOT_EXISTS; import static com.win.module.wms.enums.ErrorCodeConstants.*;
import static com.win.module.wms.enums.ErrorCodeConstants.PRODUCTSCRAP_REQUEST_NOT_EXISTS;
/** /**
* 制品报废申请主 Service 实现类 * 制品报废申请主 Service 实现类
@ -55,6 +82,9 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
@Resource @Resource
private ProductscrapRequestMainMapper productscrapRequestMainMapper; private ProductscrapRequestMainMapper productscrapRequestMainMapper;
@Resource
private Validator validator;
@Resource @Resource
private ProductscrapRequestDetailMapper productscrapRequestDetailMapper; private ProductscrapRequestDetailMapper productscrapRequestDetailMapper;
@ -66,6 +96,8 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
@Resource @Resource
private JobUtils jobUtils; private JobUtils jobUtils;
@Resource
private TrendsApi trendsApi;
@Resource @Resource
private ItembasicService itembasicService; private ItembasicService itembasicService;
@ -85,13 +117,69 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
@Override @Override
public Long createProductscrapRequestMain(ProductscrapRequestMainCreateReqVO createReqVO) { public Long createProductscrapRequestMain(ProductscrapRequestMainCreateReqVO createReqVO) {
// 插入 RequestsettingDO requestsettingDO = new RequestsettingDO();
ProductscrapRequestMainDO productscrapRequestMain = ProductscrapRequestMainConvert.INSTANCE.convert(createReqVO); ProductscrapRequestMainDO productscrapRequestMainDO = validatorToCreate(createReqVO, requestsettingDO);
productscrapRequestMainMapper.insert(productscrapRequestMain); //调用自动执行方法
// 返回 if (RequestStatusEnum.HANDLING.getCode().equals(productscrapRequestMainDO.getStatus())) {
return productscrapRequestMain.getId();
}
trendsApi.createTrends(requestsettingDO.getId(), "IssueRequest", "增加了发料申请", TrendsTypeEnum.CREATE);
return productscrapRequestMainDO.getId();
} }
private ProductscrapRequestMainDO validatorToCreate(ProductscrapRequestMainCreateReqVO createReqVO, RequestsettingDO requestsettingDO) {
BusinesstypeDO businesstypeDO = new BusinesstypeDO();
ProductscrapRequestMainDO productscrapRequestMainDO = validateMainMethod(createReqVO, businesstypeDO, requestsettingDO);
//子表校验
List<ProductscrapRequestDetailCreateReqVO> subList = createReqVO.getSubList();
List<ProductscrapRequestDetailDO> subDOList = ProductscrapRequestDetailConvert.INSTANCE.convertList03(subList);
for (ProductscrapRequestDetailDO productscrapRequestDetailDO : subDOList) {
validateDetailMethod(productscrapRequestDetailDO, businesstypeDO, productscrapRequestMainDO);
}
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode());
productscrapRequestMainDO.setNumber(number);
productscrapRequestMainMapper.insert(productscrapRequestMainDO);
for (ProductscrapRequestDetailDO productscrapRequestDetailDO : subDOList) {
productscrapRequestDetailDO.setMasterId(productscrapRequestMainDO.getId());
productscrapRequestDetailDO.setNumber(productscrapRequestMainDO.getNumber());
}
productscrapRequestDetailMapper.insertBatch(subDOList);
return productscrapRequestMainDO;
}
private void validateDetailMethod(ProductscrapRequestDetailDO productscrapRequestDetailDO, BusinesstypeDO businesstypeDO, ProductscrapRequestMainDO productscrapRequestMainDO) {
ItembasicDO itembasic = validatorItembasic(productscrapRequestDetailDO.getItemCode());
productscrapRequestDetailDO.setItemDesc1(itembasic.getDesc1());
productscrapRequestDetailDO.setItemDesc2(itembasic.getDesc2());
productscrapRequestDetailDO.setItemName(itembasic.getName());
productscrapRequestDetailDO.setProjectCode(itembasic.getProject());
Isuom(productscrapRequestDetailDO.getUom(), itembasic.getUom());
jobUtils.selectItembasicExist(itembasic.getType(), businesstypeDO);
jobUtils.ifInToLocationType(productscrapRequestDetailDO.getFromLocationCode(), businesstypeDO);
jobUtils.ifOutInventoryStatuses(productscrapRequestDetailDO.getInventoryStatus(), businesstypeDO);
List<String> business = validatorbusinessbasic(productscrapRequestDetailDO.getInventoryStatus());
List<BalanceDO> balance = validatorbalance(productscrapRequestDetailDO.getItemCode(), productscrapRequestDetailDO.getPackingNumber(),
productscrapRequestDetailDO.getBatch(), productscrapRequestDetailDO.getFromLocationCode(), business);
BalanceDO blance1 = balance.get(0);
isqty(productscrapRequestDetailDO.getQty(), blance1.getQty());
}
private ProductscrapRequestMainDO validateMainMethod(ProductscrapRequestMainBaseVO baseVO, BusinesstypeDO businesstypeDO, RequestsettingDO requestsettingDO) {
ProductscrapRequestMainDO productscrapRequestMainDO = ProductscrapRequestMainConvert.INSTANCE.convert(baseVO);
productscrapRequestMainDO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
productscrapRequestMainDO.setRequestTime(LocalDateTime.now());
requestsettingDO = requestsettingService.selectRequestsettingExist("ProductScrapRequest");
productscrapRequestMainDO.setAutoAgree(requestsettingDO.getAutoAgree());
productscrapRequestMainDO.setAutoCommit(requestsettingDO.getAutoCommit());
productscrapRequestMainDO.setAutoExecute(requestsettingDO.getAutoExecute());
productscrapRequestMainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord());
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductScrapRequest");
productscrapRequestMainDO.setBusinessType(businesstypeDO.getCode());
productscrapRequestMainDO.setFromLocationTypes(businesstypeDO.getInLocationTypes());
productscrapRequestMainDO.setFromAreaCodes(businesstypeDO.getInAreaCodes());
return productscrapRequestMainDO;
}
@VisibleForTesting @VisibleForTesting
private void validateProductscrapExists(Long id) { private void validateProductscrapExists(Long id) {
@ -123,7 +211,9 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
@Override @Override
public PageResult<ProductscrapRequestMainDO> getProductscrapRequestMainSenior(CustomConditions conditions) { public PageResult<ProductscrapRequestMainDO> getProductscrapRequestMainSenior(CustomConditions conditions) {
return productscrapRequestMainMapper.selectSenior(conditions); return productscrapRequestMainMapper.selectSenior(conditions);
} }
private void validateProductscrapRequestMainExists(Long id) { private void validateProductscrapRequestMainExists(Long id) {
@ -152,142 +242,166 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
return productscrapRequestMainMapper.selectList(exportReqVO); return productscrapRequestMainMapper.selectList(exportReqVO);
} }
public String Isuom(String uom1, String uom2) { private String validateIssueRequestMainImport(ProductscrapRequestMainDO mainDo, BusinesstypeDO businesstypeDO) {
StringBuilder message = new StringBuilder();
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
mainDo.setRequestTime(LocalDateTime.now());
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ProductScrapRequest");
if (requestsettingDO == null) {
message.append("未查找到制品报废申请的相关申请设置");
} else {
mainDo.setAutoAgree(requestsettingDO.getAutoAgree());
mainDo.setAutoCommit(requestsettingDO.getAutoCommit());
mainDo.setAutoExecute(requestsettingDO.getAutoExecute());
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord());
}
if (businesstypeDO == null) {
message.append("根据单据设置未查找到制品报废申请申请的相关业务类型");
} else {
mainDo.setBusinessType(businesstypeDO.getCode());
mainDo.setFromLocationTypes(businesstypeDO.getInLocationTypes());
mainDo.setFromAreaCodes(businesstypeDO.getInAreaCodes());
}
return message.toString();
}
public void Isuom(String uom1, String uom2) {
DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictValue(uom1); DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictValue(uom1);
String value = dictDataRespDTO.getLabel(); String value = dictDataRespDTO.getLabel();
if (uom2.equals(value)) { DictDataRespDTO dictDataRespDTO1 = dictDataApi.selectDictValue(uom2);
return "ture"; String value1 = dictDataRespDTO1.getLabel();
} else { if (!value1.equals(value)) {
throw new UtilException("计量单位" + uom2 + "错误,应该是" + value); throw exception(UOM_ERRORR, value1, value);
} }
} }
public String isqty(BigDecimal qty1, BigDecimal qty2) { private String isqty(BigDecimal qty1, BigDecimal qty2) {
if (qty1.compareTo(qty2) < 0) { if (qty1.compareTo(qty2) < 0) {
return "ture"; return "ture";
} else { } else {
throw new UtilException("上架数量" + qty2 + "不能大于库存数量" + qty1); throw exception(QTY_ERRORR, qty2, qty1);
} }
} }
public List<ProductscrapRequestImportErrorVO> importProductscrapRequestList(List<ProductscrapRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { private ItembasicDO validatorItembasic(String itemCode) {
if (CollUtil.isEmpty(datas)) { return itembasicService.selectItembasic(itemCode);
throw exception(PRODUCTSCRAP_REQUEST_NOT_EXISTS);
} }
List<ProductscrapRequestImportErrorVO> errorList = new ArrayList<>();
datas.forEach(createReqVO -> {
String massage = "";
boolean isError = false;
List<ProductscrapRequestDetailCreateReqVO> subList = createReqVO.getSubList(); private List<String> validatorbusinessbasic(String inventoryStatus) {
List<ProductscrapRequestDetailDO> subDOList = ProductscrapRequestDetailConvert.INSTANCE.convertList03(subList); DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictValue(inventoryStatus);
for (ProductscrapRequestDetailDO detailDO : subDOList) { String value = dictDataRespDTO.getValue();
if (mode != null) { String[] businessArray = value.split(",");
try { List<String> business = Arrays.asList(businessArray);
validateProductscrapExists(null); return business;
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
} }
try {
ItembasicDO itembasic = itembasicService.selectItembasic(detailDO.getItemCode()); private List<BalanceDO> validatorbalance(String itemCode, String packingnumber, String batch, String fromLocationCode, List<String> business) {
detailDO.setItemDesc1(itembasic.getDesc1()); List<BalanceDO> balabce = jobUtils.selectlocationReturnManagementAccuracy(itemCode, packingnumber, batch, fromLocationCode, business);
detailDO.setItemDesc2(itembasic.getDesc2()); return balabce;
detailDO.setItemName(itembasic.getName());
detailDO.setProjectCode(itembasic.getProject());
try {
Isuom(detailDO.getUom(), itembasic.getUom());
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
} }
private String validateProductscrapvRequestDetailImport(ProductscrapRequestDetailDO detailDo, ProductscrapRequestMainDO mainDo, BusinesstypeDO businesstypeDO) {
StringBuilder message = new StringBuilder();
try { try {
BusinesstypeDO businesstype = jobUtils.selectDocumentSettingFromBusinessType("ProductScrapRequest"); ItembasicDO itembasic = validatorItembasic(detailDo.getItemCode());
createReqVO.setBusinessType(businesstype.getCode()); detailDo.setItemDesc1(itembasic.getDesc1());
createReqVO.setFromLocationTypes(businesstype.getInLocationTypes()); detailDo.setItemDesc2(itembasic.getDesc2());
createReqVO.setFromAreaCodes(businesstype.getInAreaCodes()); detailDo.setItemName(itembasic.getName());
detailDo.setProjectCode(itembasic.getProject());
try { try {
jobUtils.selectItembasicExist(itembasic.getType(), businesstype); Isuom(detailDo.getUom(), itembasic.getUom());
} catch (Exception ex) { } catch (Exception ex) {
isError = true; message.append(ex.getMessage()).append(",");
massage += ex.getMessage() + ",";
} }
try { try {
jobUtils.ifInToLocationType(detailDO.getFromLocationCode(), businesstype); jobUtils.selectItembasicExist(detailDo.getItemCode(), businesstypeDO);
} catch (Exception ex) { } catch (Exception ex) {
isError = true; message.append(ex.getMessage()).append(",");
massage += ex.getMessage() + ",";
} }
try { try {
jobUtils.ifOutInventoryStatuses(detailDO.getInventoryStatus(), businesstype); jobUtils.ifInToLocationType(detailDo.getFromLocationCode(), businesstypeDO);
} catch (Exception ex) { } catch (Exception ex) {
isError = true; message.append(ex.getMessage()).append(",");
massage += ex.getMessage() + ",";
} }
try {
jobUtils.ifOutInventoryStatuses(detailDo.getInventoryStatus(), businesstypeDO);
} catch (Exception ex) { } catch (Exception ex) {
isError = true; message.append(ex.getMessage()).append(",");
massage += ex.getMessage() + ",";
} }
} catch (Exception ex) { } catch (Exception ex) {
isError = true; message.append(ex.getMessage()).append(",");
massage += ex.getMessage() + ",";
} }
try { try {
DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictLabel(detailDO.getInventoryStatus()); List<String> business = validatorbusinessbasic(detailDo.getInventoryStatus());
String value = dictDataRespDTO.getValue(); try {
String[] businessArray = value.split(","); List<BalanceDO> balance = validatorbalance(detailDo.getItemCode(), detailDo.getPackingNumber(),
List<String> business = Arrays.asList(businessArray); detailDo.getBatch(), detailDo.getFromLocationCode(), business);
List<BalanceDO> balance = jobUtils.selectlocationReturnManagementAccuracy(detailDO.getItemCode(), detailDO.getPackingNumber(),
detailDO.getBatch(), detailDO.getFromLocationCode(), business);
try { try {
for(BalanceDO balance2 :balance){
mainDo.setFromWarehouseCode(balance2.getWarehouseCode());
mainDo.setDueTime(balance2.getExpireDate());
}
BalanceDO blance1 = balance.get(0); BalanceDO blance1 = balance.get(0);
isqty(detailDO.getQty(), blance1.getQty()); isqty(detailDo.getQty(), blance1.getQty());
} catch (Exception ex) { } catch (Exception ex) {
isError = true; message.append(ex.getMessage()).append(",");
massage += ex.getMessage() + ",";
} }
} catch (Exception ex) { } catch (Exception ex) {
isError = true; message.append(ex.getMessage()).append(",");
massage += ex.getMessage() + ",";
}
if (isError) {
ProductscrapRequestImportErrorVO importVO = ProductscrapRequestDetailConvert.INSTANCE.convert(createReqVO, detailDO);
importVO.setImportStatus("失败");
importVO.setImportRemark(massage.substring(0, massage.length() - 1));
errorList.add(importVO);
}
if (!isError) {
detailDO.setNumber(createReqVO.getNumber());
detailDO.setMasterId(createReqVO.getId());
}
if (!errorList.isEmpty()) {
// 判断如果不存在,在进行插入
RequestsettingDO requestsetting = requestsettingService.selectRequestsettingExist("ProductPutawayRequest");
if (requestsetting != null) {
createReqVO.setAutoCommit(requestsetting.getAutoCommit());
createReqVO.setAutoAgree(requestsetting.getAutoAgree());
createReqVO.setAutoExecute(requestsetting.getAutoExecute());
createReqVO.setDirectCreateRecord(requestsetting.getDirectCreateRecord());
}
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode());
createReqVO.setNumber(number);
ProductscrapRequestMainDO createObj = ProductscrapRequestMainConvert.INSTANCE.convert(createReqVO);
productscrapRequestMainMapper.insert(createObj);
productscrapRequestDetailMapper.insertBatch(subDOList);
}
} }
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
} }
}); try {
//错误不为空并非部分更新,手工回滚 ValidationUtils.validate(validator, mainDo);
if (!errorList.isEmpty() && !updatePart) { } catch (Exception ex) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); message.append(ex.getMessage()).append(",");
} }
return errorList; return message.toString();
} }
public List<ProductscrapRequestImportErrorVO> importProductscrapRequestList(List<ProductscrapRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) {
if (CollUtil.isEmpty(datas)) {
throw exception(PRODUCTSCRAP_REQUEST_NOT_EXISTS);
} }
List<ProductscrapRequestImportErrorVO> errorList = new ArrayList<>();
datas.forEach(createReqVO -> {
BusinesstypeDO businesstypeDO = businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductScrapRequest");
ProductscrapRequestMainDO mainDo = ProductscrapRequestMainConvert.INSTANCE.convert(createReqVO);
String messageMain = validateIssueRequestMainImport(mainDo, businesstypeDO);
List<ProductscrapRequestDetailCreateReqVO> subList = createReqVO.getSubList();
List<ProductscrapRequestDetailDO> subDOList = ProductscrapRequestDetailConvert.INSTANCE.convertList03(subList);
// 是否有错误数据
boolean flag = true;
for (ProductscrapRequestDetailDO detailDO : subDOList) {
String messageDetail = validateProductscrapvRequestDetailImport(detailDO, mainDo, businesstypeDO);
if (!"".equals(messageMain) ||!"".equals(messageDetail) ) {
ProductscrapRequestImportErrorVO importErrorVO = ProductscrapRequestMainConvert.INSTANCE.convert(createReqVO, detailDO);
importErrorVO.setImportStatus("失败");
messageMain = messageMain + messageDetail;
importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1));
errorList.add(importErrorVO);
flag = false;
}
}
//写入数据
if (flag) {
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode());
mainDo.setNumber(number);
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
productscrapRequestMainMapper.insert(mainDo);
for (ProductscrapRequestDetailDO detailDO : subDOList) {
detailDO.setMasterId(mainDo.getId());
detailDO.setNumber(number);
}
productscrapRequestDetailMapper.insertBatch(subDOList);
}
});
return errorList;
}
}

Loading…
Cancel
Save