Browse Source

到货校验新增/修改/导入的校验方法

master
chenfang 2 years ago
parent
commit
78b74473c7
  1. 6
      win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java
  2. 46
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/InspectRequestMainController.java
  3. 25
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestImportErrorVO.java
  4. 60
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestImportVO.java
  5. 2
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestMainBaseVO.java
  6. 8
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestMainCreateReqVO.java
  7. 7
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestMainUpdateReqVO.java
  8. 30
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/inspectRequest/InspectRequestDetailConvert.java
  9. 6
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/inspectRequest/InspectRequestMainConvert.java
  10. 1
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/customerreturnRequest/CustomerreturnRequestDetailMapper.java
  11. 1
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/deliverRequest/DeliverRequestDetailMapper.java
  12. 4
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/inspectRequest/InspectRequestMainMapper.java
  13. 13
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectRequest/InspectRequestMainService.java
  14. 438
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectRequest/InspectRequestMainServiceImpl.java
  15. 13
      win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java

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

@ -22,7 +22,7 @@ public interface ErrorCodeConstants {
ErrorCode ITEMBASIC_IS_PHANTOM_NOT_EXISTS = new ErrorCode(1_000_020_010, "虚零件不存在");
ErrorCode ITEMBASIC_ABC_CLASS_NOT_EXISTS = new ErrorCode(1_000_020_011, "ABC类不存在");
ErrorCode ITEMBASIC_TYPE_NOT_EXISTS = new ErrorCode(1_000_020_012, "类型不存在");
ErrorCode ITEMBASIC_VALIDITY_DAYS_NOT_EXISTS = new ErrorCode(1_000_020_013, "有效天数不存在{}");
ErrorCode ITEMBASIC_VALIDITY_DAYS_NOT_EXISTS = new ErrorCode(1_000_020_013, "有效天数不存在");
ErrorCode ITEMBASIC_AVAIABLE_NOT_EXISTS = new ErrorCode(1_000_020_014, "是否可用不存在");
ErrorCode ITEMBASIC_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_020_015, "导入物品基础信息不能为空");
ErrorCode ITEMBASIC_EXCEPTION = new ErrorCode(1_000_020_016, "物品基础信息错误:【{}】");
@ -428,6 +428,8 @@ public interface ErrorCodeConstants {
ErrorCode PURCHASERETURN_REQUEST_MAIN_NOT_EXISTS = new ErrorCode(1_000_075_000, "采购退货申请主不存在");
//采购退货申请子ErrorCode
ErrorCode PURCHASERETURN_REQUEST_DETAIL_NOT_EXISTS = new ErrorCode(1_000_075_001, "采购退货申请子不存在");
ErrorCode PURCHASERETURN_REQUEST_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_075_002, "采购退货申请导入数据不能为空");
//采购退货任务主ErrorCode
ErrorCode PURCHASERETURN_JOB_MAIN_NOT_EXISTS = new ErrorCode(1_000_076_000, "采购退货任务主不存在");
//采购退货任务子ErrorCode
@ -441,6 +443,7 @@ public interface ErrorCodeConstants {
ErrorCode INSPECT_REQUEST_MAIN_NOT_EXISTS = new ErrorCode(1_000_078_000, "检验申请主不存在");
//检验申请子ErrorCode
ErrorCode INSPECT_REQUEST_DETAIL_NOT_EXISTS = new ErrorCode(1_000_078_001, "检验申请子不存在");
ErrorCode INSPECT_REQUEST_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_078_002, "检验申请导入数据不能为空");
//检验任务主ErrorCode
ErrorCode INSPECT_JOB_MAIN_NOT_EXISTS = new ErrorCode(1_000_079_000, "检验任务主不存在");
//检验任务子ErrorCode
@ -454,6 +457,7 @@ public interface ErrorCodeConstants {
ErrorCode PUTAWAY_REQUEST_MAIN_NOT_EXISTS = new ErrorCode(1_000_081_000, "上架申请主不存在");
//上架申请子ErrorCode
ErrorCode PUTAWAY_REQUEST_DETAIL_NOT_EXISTS = new ErrorCode(1_000_081_001, "上架申请子不存在");
ErrorCode PUTAWAY_REQUEST_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_000_081_002, "上架申请导入数据不能为空");
//上架任务主ErrorCode
ErrorCode PUTAWAY_JOB_MAIN_NOT_EXISTS = new ErrorCode(1_000_082_000, "上架任务主不存在");
//上架任务子ErrorCode

46
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/InspectRequestMainController.java

