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. 354
      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_ERRORR = new ErrorCode(1_000_300_001, "计量单位【{}】错误,应该是【{}】");
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.CustomConditions;
import com.win.framework.dict.core.util.DictFrameworkUtils;
import com.win.framework.excel.core.util.ConvertUtil;
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.operatelog.core.annotations.OperateLog;
import com.win.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.productscrapRequest.vo.*;
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestImportErrorVO;
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestImportVO;
import com.win.module.wms.controller.purchaseclaimRequest.vo.PurchaseclaimRequestMainCreateReqVO;
import com.win.module.wms.enums.DictTypeConstants;
import io.swagger.v3.oas.annotations.Parameters;
import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestMainConvert;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO;
import com.win.module.wms.service.productscrapRequest.ProductscrapRequestMainService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
@ -27,36 +24,17 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
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.ZoneOffset;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
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.module.wms.enums.DictTypeConstants.INVENTORY_STATUS;
@Tag(name = "管理后台 - 制品报废申请主")
@RestController
@ -153,14 +131,17 @@ public class ProductscrapRequestMainController {
@Operation(summary = "获得导入制品报废申请信息模板")
public void importTemplate(HttpServletResponse response) throws IOException {
List<ProductscrapRequestMainImportVO> list = new ArrayList<>();
ExcelUtils.write(response, "制品报废申请信息导入模板.xlsx", "制品报废申请信息列表", ProductscrapRequestMainImportVO.class, list);
List<ProductscrapRequestImportVO> list = new ArrayList<>();
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] inventoryStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.INVENTORY_STATUS);
mapDropDown.put(3, inventoryStatus);
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(6, uom);
ExcelUtils.write(response, "制品报废申请信息导入模板.xlsx", "制品报废申请信息列表", ProductscrapRequestImportVO.class, list,mapDropDown);
}
@PostMapping("/import")
@Operation(summary = "导入采购索赔基本信息")
@Operation(summary = "导入制品报废申请基本信息")
@Parameters({
@Parameter(name = "file", description = "Excel 文件", required = true),
@Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"),
@ -178,7 +159,7 @@ public class ProductscrapRequestMainController {
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("errorCount", errorList.size());
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);
}
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 {
@ExcelProperty("包装号")
@NotBlank(message = "包装号不能为空")
private String packingNumber;
@ExcelProperty("器具号")
private String containerNumber;
@ExcelProperty("批次")
@NotBlank(message = "批次不能为空")
private String batch;
@ExcelProperty(value = "库存状态", converter = DictConvert.class)
@NotBlank(message = "库存状态不能为空")
@DictFormat("inventory_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@DictFormat(DictTypeConstants.INVENTORY_STATUS)
private String inventoryStatus;
@ExcelProperty("物品代码")
@ -52,12 +51,11 @@ public class ProductscrapRequestImportVO {
private BigDecimal qty;
@ExcelProperty(value = "计量单位", converter = DictConvert.class)
@DictFormat("uom") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@DictFormat(DictTypeConstants.UOM)
private String uom;
@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;
import com.win.framework.excel.core.annotations.OnlyOne;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -27,6 +28,7 @@ public class ProductscrapRequestMainBaseVO {
private String fromWarehouseCode;
@Schema(description = "单据号", requiredMode = Schema.RequiredMode.REQUIRED)
@OnlyOne
@NotNull(message = "单据号不能为空")
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;
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.Data;
import lombok.NoArgsConstructor;
@ -34,7 +37,8 @@ public class ProductscrapRequestMainImportVO {
@ExcelProperty("数量")
private String qty;
@ExcelProperty("记录单位")
@ExcelProperty(value = "记录单位", converter = DictConvert.class)
@DictFormat(DictTypeConstants.UOM)
private String uom ;
@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;
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 lombok.*;
import java.util.List;
@Schema(description = "管理后台 - 制品报废申请主更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
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;
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.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.ProductscrapRequestMainDO;
import org.mapstruct.Mapper;
@ -35,6 +41,8 @@ public interface ProductscrapRequestDetailConvert {
List<ProductscrapRequestDetailDO> convertList03(List<ProductscrapRequestDetailCreateReqVO> list);
List<ProductscrapRequestDetailDO> convertList05(List<ProductscrapRequestDetailUpdateReqVO> list);
ProductscrapRequestImportErrorVO convert(ProductscrapRequestMainCreateReqVO mainVo, ProductscrapRequestDetailDO detailVo);
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.module.wms.controller.productscrapRequest.vo.ProductscrapRequestMainCreateReqVO;
import com.win.module.wms.controller.productscrapRequest.vo.ProductscrapRequestMainExcelVO;
import com.win.module.wms.controller.productscrapRequest.vo.ProductscrapRequestMainRespVO;
import com.win.module.wms.controller.productscrapRequest.vo.ProductscrapRequestMainUpdateReqVO;
import com.win.module.wms.controller.issueRequest.vo.IssueRequestImportErrorVO;
import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainBaseVO;
import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainCreateReqVO;
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.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.productscrapRequest.ProductscrapRequestMainDO;
@ -24,6 +29,8 @@ public interface ProductscrapRequestMainConvert {
ProductscrapRequestMainDO convert(ProductscrapRequestMainCreateReqVO bean);
ProductscrapRequestMainDO convert( ProductscrapRequestMainBaseVO bean);
ProductscrapRequestMainDO convert(ProductscrapRequestMainUpdateReqVO bean);
ProductscrapRequestMainRespVO convert(ProductscrapRequestMainDO bean);
@ -34,4 +41,9 @@ public interface ProductscrapRequestMainConvert {
List<ProductscrapRequestMainExcelVO> convertList02(List<ProductscrapRequestMainDO> list);
/* @Mappings({
@Mapping(source = "mainVo.number", target = "number"),
})*/
ProductscrapRequestImportErrorVO convert(ProductscrapRequestMainCreateReqVO mainVo, ProductscrapRequestDetailDO detailDo);
}

354
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 com.google.common.annotations.VisibleForTesting;
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.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.dto.DictDataRespDTO;
import com.win.module.system.api.serialnumber.SerialNumberApi;
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.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.ProductscrapRequestMainConvert;
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.ProductscrapRequestMainMapper;
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.location.LocationService;
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.transaction.interceptor.TransactionAspectSupport;
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 java.math.BigDecimal;
import javax.validation.Validator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
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.PRODUCTSCRAP_REQUEST_NOT_EXISTS;
import static com.win.module.wms.enums.ErrorCodeConstants.*;
/**
* 制品报废申请主 Service 实现类
@ -55,6 +82,9 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
@Resource
private ProductscrapRequestMainMapper productscrapRequestMainMapper;
@Resource
private Validator validator;
@Resource
private ProductscrapRequestDetailMapper productscrapRequestDetailMapper;
@ -66,6 +96,8 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
@Resource
private JobUtils jobUtils;
@Resource
private TrendsApi trendsApi;
@Resource
private ItembasicService itembasicService;
@ -85,13 +117,69 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
@Override
public Long createProductscrapRequestMain(ProductscrapRequestMainCreateReqVO createReqVO) {
// 插入
ProductscrapRequestMainDO productscrapRequestMain = ProductscrapRequestMainConvert.INSTANCE.convert(createReqVO);
productscrapRequestMainMapper.insert(productscrapRequestMain);
// 返回
return productscrapRequestMain.getId();
RequestsettingDO requestsettingDO = new RequestsettingDO();
ProductscrapRequestMainDO productscrapRequestMainDO = validatorToCreate(createReqVO, requestsettingDO);
//调用自动执行方法
if (RequestStatusEnum.HANDLING.getCode().equals(productscrapRequestMainDO.getStatus())) {
}
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
private void validateProductscrapExists(Long id) {
@ -123,7 +211,9 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
@Override
public PageResult<ProductscrapRequestMainDO> getProductscrapRequestMainSenior(CustomConditions conditions) {
return productscrapRequestMainMapper.selectSenior(conditions);
}
private void validateProductscrapRequestMainExists(Long id) {
@ -152,142 +242,166 @@ public class ProductscrapRequestMainServiceImpl implements ProductscrapRequestMa
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);
String value = dictDataRespDTO.getLabel();
if (uom2.equals(value)) {
return "ture";
} else {
throw new UtilException("计量单位" + uom2 + "错误,应该是" + value);
DictDataRespDTO dictDataRespDTO1 = dictDataApi.selectDictValue(uom2);
String value1 = dictDataRespDTO1.getLabel();
if (!value1.equals(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) {
return "ture";
} else {
throw new UtilException("上架数量" + qty2 + "不能大于库存数量" + qty1);
throw exception(QTY_ERRORR, qty2, qty1);
}
}
private ItembasicDO validatorItembasic(String itemCode) {
return itembasicService.selectItembasic(itemCode);
}
private List<String> validatorbusinessbasic(String inventoryStatus) {
DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictValue(inventoryStatus);
String value = dictDataRespDTO.getValue();
String[] businessArray = value.split(",");
List<String> business = Arrays.asList(businessArray);
return business;
}
private List<BalanceDO> validatorbalance(String itemCode, String packingnumber, String batch, String fromLocationCode, List<String> business) {
List<BalanceDO> balabce = jobUtils.selectlocationReturnManagementAccuracy(itemCode, packingnumber, batch, fromLocationCode, business);
return balabce;
}
private String validateProductscrapvRequestDetailImport(ProductscrapRequestDetailDO detailDo, ProductscrapRequestMainDO mainDo, BusinesstypeDO businesstypeDO) {
StringBuilder message = new StringBuilder();
try {
ItembasicDO itembasic = validatorItembasic(detailDo.getItemCode());
detailDo.setItemDesc1(itembasic.getDesc1());
detailDo.setItemDesc2(itembasic.getDesc2());
detailDo.setItemName(itembasic.getName());
detailDo.setProjectCode(itembasic.getProject());
try {
Isuom(detailDo.getUom(), itembasic.getUom());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
jobUtils.selectItembasicExist(detailDo.getItemCode(), businesstypeDO);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
jobUtils.ifInToLocationType(detailDo.getFromLocationCode(), businesstypeDO);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
jobUtils.ifOutInventoryStatuses(detailDo.getInventoryStatus(), businesstypeDO);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
List<String> business = validatorbusinessbasic(detailDo.getInventoryStatus());
try {
List<BalanceDO> balance = validatorbalance(detailDo.getItemCode(), detailDo.getPackingNumber(),
detailDo.getBatch(), detailDo.getFromLocationCode(), business);
try {
for(BalanceDO balance2 :balance){
mainDo.setFromWarehouseCode(balance2.getWarehouseCode());
mainDo.setDueTime(balance2.getExpireDate());
}
BalanceDO blance1 = balance.get(0);
isqty(detailDo.getQty(), blance1.getQty());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
ValidationUtils.validate(validator, mainDo);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
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 -> {
String massage = "";
boolean isError = false;
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) {
if (mode != null) {
try {
validateProductscrapExists(null);
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
}
try {
ItembasicDO itembasic = itembasicService.selectItembasic(detailDO.getItemCode());
detailDO.setItemDesc1(itembasic.getDesc1());
detailDO.setItemDesc2(itembasic.getDesc2());
detailDO.setItemName(itembasic.getName());
detailDO.setProjectCode(itembasic.getProject());
try {
Isuom(detailDO.getUom(), itembasic.getUom());
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
}
try {
BusinesstypeDO businesstype = jobUtils.selectDocumentSettingFromBusinessType("ProductScrapRequest");
createReqVO.setBusinessType(businesstype.getCode());
createReqVO.setFromLocationTypes(businesstype.getInLocationTypes());
createReqVO.setFromAreaCodes(businesstype.getInAreaCodes());
try {
jobUtils.selectItembasicExist(itembasic.getType(), businesstype);
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
}
try {
jobUtils.ifInToLocationType(detailDO.getFromLocationCode(), businesstype);
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
}
try {
jobUtils.ifOutInventoryStatuses(detailDO.getInventoryStatus(), businesstype);
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
}
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
}
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
}
try {
DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictLabel(detailDO.getInventoryStatus());
String value = dictDataRespDTO.getValue();
String[] businessArray = value.split(",");
List<String> business = Arrays.asList(businessArray);
List<BalanceDO> balance = jobUtils.selectlocationReturnManagementAccuracy(detailDO.getItemCode(), detailDO.getPackingNumber(),
detailDO.getBatch(), detailDO.getFromLocationCode(), business);
try {
BalanceDO blance1 = balance.get(0);
isqty(detailDO.getQty(), blance1.getQty());
} catch (Exception ex) {
isError = true;
massage += ex.getMessage() + ",";
}
} catch (Exception ex) {
isError = true;
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);
}
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);
}
});
//错误不为空并非部分更新,手工回滚
if (!errorList.isEmpty() && !updatePart) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return errorList;
}
}

Loading…
Cancel
Save