|
|
@ -4,14 +4,32 @@ import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.exceptions.UtilException; |
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
|
import com.google.common.annotations.VisibleForTesting; |
|
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
|
import com.win.framework.datapermission.core.util.DataPermissionUtils; |
|
|
|
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.wms.controller.issueRequest.vo.IssueRequestMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.issueRequest.vo.IssueRequestMainUpdateReqVO; |
|
|
|
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainBaseVO; |
|
|
|
import com.win.module.wms.controller.productreceiptRequest.vo.ProductreceiptRequestMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.productscrapRequest.vo.ProductscrapRequestImportErrorVO; |
|
|
|
import com.win.module.wms.convert.issueRequest.IssueRequestMainConvert; |
|
|
|
import com.win.module.wms.convert.productreceiptRequest.ProductreceiptRequestMainConvert; |
|
|
|
import com.win.module.wms.convert.productscrapRequest.ProductscrapRequestMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.balance.BalanceDO; |
|
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
|
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.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.location.LocationDO; |
|
|
|
import com.win.module.wms.dal.dataobject.productreceiptRequest.ProductreceiptRequestMainDO; |
|
|
|
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.requestsetting.RequestsettingDO; |
|
|
|
import com.win.module.wms.dal.mysql.productputawayRequest.ProductputawayRequestDetailMapper; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
|
import com.win.module.wms.service.requestsetting.RequestsettingService; |
|
|
|
import com.win.module.wms.util.*; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
@ -32,7 +50,9 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
import com.win.module.wms.convert.productputawayRequest.*; |
|
|
|
import javax.annotation.Resource; |
|
|
|
import javax.validation.Validator; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Arrays; |
|
|
|
import java.util.Collection; |
|
|
@ -69,7 +89,8 @@ public class ProductputawayRequestMainServiceImpl implements ProductputawayReque |
|
|
|
|
|
|
|
@Resource |
|
|
|
private BusinesstypeService businesstypeService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private Validator validator; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private LocationService locationService; |
|
|
@ -79,24 +100,109 @@ public class ProductputawayRequestMainServiceImpl implements ProductputawayReque |
|
|
|
|
|
|
|
@Resource |
|
|
|
private DictDataApi dictDataApi; |
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
|
|
|
|
@Override |
|
|
|
public Long createProductputawayRequestMain(ProductputawayRequestMainCreateReqVO createReqVO) { |
|
|
|
// 插入
|
|
|
|
ProductputawayRequestMainDO productputawayRequestMain = ProductputawayRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
productputawayRequestMainMapper.insert(productputawayRequestMain); |
|
|
|
// 返回
|
|
|
|
return productputawayRequestMain.getId(); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ProductPutawayRequest"); |
|
|
|
ProductputawayRequestMainDO productputawayRequestMainDO = validatorToCreate(createReqVO,requestsettingDO); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(productputawayRequestMainDO.getStatus())) { |
|
|
|
|
|
|
|
} |
|
|
|
trendsApi.createTrends(requestsettingDO.getId(), "ProductputawayRequest", "增加了制品上架申请", TrendsTypeEnum.CREATE); |
|
|
|
return productputawayRequestMainDO.getId(); |
|
|
|
} |
|
|
|
private ProductputawayRequestMainDO validatorToCreate( ProductputawayRequestMainCreateReqVO createReqVO, RequestsettingDO requestsettingDO) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductPutawayRequest"); |
|
|
|
ProductputawayRequestMainDO productputawayRequestMainDO = validateMainMethod(createReqVO,businesstypeDO,requestsettingDO); |
|
|
|
//子表校验
|
|
|
|
List<ProductputawayRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<ProductputawayRequestDetailDO> subDOList = ProductputawayRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
for(ProductputawayRequestDetailDO productputawayRequestDetailDO: subDOList){ |
|
|
|
validateDetailMethod(productputawayRequestDetailDO,businesstypeDO,productputawayRequestMainDO); |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode()); |
|
|
|
productputawayRequestMainDO.setNumber(number); |
|
|
|
productputawayRequestMainMapper.insert(productputawayRequestMainDO); |
|
|
|
for (ProductputawayRequestDetailDO productputawayRequestDetailDO : subDOList) { |
|
|
|
productputawayRequestDetailDO.setMasterId(productputawayRequestMainDO.getId()); |
|
|
|
productputawayRequestDetailDO.setNumber(productputawayRequestMainDO.getNumber()); |
|
|
|
} |
|
|
|
productputawayRequestDetailMapper.insertBatch(subDOList); |
|
|
|
return productputawayRequestMainDO; |
|
|
|
} |
|
|
|
private void validateDetailMethod(ProductputawayRequestDetailDO productputawayRequestDetailDO, BusinesstypeDO businesstypeDO, ProductputawayRequestMainDO productputawayRequestMainDO) { |
|
|
|
ItembasicDO itembasicDO = validatorItembasic(productputawayRequestDetailDO.getItemCode()); |
|
|
|
productputawayRequestDetailDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
productputawayRequestDetailDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
productputawayRequestDetailDO.setItemName(itembasicDO.getName()); |
|
|
|
productputawayRequestDetailDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
validatorLocation(productputawayRequestDetailDO.getFromLocationCode()); |
|
|
|
IfInToLocationType(productputawayRequestDetailDO.getFromLocationCode(),businesstypeDO); |
|
|
|
DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictValue(productputawayRequestDetailDO.getInventoryStatus()); |
|
|
|
String value = dictDataRespDTO.getValue(); |
|
|
|
String[] businessArray = value.split(","); |
|
|
|
List<String> business = Arrays.asList(businessArray); |
|
|
|
List<BalanceDO> balance = selectlocationReturnManagement(productputawayRequestDetailDO.getItemCode(), productputawayRequestDetailDO.getPackingNumber(), |
|
|
|
productputawayRequestDetailDO.getBatch(), productputawayRequestDetailDO.getFromLocationCode(), business); |
|
|
|
for(BalanceDO balance2 :balance){ |
|
|
|
productputawayRequestMainDO.setFromWarehouseCode(balance2.getWarehouseCode()); |
|
|
|
productputawayRequestMainDO.setDueTime(balance2.getExpireDate()); |
|
|
|
} |
|
|
|
BalanceDO blance1 = balance.get(0); |
|
|
|
isqty(productputawayRequestDetailDO.getQty(),blance1.getQty()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private ProductputawayRequestMainDO validateMainMethod(ProductputawayRequestMainBaseVO baseVO, BusinesstypeDO businesstypeDO, RequestsettingDO requestsettingDO){ |
|
|
|
ProductputawayRequestMainDO productputawayRequestMainDO = ProductputawayRequestMainConvert.INSTANCE.convert(baseVO); |
|
|
|
productputawayRequestMainDO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
productputawayRequestMainDO.setRequestTime(LocalDateTime.now()); |
|
|
|
productputawayRequestMainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
productputawayRequestMainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
productputawayRequestMainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
productputawayRequestMainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
productputawayRequestMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
productputawayRequestMainDO.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
productputawayRequestMainDO.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
productputawayRequestMainDO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
productputawayRequestMainDO.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
return productputawayRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateProductputawayRequestMain(ProductputawayRequestMainUpdateReqVO updateReqVO) { |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ProductPutawayRequest"); |
|
|
|
// 校验存在
|
|
|
|
validateProductputawayRequestMainExists(updateReqVO.getId()); |
|
|
|
// 更新
|
|
|
|
ProductputawayRequestMainDO updateObj = ProductputawayRequestMainConvert.INSTANCE.convert(updateReqVO); |
|
|
|
productputawayRequestMainMapper.updateById(updateObj); |
|
|
|
ProductputawayRequestMainDO productputawayRequestMainDO = validatorToUpdate(updateReqVO, requestsettingDO); |
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(productputawayRequestMainDO.getStatus())) { |
|
|
|
|
|
|
|
} |
|
|
|
trendsApi.createTrends(requestsettingDO.getId(), "IssueRequest", "增加了发料申请", TrendsTypeEnum.CREATE); |
|
|
|
} |
|
|
|
|
|
|
|
private ProductputawayRequestMainDO validatorToUpdate(ProductputawayRequestMainUpdateReqVO updateReqVO, RequestsettingDO requestsettingDO) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductPutawayRequest"); |
|
|
|
ProductputawayRequestMainDO productputawayRequestMainDO = validateMainMethod(updateReqVO,businesstypeDO,requestsettingDO); |
|
|
|
//子表校验
|
|
|
|
List<ProductputawayRequestDetailUpdateReqVO> subList = updateReqVO.getSubList(); |
|
|
|
|
|
|
|
if(subList!=null) { |
|
|
|
List<ProductputawayRequestDetailDO> subDOList = ProductputawayRequestDetailConvert.INSTANCE.convertList05(subList); |
|
|
|
for (ProductputawayRequestDetailDO productputawayRequestDetailDO : subDOList) { |
|
|
|
validateDetailMethod(productputawayRequestDetailDO, businesstypeDO, productputawayRequestMainDO); |
|
|
|
} |
|
|
|
productputawayRequestDetailMapper.updateBatch(subDOList); |
|
|
|
} |
|
|
|
productputawayRequestMainMapper.updateById(productputawayRequestMainDO); |
|
|
|
return productputawayRequestMainDO; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public void deleteProductputawayRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
@ -135,48 +241,13 @@ public class ProductputawayRequestMainServiceImpl implements ProductputawayReque |
|
|
|
public PageResult<ProductputawayRequestMainDO> getProductputawayRequestMainSenior(CustomConditions conditions) { |
|
|
|
return productputawayRequestMainMapper.selectSenior(conditions); |
|
|
|
} |
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
|
|
|
|
public List<ProductputawayImportExcelVO> importProductputawayList(List<ProductputawayImportExcelVO> importProductputaways, Integer mode, boolean updatePart) { |
|
|
|
if (CollUtil.isEmpty(importProductputaways)) { |
|
|
|
throw exception(WORKSTATION_IMPORT_LIST_IS_EMPTY); |
|
|
|
} |
|
|
|
List<ProductputawayImportExcelVO> errorList = new ArrayList<>(); |
|
|
|
importProductputaways.forEach(productputaway -> { |
|
|
|
String massage = ""; |
|
|
|
// 校验,判断是否有不符合的原因
|
|
|
|
if(mode != null){ |
|
|
|
try{ |
|
|
|
validateProductputawayExists(null); |
|
|
|
} catch(Exception ex){ |
|
|
|
massage += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
|
|
|
|
if(StrUtil.isNotEmpty(massage)){ |
|
|
|
massage.substring(0,massage.length()-1); |
|
|
|
errorList.add(productputaway); |
|
|
|
} |
|
|
|
// 判断如果不存在,在进行插入
|
|
|
|
if(errorList == null){ |
|
|
|
ProductputawayRequestMainDO existAccountcalendar = productputawayRequestMainMapper.selectByNumber(productputaway.getPackingNumber()); |
|
|
|
if (existAccountcalendar == null&& mode != 3) { |
|
|
|
productputawayRequestMainMapper.insert(ProductputawayRequestMainConvert.INSTANCE.convert(productputaway)); |
|
|
|
} |
|
|
|
else if (existAccountcalendar != null && mode != 2) {// 如果存在,判断是否允许更新
|
|
|
|
ProductputawayRequestMainDO productputawayDo = ProductputawayRequestMainConvert.INSTANCE.convert(productputaway); |
|
|
|
productputawayDo.setId(existAccountcalendar.getId()); |
|
|
|
productputawayRequestMainMapper.updateById(productputawayDo); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
//错误不为空并非部分更新,手工回滚
|
|
|
|
if(!errorList.isEmpty() && !updatePart) { |
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
|
|
|
} |
|
|
|
return errorList; |
|
|
|
@Override |
|
|
|
public List<ProductputawayImportExcelVO> importProductputawayList(List<ProductputawayImportExcelVO> importProductputaways, Integer mode, boolean updatePart) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void validateproductputawayForCreateOrUpdate(Long id,String code,String workshopCode,String productionLineCode,String available) { |
|
|
|
// 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确
|
|
|
|
DataPermissionUtils.executeIgnore(() -> { |
|
|
@ -203,124 +274,154 @@ public class ProductputawayRequestMainServiceImpl implements ProductputawayReque |
|
|
|
if(uom2.equals(value)){ |
|
|
|
return "ture"; |
|
|
|
}else { |
|
|
|
throw new UtilException("计量单位"+uom2+"错误,应该是"+value); |
|
|
|
throw exception(UOM_ERRORR,uom2,value); |
|
|
|
} |
|
|
|
} |
|
|
|
public 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 String validateProductputawayRequestMainImport(ProductputawayRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
mainDo.setRequestTime(LocalDateTime.now()); |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("ProductPutawayRequest"); |
|
|
|
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.getOutLocationTypes()); |
|
|
|
mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
} |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, mainDo); |
|
|
|
} catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
private ItembasicDO validatorItembasic(String itemCode) { |
|
|
|
return itembasicService.selectItembasic(itemCode); |
|
|
|
} |
|
|
|
private void validatorLocation(String locationCode){ |
|
|
|
locationService.selectLocation(locationCode); |
|
|
|
} |
|
|
|
private void IfInToLocationType( String fromlocationcode,BusinesstypeDO bus ){ |
|
|
|
|
|
|
|
jobUtils.ifInToLocationType(fromlocationcode,bus); |
|
|
|
|
|
|
|
} |
|
|
|
List<BalanceDO> selectlocationReturnManagement(String ItemCode, String packingNumber, |
|
|
|
String batch , String fromLocationCode , List<String> business){ |
|
|
|
List<BalanceDO> balanceDO = jobUtils.selectlocationReturnManagementAccuracy(ItemCode, packingNumber, |
|
|
|
batch,fromLocationCode, business); |
|
|
|
return balanceDO; |
|
|
|
} |
|
|
|
|
|
|
|
private String validateProductputawayRequestDetailImport(ProductputawayRequestDetailDO detailDo, ProductputawayRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { |
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,同主表,只把有错误的子表加入errorList
|
|
|
|
try { |
|
|
|
ItembasicDO item = validatorItembasic(detailDo.getItemCode()); |
|
|
|
detailDo.setItemDesc1(item.getDesc1()); |
|
|
|
detailDo.setItemDesc2(item.getDesc2()); |
|
|
|
detailDo.setItemName(item.getName()); |
|
|
|
detailDo.setProjectCode(item.getProject()); |
|
|
|
try{ |
|
|
|
Isuom(item.getUom(),detailDo.getUom()); |
|
|
|
}catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
} catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
try{ |
|
|
|
validatorLocation(detailDo.getFromLocationCode()); |
|
|
|
}catch (Exception ex) { |
|
|
|
message.append(ex.getMessage()).append(","); |
|
|
|
} |
|
|
|
try{ |
|
|
|
IfInToLocationType(detailDo.getFromLocationCode(),businesstypeDO); |
|
|
|
DictDataRespDTO dictDataRespDTO = dictDataApi.selectDictLabel(detailDo.getInventoryStatus()); |
|
|
|
String value = dictDataRespDTO.getValue(); |
|
|
|
String[] businessArray = value.split(","); |
|
|
|
List<String> business = Arrays.asList(businessArray); |
|
|
|
try { |
|
|
|
List<BalanceDO> balance = selectlocationReturnManagement(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(","); |
|
|
|
} |
|
|
|
|
|
|
|
return message.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public List<ProductputawayImportErrorVO> importProductputawayRequestList(List<ProductputawayRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { |
|
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
|
throw exception(PRODUCTPUTAWAY_REQUEST_NOT_EXISTS); |
|
|
|
} |
|
|
|
List<ProductputawayImportErrorVO> errorList = new ArrayList<>(); |
|
|
|
datas.forEach(createReqVO -> { |
|
|
|
String massage = ""; |
|
|
|
boolean isError = false; |
|
|
|
RequestsettingDO requestsetting = requestsettingService.selectRequestsettingExist("PurchaseReceiptRequest"); |
|
|
|
createReqVO.setAutoCommit(requestsetting.getAutoCommit()); |
|
|
|
createReqVO.setAutoAgree(requestsetting.getAutoAgree()); |
|
|
|
createReqVO.setAutoExecute(requestsetting.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsetting.getDirectCreateRecord()); |
|
|
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("ProductPutawayRequest"); |
|
|
|
ProductputawayRequestMainDO mainDo = ProductputawayRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
String messageMain = validateProductputawayRequestMainImport(mainDo, businesstypeDO); |
|
|
|
List<ProductputawayRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<ProductputawayRequestDetailDO> subDOList = ProductputawayRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
// 新增子表数据
|
|
|
|
for (ProductputawayRequestDetailDO detailDO : subDOList) { |
|
|
|
if (mode != null) { |
|
|
|
try { |
|
|
|
validateProductputawayExists(null); |
|
|
|
} catch (Exception ex) { |
|
|
|
massage += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,同主表,只把有错误的子表加入errorList
|
|
|
|
try { |
|
|
|
ItembasicDO item = itembasicService.selectItembasic(detailDO.getItemCode()); |
|
|
|
detailDO.setItemDesc1(item.getDesc1()); |
|
|
|
detailDO.setItemDesc2(item.getDesc2()); |
|
|
|
detailDO.setItemName(item.getName()); |
|
|
|
detailDO.setProjectCode(item.getProject()); |
|
|
|
try{ |
|
|
|
Isuom(item.getUom(),detailDO.getUom()); |
|
|
|
}catch (Exception ex) { |
|
|
|
isError = true; |
|
|
|
massage += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
} catch (Exception ex) { |
|
|
|
isError = true; |
|
|
|
massage += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try{ |
|
|
|
locationService.selectLocation(detailDO.getFromLocationCode()); |
|
|
|
}catch (Exception ex) { |
|
|
|
isError = true; |
|
|
|
massage += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try{ |
|
|
|
BusinesstypeDO bus = businesstypeService.selectBusinesstypeExist("ProductPutawayRequest"); |
|
|
|
createReqVO.setBusinessType(bus.getCode()); |
|
|
|
createReqVO.setFromLocationTypes(bus.getOutLocationTypes()); |
|
|
|
createReqVO.setToLocationTypes(bus.getInLocationTypes()); |
|
|
|
createReqVO.setFromAreaCodes(bus.getOutAreaCodes()); |
|
|
|
createReqVO.setToAreaCodes(bus.getInAreaCodes()); |
|
|
|
//TODO TB ---TB1 效验业务类型相关属性
|
|
|
|
try{ |
|
|
|
jobUtils.ifInToLocationType(detailDO.getFromLocationCode(),bus); |
|
|
|
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() + ","; |
|
|
|
|
|
|
|
} |
|
|
|
}catch (Exception ex) { |
|
|
|
isError = true; |
|
|
|
massage += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
if(isError) { |
|
|
|
ProductputawayImportErrorVO importVO = ProductputawayRequestDetailConvert.INSTANCE.convert(createReqVO,detailDO); |
|
|
|
importVO.setImportStatus("失败"); |
|
|
|
importVO.setImportRemark(massage.substring(0, massage.length() - 1)); |
|
|
|
errorList.add(importVO); |
|
|
|
} |
|
|
|
if(!isError) { |
|
|
|
if( mode != 3) { |
|
|
|
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
ProductputawayRequestMainDO createObj = ProductputawayRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
productputawayRequestMainMapper.insert(createObj); |
|
|
|
productputawayRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
|
else if(mode != 2){ |
|
|
|
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
ProductputawayRequestMainDO createObj = ProductputawayRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
productputawayRequestMainMapper.updateById(createObj); |
|
|
|
productputawayRequestDetailMapper.updateBatch(subDOList); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
boolean flag = true; |
|
|
|
for (ProductputawayRequestDetailDO detailDO : subDOList) { |
|
|
|
String messageDetail = validateProductputawayRequestDetailImport(detailDO, mainDo, businesstypeDO); |
|
|
|
if (!"".equals(messageMain) ||!"".equals(messageDetail) ) { |
|
|
|
ProductputawayImportErrorVO importErrorVO = ProductputawayRequestMainConvert.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.PRODUCT_PUTAWAY_REQUEST.getCode()); |
|
|
|
mainDo.setNumber(number); |
|
|
|
mainDo.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
productputawayRequestMainMapper.insert(mainDo); |
|
|
|
for (ProductputawayRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDo.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
} |
|
|
|
productputawayRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
|
}); |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|