@ -1,9 +1,13 @@
package com.win.module.wms.controller.inspectRequest;
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.module.system.api.user.AdminUserApi;
import com.win.module.system.api.user.dto.AdminUserRespDTO;
import com.win.module.wms.controller.inspectRequest.vo.*;
import com.win.module.wms.enums.DictTypeConstants;
import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -14,6 +18,8 @@ import io.swagger.v3.oas.annotations.Operation;
import javax.validation.*;
import javax.servlet.http.*;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.*;
import java.io.IOException;
@ -29,6 +35,7 @@ import static com.win.framework.operatelog.core.enums.OperateTypeEnum.*;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestMainDO;
import com.win.module.wms.convert.inspectRequest.InspectRequestMainConvert;
import com.win.module.wms.service.inspectRequest.InspectRequestMainService;
import org.springframework.web.multipart.MultipartFile;
@Tag(name = "管理后台 - 检验申请主")
@RestController
@ -120,4 +127,43 @@ public class InspectRequestMainController {
ExcelUtils.write(response, "检验申请主.xls", "数据", InspectRequestMainExcelVO.class, datas);
}
@GetMapping("/get-import-template")
@Operation(summary = "获得导入检验申请信息模板")
public void importTemplate(HttpServletResponse response) throws IOException {
// 手动创建导出 demo
List<InspectRequestImportVO> list = new ArrayList<>();
Map<Integer, String[]> mapDropDown = new HashMap<>();
String[] uom = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.UOM);
mapDropDown.put(8, uom);
String[] inventoryStatus = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.INVENTORY_STATUS);
mapDropDown.put(9, inventoryStatus);
// 输出
ExcelUtils.write(response, "检验申请信息导入模板.xlsx", "检验申请信息列表", InspectRequestImportVO.class, list, mapDropDown);
}
@PostMapping("/import")
@Operation(summary = "导入检验申请基本信息")
@Parameters({
@Parameter(name = "file", description = "Excel 文件", required = true),
@Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"),
@Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true")
})
@PreAuthorize("@ss.hasPermission('wms:inspect-request-main:import')")
public CommonResult<Map<String, Object>> importExcel(HttpServletResponse response,
@RequestParam("file") MultipartFile file,
@RequestParam(value = "mode") Integer mode,
@RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception {
List<InspectRequestImportVO> list = ExcelUtils.read(file, InspectRequestImportVO.class);
ConvertUtil<InspectRequestMainCreateReqVO> convertUtil = new ConvertUtil<>(InspectRequestMainCreateReqVO.class);
List<InspectRequestMainCreateReqVO> createReqVOList = convertUtil.invoke(list).getDataList();
List<InspectRequestImportErrorVO> errorList = inspectRequestMainService.importInspectRequestList(createReqVOList, mode, updatePart);
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);
returnMap.put("errorFile", url);
}
return success(returnMap);
}
}

25
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestImportErrorVO.java

@ -0,0 +1,25 @@
package com.win.module.wms.controller.inspectRequest.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* 供应商发票申请 Excel VO
*
* @author 超级管理员
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class InspectRequestImportErrorVO extends InspectRequestImportVO {
@ExcelProperty(value = "导入状态", index = 0)
private String importStatus;
@ExcelProperty(value = "导入说明", index = 1)
private String importRemark;
}

60
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestImportVO.java

@ -0,0 +1,60 @@
package com.win.module.wms.controller.inspectRequest.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;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* 供应商发票申请子 Excel VO
*
* @author 超级管理员
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class InspectRequestImportVO {
@ExcelProperty("单据号")
private String number;
@ExcelProperty("采购收货记录单号")
private String purchaseReceiptRecordNumber;
@ExcelProperty("订单号")
private String poNumber;
@ExcelProperty("订单行")
private String poLine;
@ExcelProperty("物品代码")
private String itemCode;
@ExcelProperty("包装号")
private String packingNumber;
@ExcelProperty("器具号")
private String containerNumber;
@ExcelProperty("批次")
private String batch;
@ExcelProperty(value = "计量单位", converter = DictConvert.class)
@DictFormat(DictTypeConstants.UOM)
private String uom;
@ExcelProperty(value = "库存状态", converter = DictConvert.class)
@DictFormat(DictTypeConstants.INVENTORY_STATUS)
private String inventoryStatus;
@ExcelProperty("来源库位")
private String fromLocationCode;
}

2
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestMainBaseVO.java

