|
|
@ -1,25 +1,50 @@ |
|
|
|
package com.win.module.wms.service.customerreturnRequest; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.exceptions.UtilException; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
|
import com.win.module.wms.controller.customerreturnRequest.vo.CustomerreturnRequestMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.customerreturnRequest.vo.CustomerreturnRequestMainExportReqVO; |
|
|
|
import com.win.module.wms.controller.customerreturnRequest.vo.CustomerreturnRequestMainPageReqVO; |
|
|
|
import com.win.module.wms.controller.customerreturnRequest.vo.CustomerreturnRequestMainUpdateReqVO; |
|
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
|
import com.win.framework.dict.core.util.DictFrameworkUtils; |
|
|
|
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.customerreturnRequest.vo.*; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverRecord.DeliverRecordDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverRecord.DeliverRecordMainDO; |
|
|
|
import com.win.module.wms.service.deliverRecord.*; |
|
|
|
import com.win.module.wms.dal.mysql.customerreturnRequest.CustomerreturnRequestDetailMapper; |
|
|
|
import com.win.module.wms.service.requestsetting.*; |
|
|
|
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.requestsetting.RequestsettingDO; |
|
|
|
import com.win.module.wms.enums.DictTypeConstants; |
|
|
|
import com.win.module.wms.util.*; |
|
|
|
import com.win.module.wms.service.location.*; |
|
|
|
import com.win.module.wms.convert.customerreturnRequest.CustomerreturnRequestDetailConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.purchasereceiptRecord.PurchasereceiptRecordDetailDO; |
|
|
|
import com.win.module.wms.service.purchasereceiptRecord.*; |
|
|
|
import com.win.module.wms.service.itembasic.*; |
|
|
|
import com.win.module.wms.dal.dataobject.customerreturnRequest.CustomerreturnRequestDetailDO; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import javax.annotation.Resource; |
|
|
|
import javax.validation.Validator; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
import com.win.module.wms.dal.dataobject.customerreturnRequest.CustomerreturnRequestMainDO; |
|
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
|
|
|
|
|
import com.win.module.wms.convert.customerreturnRequest.CustomerreturnRequestMainConvert; |
|
|
|
import com.win.module.wms.dal.mysql.customerreturnRequest.CustomerreturnRequestMainMapper; |
|
|
|
|
|
|
|
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 客户退货申请主 Service 实现类 |
|
|
|
* |
|
|
@ -32,6 +57,32 @@ public class CustomerreturnRequestMainServiceImpl implements CustomerreturnReque |
|
|
|
@Resource |
|
|
|
private CustomerreturnRequestMainMapper customerreturnRequestMainMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private CustomerreturnRequestDetailMapper customerreturnRequestDetailMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private RequestsettingService requestsettingService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private DeliverRecordMainService deliverRecordMainService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private ItembasicService itembasicService; |
|
|
|
@Resource |
|
|
|
private JobUtils jobUtils; |
|
|
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private DictDataApi dictDataApi; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private LocationService locationService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private Validator validator; |
|
|
|
@Override |
|
|
|
public Long createCustomerreturnRequestMain(CustomerreturnRequestMainCreateReqVO createReqVO) { |
|
|
|
// 插入
|
|
|
@ -87,4 +138,190 @@ public class CustomerreturnRequestMainServiceImpl implements CustomerreturnReque |
|
|
|
return customerreturnRequestMainMapper.selectList(exportReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
private void validatePurchaseclaimRequestMainExists(Long id) { |
|
|
|
CustomerreturnRequestMainDO customerRequestMainDO = customerreturnRequestMainMapper.selectById(id); |
|
|
|
if (customerRequestMainDO == null) { |
|
|
|
return; |
|
|
|
}else { |
|
|
|
throw exception(CUSTOMERRETURN_REQUEST_NOT_EXISTS); |
|
|
|
} |
|
|
|
} |
|
|
|
public String isqty(BigDecimal qty1, BigDecimal qty2) { |
|
|
|
if(qty1.compareTo(qty2) < 0){ |
|
|
|
return "ture"; |
|
|
|
} else { |
|
|
|
throw new UtilException("上架数量"+qty2+ "不能大于库存数量"+ qty1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public List<CustomerreturnRequestImportErrorVO> importCustomerreturnMainList(List<CustomerreturnRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { |
|
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
|
throw exception(CUSTOMERRETURN_REQUEST_NOT_EXISTS); |
|
|
|
} |
|
|
|
List< CustomerreturnRequestImportErrorVO> errorList = new ArrayList<>(); |
|
|
|
datas.forEach(createReqVO -> { |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
|
|
|
|
String messageMain = ""; |
|
|
|
BusinesstypeDO businesstypeDO = null; |
|
|
|
//主表校验方法
|
|
|
|
try { |
|
|
|
DeliverRecordMainDO deliverRecordMainDO = deliverRecordMainService.selectsMainRecordExist(createReqVO.getDeliverRecordNumber()); |
|
|
|
createReqVO.setDeliverPlanNumber(deliverRecordMainDO.getDeliverPlanNumber()); |
|
|
|
createReqVO.setCustomerCode(deliverRecordMainDO.getCustomerCode()); |
|
|
|
createReqVO.setCustomerDockCode(deliverRecordMainDO.getCustomerDockCode()); |
|
|
|
createReqVO.setCreateTime(LocalDateTime.now()); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
|
|
|
|
try { |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("CustomerRejectRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
}catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try{ |
|
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerRejectRequest"); |
|
|
|
createReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
createReqVO.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
createReqVO.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
createReqVO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
createReqVO.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
|
|
|
|
}catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, createReqVO); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RETURN_REQUEST.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
List<CustomerreturnRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<CustomerreturnRequestDetailDO> subDOList = CustomerreturnRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
for(CustomerreturnRequestDetailDO detailDO : subDOList ){ |
|
|
|
String messageDetail = ""; |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,同主表,只把有错误的子表加入errorList
|
|
|
|
//子表校验方法
|
|
|
|
try { |
|
|
|
List <DeliverRecordDetailDO> deliverRecordDetailDO = deliverRecordMainService.selectsDeliverRecordExist(createReqVO.getDeliverRecordNumber()); |
|
|
|
try{ |
|
|
|
for( DeliverRecordDetailDO deliver : deliverRecordDetailDO){ |
|
|
|
if(deliver.getSoNumber().equals(detailDO.getSoNumber())&& |
|
|
|
deliver.getSoLine().equals(detailDO.getSoLine()) |
|
|
|
&&deliver.getItemCode().equals(detailDO.getItemCode())&& |
|
|
|
deliver.getBatch().equals(detailDO.getBatch())&& |
|
|
|
deliver.getPackingNumber().equals(detailDO.getPackingNumber())){ |
|
|
|
detailDO.setQty(deliver.getQty()); |
|
|
|
detailDO.setUom(deliver.getUom()); |
|
|
|
} |
|
|
|
else{ |
|
|
|
throw new UtilException("销售订单号"+detailDO.getSoNumber()+"销售订单行"+detailDO.getSoLine() |
|
|
|
+"物料代码"+detailDO.getItemCode()+"批次"+detailDO.getBatch()+"箱码"+detailDO.getPackingNumber()+"不在发货记录单" |
|
|
|
+createReqVO.getDeliverRecordNumber()+"中"); |
|
|
|
} |
|
|
|
} |
|
|
|
}catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDO.getItemCode()); |
|
|
|
detailDO.setItemDesc1(itembasicDO.getDesc1()); |
|
|
|
detailDO.setItemDesc2(itembasicDO.getDesc2()); |
|
|
|
detailDO.setItemName(itembasicDO.getName()); |
|
|
|
detailDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
detailDO.setUom(itembasicDO.getUom()); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
locationService.selectLocation(detailDO.getFromLocationCode()); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
|
|
|
|
try{ |
|
|
|
if(!detailDO.getFromLocationCode().isEmpty()){ |
|
|
|
jobUtils.ifInToLocationType(detailDO.getFromLocationCode(),businesstypeDO); |
|
|
|
} |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try{ |
|
|
|
jobUtils.ifInFromLocationType(detailDO.getToLocationCode(),businesstypeDO); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try{ |
|
|
|
jobUtils.ifInInventoryStatuses(detailDO.getInventoryStatus(),businesstypeDO); |
|
|
|
}catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
|
|
|
|
try{ |
|
|
|
if("客户寄售库".equals(detailDO.getFromLocationCode())){ |
|
|
|
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) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
} |
|
|
|
}catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
CustomerreturnRequestDetailCreateReqVO customerreturnRequestDetailCreateReqVO = CustomerreturnRequestDetailConvert.INSTANCE.convert1(detailDO); |
|
|
|
CustomerreturnRequestImportErrorVO importVO = CustomerreturnRequestDetailConvert.INSTANCE.convert(createReqVO, customerreturnRequestDetailCreateReqVO); |
|
|
|
if(!messageMain.equals("") || !messageDetail.equals("")){ |
|
|
|
importVO.setImportStatus("失败"); |
|
|
|
messageMain = messageMain + messageDetail; |
|
|
|
importVO.setImportRemark(messageMain.substring(0,messageMain.length()-1)); |
|
|
|
errorList.add(importVO); |
|
|
|
}else { |
|
|
|
|
|
|
|
detailDO.setNumber(createReqVO.getNumber()); |
|
|
|
detailDO.setMasterId(createReqVO.getId()); |
|
|
|
} |
|
|
|
} |
|
|
|
CustomerreturnRequestMainDO createObj = CustomerreturnRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
|
|
|
|
if (errorList.isEmpty()) { |
|
|
|
CustomerreturnRequestMainDO existCustomerreturnRequestMainDO = customerreturnRequestMainMapper.selectByDeliverrecordnumberAndSupplierCode(createReqVO.getDeliverRecordNumber()); |
|
|
|
if (existCustomerreturnRequestMainDO == null && mode != 3) { |
|
|
|
customerreturnRequestMainMapper.insert(createObj); |
|
|
|
customerreturnRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
|
else if (existCustomerreturnRequestMainDO == null && mode != 2) { |
|
|
|
customerreturnRequestMainMapper.updateById(createObj); |
|
|
|
customerreturnRequestDetailMapper.updateBatch(subDOList); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
}); |
|
|
|
//错误不为空并非部分更新,手工回滚
|
|
|
|
if (!errorList.isEmpty() && !updatePart) { |
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
|
|
|
} |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|