@ -1,5 +1,6 @@
package com.win.module.wms.controller.inspectRequest.vo;
import com.win.framework.excel.core.annotations.OnlyOne;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -30,6 +31,7 @@ public class InspectRequestMainBaseVO {
@NotNull(message = "供应商代码不能为空")
private String supplierCode;
@OnlyOne
@Schema(description = "单据号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "单据号不能为空")
private String number;

8
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestMainCreateReqVO.java

@ -1,12 +1,20 @@
package com.win.module.wms.controller.inspectRequest.vo;
import com.win.framework.excel.core.annotations.SubObject;
import com.win.module.wms.controller.purchasereturnRequest.vo.PurchasereturnRequestDetailCreateReqVO;
import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
@Schema(description = "管理后台 - 检验申请主创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class InspectRequestMainCreateReqVO extends InspectRequestMainBaseVO {
@SubObject
@Schema(description = "子表数据")
private List<InspectRequestDetailCreateReqVO> subList;
}

7
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectRequest/vo/InspectRequestMainUpdateReqVO.java

@ -1,12 +1,19 @@
package com.win.module.wms.controller.inspectRequest.vo;
import com.win.framework.excel.core.annotations.SubObject;
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 InspectRequestMainUpdateReqVO extends InspectRequestMainBaseVO {
@SubObject
@Schema(description = "子表数据")
private List<InspectRequestDetailUpdateReqVO> subList;
}

30
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/inspectRequest/InspectRequestDetailConvert.java

@ -4,11 +4,11 @@ import java.util.*;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestDetailCreateReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestDetailExcelVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestDetailRespVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestDetailUpdateReqVO;
import com.win.module.wms.controller.inspectRequest.vo.*;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestMainDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestDetailDO;
@ -27,6 +27,7 @@ public interface InspectRequestDetailConvert {
InspectRequestDetailDO convert(InspectRequestDetailUpdateReqVO bean);
InspectRequestDetailRespVO convert(InspectRequestDetailDO bean);
InspectRequestDetailCreateReqVO convert1(InspectRequestDetailDO detailDO);
List<InspectRequestDetailRespVO> convertList(List<InspectRequestDetailDO> list);
@ -34,4 +35,25 @@ public interface InspectRequestDetailConvert {
List<InspectRequestDetailExcelVO> convertList02(List<InspectRequestDetailDO> list);
List<InspectRequestDetailDO> convertList03(List<InspectRequestDetailCreateReqVO> list);
List<InspectRequestDetailDO> convertList05(List<InspectRequestDetailUpdateReqVO> subList);
@Mappings({
@Mapping(source = "mainDO.createTime", target = "createTime"),
@Mapping(source = "mainDO.creator", target = "creator"),
@Mapping(source = "mainDO.updateTime", target = "updateTime"),
@Mapping(source = "mainDO.updater", target = "updater"),
@Mapping(source = "mainDO.itemCode", target = "itemCode"),
@Mapping(source = "mainDO.uom", target = "uom"),
})
InspectRequestDetailExcelVO convert(InspectRequestMainDO mainDO, InspectRequestDetailDO detailDO);
@Mappings({
@Mapping(source = "mainVo.number", target = "number"),
@Mapping(source = "mainVo.itemCode", target = "itemCode"),
@Mapping(source = "mainVo.uom", target = "uom"),
})
InspectRequestImportErrorVO convert(InspectRequestMainCreateReqVO mainVo, InspectRequestDetailCreateReqVO detailVo);
}

6
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/inspectRequest/InspectRequestMainConvert.java

@ -4,10 +4,7 @@ import java.util.*;
import com.win.framework.common.pojo.PageResult;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainCreateReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainExcelVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainRespVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainUpdateReqVO;
import com.win.module.wms.controller.inspectRequest.vo.*;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestMainDO;
@ -34,4 +31,5 @@ public interface InspectRequestMainConvert {
List<InspectRequestMainExcelVO> convertList02(List<InspectRequestMainDO> list);
InspectRequestMainDO convert(InspectRequestMainBaseVO baseVO);
}

1
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/customerreturnRequest/CustomerreturnRequestDetailMapper.java

@ -51,7 +51,6 @@ public interface CustomerreturnRequestDetailMapper extends BaseMapperX<Customerr
}
default List<CustomerreturnRequestDetailDO> selectList(CustomerreturnRequestDetailExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<CustomerreturnRequestDetailDO>()
.eqIfPresent(CustomerreturnRequestDetailDO::getMasterId, reqVO.getMasterId())
.eqIfPresent(CustomerreturnRequestDetailDO::getSoNumber, reqVO.getSoNumber())
.eqIfPresent(CustomerreturnRequestDetailDO::getSoLine, reqVO.getSoLine())
.eqIfPresent(CustomerreturnRequestDetailDO::getPackingNumber, reqVO.getPackingNumber())

1
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/deliverRequest/DeliverRequestDetailMapper.java

@ -53,7 +53,6 @@ public interface DeliverRequestDetailMapper extends BaseMapperX<DeliverRequestDe
default List<DeliverRequestDetailDO> selectList(DeliverRequestDetailExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<DeliverRequestDetailDO>()
.eqIfPresent(DeliverRequestDetailDO::getMasterId, reqVO.getMasterId())
.eqIfPresent(DeliverRequestDetailDO::getSoNumber, reqVO.getSoNumber())
.eqIfPresent(DeliverRequestDetailDO::getSoLine, reqVO.getSoLine())
.eqIfPresent(DeliverRequestDetailDO::getPackingNumber, reqVO.getPackingNumber())

4
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/inspectRequest/InspectRequestMainMapper.java

@ -10,6 +10,7 @@ import com.win.framework.mybatis.core.util.QueryWrapperUtils;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainExportReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainPageReqVO;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestMainDO;
import com.win.module.wms.dal.dataobject.purchasereturnRequest.PurchasereturnRequestMainDO;
import org.apache.ibatis.annotations.Mapper;
/**
@ -94,4 +95,7 @@ public interface InspectRequestMainMapper extends BaseMapperX<InspectRequestMain
.orderByDesc(InspectRequestMainDO::getId));
}
default InspectRequestMainDO selectPurchaseReceiptNumber(String purchaseReceiptRecordNumber) {
return selectOne(InspectRequestMainDO::getPurchaseReceiptRecordNumber, purchaseReceiptRecordNumber);
}
}

13
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectRequest/InspectRequestMainService.java

@ -4,10 +4,7 @@ import java.util.*;
import javax.validation.*;
import com.win.framework.common.pojo.CustomConditions;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainCreateReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainExportReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainPageReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainUpdateReqVO;
import com.win.module.wms.controller.inspectRequest.vo.*;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestMainDO;
import com.win.framework.common.pojo.PageResult;
@ -80,4 +77,12 @@ public interface InspectRequestMainService {
*/
List<InspectRequestMainDO> getInspectRequestMainList(InspectRequestMainExportReqVO exportReqVO);
/**
* @author chenfang
* @param datas 主子表数据
* @param mode 导入模式 1更新2追加3覆盖
* @param updatePart 是否支持更新
* @return
*/
public List<InspectRequestImportErrorVO> importInspectRequestList(List<InspectRequestMainCreateReqVO> datas, Integer mode, boolean updatePart);
}

438
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectRequest/InspectRequestMainServiceImpl.java

@ -1,21 +1,52 @@
package com.win.module.wms.service.inspectRequest;
import com.win.framework.common.pojo.CustomConditions;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainCreateReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainExportReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainPageReqVO;
import com.win.module.wms.controller.inspectRequest.vo.InspectRequestMainUpdateReqVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestMainDO;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.exceptions.UtilException;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.win.framework.common.pojo.CustomConditions;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.common.util.validation.ValidationUtils;
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.inspectRequest.vo.*;
import com.win.module.wms.controller.rule.vo.RuleRespVO;
import com.win.module.wms.convert.inspectRequest.InspectRequestDetailConvert;
import com.win.module.wms.convert.inspectRequest.InspectRequestMainConvert;
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestDetailDO;
import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestMainDO;
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO;
import com.win.module.wms.dal.dataobject.purchasereceiptRecord.PurchasereceiptRecordDetailDO;
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO;
import com.win.module.wms.dal.mysql.inspectRequest.InspectRequestDetailMapper;
import com.win.module.wms.dal.mysql.inspectRequest.InspectRequestMainMapper;
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.purchasereceiptRecord.PurchasereceiptRecordMainService;
import com.win.module.wms.service.requestsetting.RequestsettingService;
import com.win.module.wms.service.rule.RuleService;
import com.win.module.wms.util.JobUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.validation.Validator;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.wms.enums.ErrorCodeConstants.*;
@ -31,23 +62,53 @@ public class InspectRequestMainServiceImpl implements InspectRequestMainService
@Resource
private InspectRequestMainMapper inspectRequestMainMapper;
@Resource
private InspectRequestDetailMapper inspectRequestDetailMapper;
@Resource
private PurchasereceiptRecordMainService purchasereceiptRecordMainService;
@Resource
private SerialNumberApi serialNumberApi;
@Resource
private DictDataApi dictDataApi;
@Resource
private ItembasicService itembasicService;
@Resource
private Validator validator;
@Resource
private LocationService locationService;
@Resource
private JobUtils jobUtils;
@Resource
private RuleService ruleService;
@Resource
private RequestsettingService requestsettingService;
@Resource
private TrendsApi trendsApi;
@Override
public Long createInspectRequestMain(InspectRequestMainCreateReqVO createReqVO) {
// 插入
InspectRequestMainDO inspectRequestMain = InspectRequestMainConvert.INSTANCE.convert(createReqVO);
inspectRequestMainMapper.insert(inspectRequestMain);
// 返回
return inspectRequestMain.getId();
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("InspectRequest");
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InspectRequest");
InspectRequestMainDO inspectRequestMainDO = validatorToCreate(createReqVO, businesstypeDO);
//调用自动执行方法
if(RequestStatusEnum.HANDLING.getCode().equals(inspectRequestMainDO.getStatus())) {
}
trendsApi.createTrends(requestsettingDO.getId(), "InspectRequest", "增加了到货校验申请", TrendsTypeEnum.CREATE);
return inspectRequestMainDO.getId();
}
@Override
public void updateInspectRequestMain(InspectRequestMainUpdateReqVO updateReqVO) {
RequestsettingDO requestsettingDO = requestsettingDO = requestsettingService.selectRequestsettingExist("InspectRequest");
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InspectRequest");
// 校验存在
validateInspectRequestMainExists(updateReqVO.getId());
// 更新
InspectRequestMainDO updateObj = InspectRequestMainConvert.INSTANCE.convert(updateReqVO);
inspectRequestMainMapper.updateById(updateObj);
// 更新主表
InspectRequestMainDO inspectRequestMainDO = validatorToUpdate(updateReqVO, businesstypeDO);
if(RequestStatusEnum.HANDLING.getCode().equals(inspectRequestMainDO.getStatus())) {
}
trendsApi.createTrends(requestsettingDO.getId(), "InspectRequest", "增加了到货校验申请", TrendsTypeEnum.CREATE);
}
@Override
@ -87,4 +148,339 @@ public class InspectRequestMainServiceImpl implements InspectRequestMainService
return inspectRequestMainMapper.selectList(exportReqVO);
}
//判断导入单位是否正确
private void ifUomSuccess(String itemUom,String uom) {
DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictLabel(uom);
if(dictDataRespDTO != null){
if(!itemUom.equals(dictDataRespDTO.getLabel())){
throw new UtilException("提示单位"+ uom + "错误,应该是" + itemUom);
}
}
}
//查询检验类型
private Integer selectInspectType(Integer sampleQty, HashMap<String, String> ruleAll) {
String inspectType = ruleAll.get("InspectType");
if("EXEMPT".equals(inspectType)){
return 0;
} else if ("FULL".equals(inspectType)) {
return sampleQty;
}else if("SAMPLING".equals(inspectType)){
return selectSampleMethod(ruleAll, sampleQty);
}else {
return 0;
}
}
//查询抽检方式 计算抽检数量并返回
private Integer selectSampleMethod(HashMap<String, String> ruleAll,Integer sampleQty) {
String sampleMethod = ruleAll.get("SampleMethod");
JSONArray aplList = JSONUtil.parseArray(ruleAll.get("AplList"));
//获取最大校验规则范围
Integer maxFloorQty = 0;
Integer maxCeilingQty = 0;
Integer maxSampleValue = 0;
Integer result = 0;
for (Object o : aplList) {
JSONObject parse = JSONUtil.parseObj(o);
Integer floorQty = Integer.valueOf(parse.get("FloorQty").toString());
Integer ceilingQty = Integer.valueOf(parse.get("CeilingQty").toString());
Integer sampleValue = Integer.valueOf(parse.get("SampleValue").toString());
if (maxFloorQty < floorQty){
maxFloorQty = floorQty;
}
if (maxCeilingQty < ceilingQty){
maxCeilingQty = ceilingQty;
}
if (maxSampleValue < sampleValue){
maxSampleValue = sampleValue;
}
//根据校验规则计算出抽样数量
if(sampleQty != null && sampleQty != 0){
if(floorQty <= sampleQty && sampleQty <= ceilingQty){
if("QTY".equals(sampleMethod)){
result = sampleValue;
}else if ("PERCENT".equals(sampleMethod)) {
double doubleSampleQty = sampleQty * (sampleValue * 0.01);
result = (int) Math.round(doubleSampleQty);
}
}
}else {
throw new UtilException("当前到货数量为空,不能进行校验");
}
}
if (maxCeilingQty < sampleQty) {
throw new UtilException("当前到货数量已超出校验规则范围");
}else {
return result;
}
}
//获取策略里的参数进行字段对应
private HashMap<String, String> selectRule(String supplierCode,String itemCode){
RuleRespVO inspect = ruleService.inspect(supplierCode,itemCode );
if(inspect == null){
throw new UtilException("未找到该策略");
}
JSONArray configuration = JSONUtil.parseArray(inspect.getConfiguration());
HashMap<String, String> mapRule = new HashMap<>();
for (Object o : configuration) {
JSONObject entries = JSONUtil.parseObj(o);
mapRule.put(entries.get("ParamCode").toString(),entries.get("Value").toString());
}
String aqlList = mapRule.get("AqlList");
if(aqlList !=null){
JSONArray objects = JSONUtil.parseArray(aqlList);
for (int i = 0; i < objects.size(); i++) {
JSONObject entries = JSONUtil.parseObj(objects.getObj(i));
mapRule.put("FloorQty" + (i+1),entries.get("FloorQty").toString());
mapRule.put("CeilingQty" + (i+1),entries.get("CeilingQty").toString());
mapRule.put("SampleValue" + (i+1),entries.get("SampleValue").toString());
}
}
return mapRule;
}
private PurchasereceiptRecordDetailDO validatorPurchasereceiptExist(String purchaseReceiptRecordNumber, String poNumber, String poLine, String itemCode){
return purchasereceiptRecordMainService.selectPurchasereceiptExist(poNumber, null, purchaseReceiptRecordNumber, poLine, itemCode);
}
private void validatorRule(InspectRequestMainDO mainDO){
HashMap<String, String> rule = selectRule(null, mainDO.getItemCode());
selectInspectType(mainDO.getReceiveQty(),rule);
}
private ItembasicDO validatorItembasic(String itemCode){
return itembasicService.selectItembasic(itemCode);
}
private void validatorLocation(String fromLocationCode){
locationService.selectLocation(fromLocationCode);
}
private void validatorIfInType(String itemType, BusinesstypeDO businesstypeDO){
jobUtils.ifInType(itemType, businesstypeDO);
}
private void validatorIfOutInventoryStatuses(String inventoryStatus,BusinesstypeDO businesstypeDO){
jobUtils.ifOutInventoryStatuses(inventoryStatus, businesstypeDO);
}
private void validatorIfInFromLocationType(String fromLocationCode,BusinesstypeDO businesstypeDO){
jobUtils.ifInFromLocationType(fromLocationCode, businesstypeDO);
}
private void validatorLlocationReturnManagementAccuracy(String itemCode,String packingNumber,String batch,String fromLocationCode,String inventoryStatu){
ArrayList inventoryStatus = new ArrayList();
inventoryStatus.add(inventoryStatu);
jobUtils.selectlocationReturnManagementAccuracy(itemCode, packingNumber, batch, fromLocationCode, inventoryStatus);
}
@Override
@Transactional
public List<InspectRequestImportErrorVO> importInspectRequestList(List<InspectRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) {
if (CollUtil.isEmpty(datas)) {
throw exception(INSPECT_REQUEST_IMPORT_LIST_IS_EMPTY);
}
List<InspectRequestImportErrorVO> errorList = new ArrayList<>();
datas.forEach(createReqVO -> {
String messageMain = "";
//主表校验方法
List<InspectRequestDetailCreateReqVO> subList = createReqVO.getSubList();
List<InspectRequestDetailDO> subDOList = InspectRequestDetailConvert.INSTANCE.convertList03(subList);
for (InspectRequestDetailDO detailDO : subDOList) {
String messageDetail = "";
try {
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InspectRequest");
createReqVO.setBusinessType(businesstypeDO.getCode());
createReqVO.setFromLocationTypes(businesstypeDO.getOutLocationTypes());
createReqVO.setFromLocationTypes(businesstypeDO.getOutLocationTypes());
}catch (Exception ex) {
messageDetail += ex.getMessage() + ",";
}
InspectRequestDetailCreateReqVO inspectRequestDetailCreateReqVO = InspectRequestDetailConvert.INSTANCE.convert1(detailDO);
InspectRequestImportErrorVO importVO = InspectRequestDetailConvert.INSTANCE.convert(createReqVO, inspectRequestDetailCreateReqVO);
if(!messageMain.equals("") || !messageDetail.equals("")){
importVO.setImportStatus("失败");
messageMain = messageMain + messageDetail;
importVO.setImportRemark(messageMain.substring(0,messageMain.length()-1));
errorList.add(importVO);
}else {
detailDO.setMasterId(createReqVO.getId());
}
}
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
InspectRequestMainDO createobj = InspectRequestMainConvert.INSTANCE.convert(createReqVO);
if(errorList.isEmpty()){
InspectRequestMainDO existInspectRequestMainDO = inspectRequestMainMapper.selectPurchaseReceiptNumber(createReqVO.getPurchaseReceiptRecordNumber());
if(existInspectRequestMainDO == null && mode != 3){
inspectRequestMainMapper.insert(createobj);
inspectRequestDetailMapper.insertBatch(subDOList);
}else if(existInspectRequestMainDO != null && mode != 2){
inspectRequestMainMapper.updateById(createobj);
inspectRequestDetailMapper.updateBatch(subDOList);
}
}
});
//错误不为空并非部分更新,手工回滚
if(!errorList.isEmpty() && !updatePart) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return errorList;
}
// 新增校验
private InspectRequestMainDO validatorToCreate(InspectRequestMainCreateReqVO createReqVO, BusinesstypeDO businesstypeDO) {
InspectRequestMainDO mainDo = validatorMainMethod(createReqVO,businesstypeDO);
//子表校验
List<InspectRequestDetailCreateReqVO> subList = createReqVO.getSubList();
List<InspectRequestDetailDO> subDOList = InspectRequestDetailConvert.INSTANCE.convertList03(subList);
for (InspectRequestDetailDO detailDO : subDOList) {
validatorDetailMethod(detailDO,mainDo,businesstypeDO);
}
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode());
mainDo.setNumber(number);
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增"));
inspectRequestMainMapper.insert(mainDo);
inspectRequestDetailMapper.insertBatch(subDOList);
return mainDo;
}
//修改校验
private InspectRequestMainDO validatorToUpdate(InspectRequestMainUpdateReqVO updateReqVO, BusinesstypeDO businesstypeDO) {
InspectRequestMainDO mainDo = validatorMainMethod(updateReqVO,businesstypeDO);
//子表校验
List<InspectRequestDetailUpdateReqVO> subList = updateReqVO.getSubList();
List<InspectRequestDetailDO> subDOList = InspectRequestDetailConvert.INSTANCE.convertList05(subList);
for (InspectRequestDetailDO detailDO : subDOList) {
validatorDetailMethod(detailDO,mainDo,businesstypeDO);
}
inspectRequestMainMapper.updateById(mainDo);
inspectRequestDetailMapper.updateBatch(subDOList);
return mainDo;
}
//校验主表公共方法(适用于新增/修改)
private InspectRequestMainDO validatorMainMethod(InspectRequestMainBaseVO baseVO, BusinesstypeDO businesstypeDO){
InspectRequestMainDO mainDo = InspectRequestMainConvert.INSTANCE.convert(baseVO);
PurchasereceiptRecordDetailDO purchasereceiptRecordDetailDO = validatorPurchasereceiptExist(mainDo.getPurchaseReceiptRecordNumber(), mainDo.getPoNumber(), mainDo.getPoLine(), mainDo.getItemCode());
mainDo.setReceiveQty(purchasereceiptRecordDetailDO.getQty().intValue());
validatorRule(mainDo);
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InspectRequest");
mainDo.setBusinessType(businesstypeDO.getCode());
mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes());
mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes());
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("InspectRequest");
mainDo.setAutoAgree(requestsettingDO.getAutoAgree());
mainDo.setAutoCommit(requestsettingDO.getAutoCommit());
mainDo.setAutoExecute(requestsettingDO.getAutoExecute());
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord());
return mainDo;
}
//校验子表公共方法(适用于新增/修改)
private void validatorDetailMethod(InspectRequestDetailDO detailDo,InspectRequestMainDO mainDo, BusinesstypeDO businesstypeDO) {
ItembasicDO itembasicDO = validatorItembasic(detailDo.getItemCode());
detailDo.setItemDesc1(itembasicDO.getDesc1());
detailDo.setItemDesc2(itembasicDO.getDesc2());
detailDo.setItemName(itembasicDO.getName());
detailDo.setProjectCode(itembasicDO.getProject());
this.ifUomSuccess(itembasicDO.getUom(), detailDo.getUom());
validatorIfInType(itembasicDO.getType(), businesstypeDO);
validatorLocation(detailDo.getFromLocationCode());
validatorIfOutInventoryStatuses(detailDo.getInventoryStatus(), businesstypeDO);
validatorIfInFromLocationType(detailDo.getFromLocationCode(), businesstypeDO);
validatorLlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getPackingNumber(), mainDo.getBatch(), detailDo.getFromLocationCode(), detailDo.getInventoryStatus());
}
/**
* 校验主表导入并赋值一些参数
*
* @param mainDo
* @return
*/
private String validatorInspectRequestMainImport(InspectRequestMainDO mainDo,BusinesstypeDO businesstypeDO) {
StringBuilder message = new StringBuilder();
try {
PurchasereceiptRecordDetailDO purchasereceiptRecordDetailDO = validatorPurchasereceiptExist(mainDo.getPurchaseReceiptRecordNumber(), mainDo.getPoNumber(), mainDo.getPoLine(), mainDo.getItemCode());
mainDo.setReceiveQty(purchasereceiptRecordDetailDO.getQty().intValue());
}catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
validatorRule(mainDo);
}catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InspectRequest");
if (businesstypeDO == null) {
message.append("根据业务类型设置未查找到采购退货申请的相关业务类型");
}
else {
mainDo.setBusinessType(businesstypeDO.getCode());
mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes());
mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes());
}
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("InspectRequest");
if (requestsettingDO == null) {
message.append("根据申请单设置未查找到采购退货申请的相关业务类型");
}
else {
mainDo.setAutoAgree(requestsettingDO.getAutoAgree());
mainDo.setAutoCommit(requestsettingDO.getAutoCommit());
mainDo.setAutoExecute(requestsettingDO.getAutoExecute());
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord());
}
try {
ValidationUtils.validate(validator, mainDo);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
return message.toString();
}
/**
* 校验子表导入并赋值一些参数
*
* @param detailDo
* @return
*/
private String validatorInspectRequestDetailImport(InspectRequestDetailDO detailDo, InspectRequestMainDO mainDo,BusinesstypeDO businesstypeDO) {
StringBuilder message = new StringBuilder();
try {
ItembasicDO itembasicDO = validatorItembasic(detailDo.getItemCode());
detailDo.setItemDesc1(itembasicDO.getDesc1());
detailDo.setItemDesc2(itembasicDO.getDesc2());
detailDo.setItemName(itembasicDO.getName());
detailDo.setProjectCode(itembasicDO.getProject());
try {
this.ifUomSuccess(itembasicDO.getUom(), detailDo.getUom());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try{
validatorIfInType(itembasicDO.getType(), businesstypeDO);
}catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
this.validatorLocation(detailDo.getFromLocationCode());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try{
validatorIfOutInventoryStatuses(detailDo.getInventoryStatus(), businesstypeDO);
}catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try{
validatorIfInFromLocationType(detailDo.getFromLocationCode(), businesstypeDO);
}catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
validatorLlocationReturnManagementAccuracy(detailDo.getItemCode(), detailDo.getPackingNumber(), mainDo.getBatch(), detailDo.getFromLocationCode(), detailDo.getInventoryStatus());
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
try {
ValidationUtils.validate(validator, detailDo);
} catch (Exception ex) {
message.append(ex.getMessage()).append(",");
}
return message.toString();
}
}

13
win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/util/JobUtils.java

@ -592,21 +592,12 @@ public class JobUtils {
}
}
//查询库位BQ-QL
public boolean selectlocation(String code) {
QueryWrapper<LocationDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("code", code);
queryWrapper.eq("available", "TRUE");
LocationDO locationDO = locationMapper.selectOne(queryWrapper);
return locationDO != null;
}
//从库位未被其他任务占用,有可用库存
public boolean locationUsable(String itemcode, String packingnumber, String batch, String fromlocationcode, List<String> inventoryStatus, BigDecimal requstqty) {
if (fromlocationcode.isEmpty()) {
return true;
}
if (selectlocation(fromlocationcode)) {
if (locationService.selectLocation(fromlocationcode) != null) {
return warehouseStockExist(itemcode, packingnumber, batch, fromlocationcode, inventoryStatus, requstqty);
} else {
throw exception(LOCATION_NOT_CUST,fromlocationcode);
@ -727,7 +718,7 @@ public class JobUtils {
*/
public Boolean fromInventoryEffectiveCustomer(String locationCode, String itemCode, String packingNumber, String batch, List<String> inventoryStatus) {
Boolean returnRes = false;
if (selectlocation(locationCode)) {
if (locationService.selectLocation(locationCode) != null) {
fromInventoryEffective(itemCode, packingNumber, batch, locationCode, inventoryStatus);
} else{
return returnRes;

Loading…
Cancel
Save