|
|
@ -2,37 +2,59 @@ package com.win.module.wms.service.customerreturnRequest; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.exceptions.UtilException; |
|
|
|
import com.win.framework.common.exception.ServiceException; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
|
import com.win.framework.dict.core.util.DictFrameworkUtils; |
|
|
|
import com.win.framework.web.core.util.WebFrameworkUtils; |
|
|
|
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.api.user.AdminUserApi; |
|
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
import com.win.module.wms.controller.customerreturnRecord.vo.CustomerreturnRecordDetailCreateReqVO; |
|
|
|
import com.win.module.wms.controller.customerreturnRecord.vo.CustomerreturnRecordMainCreateReqVO; |
|
|
|
import com.win.module.wms.controller.customerreturnRequest.vo.*; |
|
|
|
import com.win.module.wms.controller.expectin.vo.ExpectinCreateReqVO; |
|
|
|
import com.win.module.wms.convert.customerreturnJob.CustomerreturnJobDetailConvert; |
|
|
|
import com.win.module.wms.convert.customerreturnJob.CustomerreturnJobMainConvert; |
|
|
|
import com.win.module.wms.convert.customerreturnRecord.CustomerreturnRecordDetailConvert; |
|
|
|
import com.win.module.wms.convert.customerreturnRecord.CustomerreturnRecordMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.customerreturnJob.CustomerreturnJobDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.customerreturnJob.CustomerreturnJobMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverRecord.DeliverRecordDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.deliverRecord.DeliverRecordMainDO; |
|
|
|
import com.win.module.wms.dal.dataobject.jobsetting.JobsettingDO; |
|
|
|
import com.win.module.wms.dal.mysql.customerreturnJob.CustomerreturnJobDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.customerreturnJob.CustomerreturnJobMainMapper; |
|
|
|
import com.win.module.wms.dal.mysql.customerreturnRecord.CustomerreturnRecordDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.customerreturnRecord.CustomerreturnRecordMainMapper; |
|
|
|
import com.win.module.wms.enums.job.JobStatusEnum; |
|
|
|
import com.win.module.wms.enums.plan.PlanStatusEnum; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
|
import com.win.module.wms.enums.request.RequestStatusState; |
|
|
|
import com.win.module.wms.service.customerdock.CustomerdockService; |
|
|
|
import com.win.module.wms.service.deliverRecord.*; |
|
|
|
import com.win.module.wms.dal.mysql.customerreturnRequest.CustomerreturnRequestDetailMapper; |
|
|
|
import com.win.module.wms.service.expectin.ExpectinService; |
|
|
|
import com.win.module.wms.service.jobsetting.JobsettingService; |
|
|
|
import com.win.module.wms.service.recordsetting.RecordsettingService; |
|
|
|
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.beans.BeanUtils; |
|
|
|
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; |
|
|
@ -42,6 +64,7 @@ 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.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
|
|
|
|
|
|
|
@ -60,9 +83,18 @@ public class CustomerreturnRequestMainServiceImpl implements CustomerreturnReque |
|
|
|
@Resource |
|
|
|
private CustomerreturnRequestDetailMapper customerreturnRequestDetailMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private CustomerreturnJobMainMapper customerreturnJobMainMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private CustomerreturnJobDetailMapper customerreturnJobDetailMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private RequestsettingService requestsettingService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private RecordsettingService recordsettingService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private DeliverRecordMainService deliverRecordMainService; |
|
|
|
|
|
|
@ -71,7 +103,6 @@ public class CustomerreturnRequestMainServiceImpl implements CustomerreturnReque |
|
|
|
@Resource |
|
|
|
private JobUtils jobUtils; |
|
|
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
|
|
|
@ -83,13 +114,55 @@ public class CustomerreturnRequestMainServiceImpl implements CustomerreturnReque |
|
|
|
|
|
|
|
@Resource |
|
|
|
private Validator validator; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private ExpectinService expectinService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private TrendsApi trendsApi; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private CustomerreturnRecordMainMapper customerreturnRecordMainMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private CustomerreturnRecordDetailMapper customerreturnRecordDetailMapper; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private AdminUserApi userApi; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private JobsettingService jobsettingService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private CustomerdockService customerdockService; |
|
|
|
|
|
|
|
@Override |
|
|
|
public Long createCustomerreturnRequestMain(CustomerreturnRequestMainCreateReqVO createReqVO) { |
|
|
|
// 插入
|
|
|
|
CustomerreturnRequestMainDO customerreturnRequestMain = CustomerreturnRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
customerreturnRequestMainMapper.insert(customerreturnRequestMain); |
|
|
|
CustomerreturnRequestMainDO mainDO = CustomerreturnRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
this.validateCustomerreturnRequestMainCreate(mainDO); |
|
|
|
List<CustomerreturnRequestDetailDO> subDOList = CustomerreturnRequestMainConvert.INSTANCE.convertList03(createReqVO.getSubList()); |
|
|
|
for (CustomerreturnRequestDetailDO detailDO : subDOList) { |
|
|
|
this.validateCustomerreturnRequestDetailCreate(mainDO,detailDO); |
|
|
|
} |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.CUSTOMER_REJECT_REQUEST.getCode()); |
|
|
|
mainDO.setNumber(number); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(); |
|
|
|
requestStatusState.newObject(mainDO.getAutoCommit(), mainDO.getAutoAgree(), mainDO.getAutoExecute()); |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, subDOList); |
|
|
|
} |
|
|
|
customerreturnRequestMainMapper.insert(mainDO); |
|
|
|
for (CustomerreturnRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
detailDO.setNumber(number); |
|
|
|
} |
|
|
|
customerreturnRequestDetailMapper.insertBatch(subDOList); |
|
|
|
trendsApi.createTrends(mainDO.getId(), "CustomerreturnRequestMain", "增加了客户退货申请", TrendsTypeEnum.CREATE); |
|
|
|
// 返回
|
|
|
|
return customerreturnRequestMain.getId(); |
|
|
|
return mainDO.getId(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -98,7 +171,13 @@ public class CustomerreturnRequestMainServiceImpl implements CustomerreturnReque |
|
|
|
validateCustomerreturnRequestMainExists(updateReqVO.getId()); |
|
|
|
// 更新
|
|
|
|
CustomerreturnRequestMainDO updateObj = CustomerreturnRequestMainConvert.INSTANCE.convert(updateReqVO); |
|
|
|
this.validateCustomerreturnRequestMainCreate(updateObj); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(updateObj.getStatus())) { |
|
|
|
this.generateJob(updateObj, customerreturnRequestDetailMapper.selectList(updateReqVO.getId())); |
|
|
|
} |
|
|
|
customerreturnRequestMainMapper.updateById(updateObj); |
|
|
|
trendsApi.createTrends(updateObj.getId(), "CustomerreturnRequestMain", "修改了客户退货申请", TrendsTypeEnum.UPDATE); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -109,12 +188,6 @@ public class CustomerreturnRequestMainServiceImpl implements CustomerreturnReque |
|
|
|
customerreturnRequestMainMapper.deleteById(id); |
|
|
|
} |
|
|
|
|
|
|
|
private void validateCustomerreturnRequestMainExists(Long id) { |
|
|
|
if (customerreturnRequestMainMapper.selectById(id) == null) { |
|
|
|
throw exception(CUSTOMERRETURN_REQUEST_MAIN_NOT_EXISTS); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public CustomerreturnRequestMainDO getCustomerreturnRequestMain(Long id) { |
|
|
|
return customerreturnRequestMainMapper.selectById(id); |
|
|
@ -125,203 +198,528 @@ public class CustomerreturnRequestMainServiceImpl implements CustomerreturnReque |
|
|
|
return customerreturnRequestMainMapper.selectBatchIds(ids); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CustomerreturnRequestMainDO> getCustomerreturnRequestMainList(CustomConditions conditions) { |
|
|
|
return customerreturnRequestMainMapper.selectSeniorList(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageResult<CustomerreturnRequestMainDO> getCustomerreturnRequestMainPage(CustomerreturnRequestMainPageReqVO pageReqVO) { |
|
|
|
return customerreturnRequestMainMapper.selectPage(pageReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageResult<CustomerreturnRequestMainDO> getCustomerreturnRequestMainSenior(CustomConditions conditions) { |
|
|
|
return customerreturnRequestMainMapper.selectSenior(conditions); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<CustomerreturnRequestMainDO> getCustomerreturnRequestMainList(CustomerreturnRequestMainExportReqVO exportReqVO) { |
|
|
|
return customerreturnRequestMainMapper.selectList(exportReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
private void validatePurchaseclaimRequestMainExists(Long id) { |
|
|
|
private CustomerreturnRequestMainDO validateCustomerreturnRequestMainExists(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); |
|
|
|
return customerRequestMainDO; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public List<CustomerreturnRequestImportErrorVO> importCustomerreturnMainList(List<CustomerreturnRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { |
|
|
|
public List<CustomerreturnRequestImportErrorVO> importCustomerreturnMainList(List<CustomerreturnRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { |
|
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
|
throw exception(CUSTOMERRETURN_REQUEST_NOT_EXISTS); |
|
|
|
throw exception(CUSTOMERRETURN_REQUEST_MAIN_NOT_EXISTS); |
|
|
|
} |
|
|
|
List< CustomerreturnRequestImportErrorVO> errorList = new ArrayList<>(); |
|
|
|
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() + ","; |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerRejectRequest"); |
|
|
|
CustomerreturnRequestMainDO mainDo = CustomerreturnRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
String messageMain = validateCustomerreturnRequestMainImport(mainDo); |
|
|
|
List<CustomerreturnRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<CustomerreturnRequestDetailDO> subDOList = CustomerreturnRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
// 是否有错误数据
|
|
|
|
boolean flag = true; |
|
|
|
for (CustomerreturnRequestDetailDO detailDO : subDOList) { |
|
|
|
String messageDetail = validateCustomerreturnRequestDetailImport(detailDO, mainDo, businesstypeDO); |
|
|
|
if (messageMain.isEmpty() || messageDetail.isEmpty()) { |
|
|
|
CustomerreturnRequestImportErrorVO importErrorVO = CustomerreturnRequestMainConvert.INSTANCE.convert(createReqVO, detailDO); |
|
|
|
importErrorVO.setImportStatus("失败"); |
|
|
|
messageMain = messageMain + messageDetail; |
|
|
|
importErrorVO.setImportRemark(messageMain.substring(0, messageMain.length() - 1)); |
|
|
|
errorList.add(importErrorVO); |
|
|
|
flag = false; |
|
|
|
} |
|
|
|
} |
|
|
|
//写入数据
|
|
|
|
if (flag) { |
|
|
|
mainDo.setStatus(PlanStatusEnum.NEW.getCode()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.CUSTOMER_REJECT_REQUEST.getCode()); |
|
|
|
DeliverRecordMainDO deliverRecordMainDO = deliverRecordMainService.selectsMainRecordExist(mainDo.getDeliverRecordNumber()); |
|
|
|
if(deliverRecordMainDO != null){ |
|
|
|
mainDo.setFromWarehouseCode(deliverRecordMainDO.getToWarehouseCode()); |
|
|
|
mainDo.setCustomerDockCode(deliverRecordMainDO.getCustomerDockCode()); |
|
|
|
} |
|
|
|
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()); |
|
|
|
mainDo.setRequestTime(LocalDateTime.now()); |
|
|
|
mainDo.setNumber(number); |
|
|
|
customerreturnRequestMainMapper.insert(mainDo); |
|
|
|
for (CustomerreturnRequestDetailDO detailDO : subDOList) { |
|
|
|
detailDO.setNumber(mainDo.getNumber()); |
|
|
|
detailDO.setMasterId(mainDo.getId()); |
|
|
|
} |
|
|
|
}catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
customerreturnRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
|
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() + ","; |
|
|
|
}); |
|
|
|
return errorList; |
|
|
|
} |
|
|
|
|
|
|
|
private void generateJob(CustomerreturnRequestMainDO mainDO, List<CustomerreturnRequestDetailDO> detailDOList) { |
|
|
|
//跳过任务直接生成记录
|
|
|
|
if("TRUE".equals(mainDO.getDirectCreateRecord())) { |
|
|
|
CustomerreturnRecordMainCreateReqVO customerreturnRecordMainCreateReqVO = new CustomerreturnRecordMainCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(mainDO, customerreturnRecordMainCreateReqVO); |
|
|
|
//记录主表数据 同名属性同名赋值
|
|
|
|
customerreturnRecordMainCreateReqVO.setRequestNumber(mainDO.getNumber()); |
|
|
|
customerreturnRecordMainCreateReqVO.setId(null); |
|
|
|
customerreturnRecordMainCreateReqVO.setCreator(String.valueOf(userApi.getUser(getLoginUserId()).getId())); |
|
|
|
customerreturnRecordMainCreateReqVO.setCreateTime(null); |
|
|
|
customerreturnRecordMainCreateReqVO.setActiveDate(LocalDateTime.now()); |
|
|
|
customerreturnRecordMainCreateReqVO.setExecuteTime(LocalDateTime.now()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.CUSTOMER_REJECT_RECORD.getCode()); |
|
|
|
customerreturnRecordMainCreateReqVO.setNumber(number); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerRejectRecord"); |
|
|
|
customerreturnRecordMainCreateReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
customerreturnRecordMainMapper.insert(CustomerreturnRecordMainConvert.INSTANCE.convert(customerreturnRecordMainCreateReqVO)); |
|
|
|
for(CustomerreturnRequestDetailDO customerreturnRequestDetailDO : detailDOList) { |
|
|
|
//记录子表数据 同名属性同名赋值
|
|
|
|
CustomerreturnRecordDetailCreateReqVO customerreturnRecordDetailCreateReqVO = new CustomerreturnRecordDetailCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(customerreturnRequestDetailDO, customerreturnRecordDetailCreateReqVO); |
|
|
|
customerreturnRecordDetailCreateReqVO.setFromBatch(customerreturnRequestDetailDO.getBatch()); |
|
|
|
customerreturnRecordDetailCreateReqVO.setMasterId(customerreturnRequestDetailDO.getId().toString()); |
|
|
|
customerreturnRecordDetailCreateReqVO.setId(null); |
|
|
|
customerreturnRecordDetailCreateReqVO.setCreator(userApi.getUser(getLoginUserId()).getId().toString()); |
|
|
|
customerreturnRecordDetailCreateReqVO.setCreateTime(null); |
|
|
|
customerreturnRecordDetailMapper.insert(CustomerreturnRecordDetailConvert.INSTANCE.convert(customerreturnRecordDetailCreateReqVO)); |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
//生成客户退货任务
|
|
|
|
CustomerreturnJobMainDO customerreturnJobMainDO = CustomerreturnJobMainConvert.INSTANCE.convert(mainDO); |
|
|
|
//任务主表数据 同名属性同名赋值
|
|
|
|
BeanUtils.copyProperties(mainDO, customerreturnJobMainDO); |
|
|
|
customerreturnJobMainDO.setRequestNumber(mainDO.getNumber()); |
|
|
|
customerreturnJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.CUSTOMER_REJECT_JOB.getCode()); |
|
|
|
customerreturnJobMainDO.setNumber(number); |
|
|
|
customerreturnJobMainDO.setId(null); |
|
|
|
customerreturnJobMainDO.setCreator(userApi.getUser(getLoginUserId()).getId().toString()); |
|
|
|
customerreturnJobMainDO.setCreateTime(null); |
|
|
|
customerreturnJobMainDO.setUpdater(null); |
|
|
|
customerreturnJobMainDO.setUpdateTime(null); |
|
|
|
// 获取任务单据设置
|
|
|
|
JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("CustomerRejectJob"); |
|
|
|
customerreturnJobMainDO.setAutoComplete(jobsettingDO.getAutoComplete()); |
|
|
|
customerreturnJobMainDO.setAllowModifyLocation(jobsettingDO.getAllowModifyLocation()); |
|
|
|
customerreturnJobMainDO.setAllowModifyQty(jobsettingDO.getAllowModifyQty()); |
|
|
|
customerreturnJobMainDO.setAllowBiggerQty(jobsettingDO.getAllowBiggerQty()); |
|
|
|
customerreturnJobMainDO.setAllowSmallerQty(jobsettingDO.getAllowSmallerQty()); |
|
|
|
customerreturnJobMainDO.setAllowModifyInventoryStatus(jobsettingDO.getAllowModifyInventoryStatus()); |
|
|
|
customerreturnJobMainDO.setAllowContinuousScanning(jobsettingDO.getAllowContinuousScanning()); |
|
|
|
customerreturnJobMainDO.setAllowPartialComplete(jobsettingDO.getAllowPartialComplete()); |
|
|
|
customerreturnJobMainDO.setAllowModifyPackingNumber(jobsettingDO.getAllowModifyPackingNumber()); |
|
|
|
customerreturnJobMainDO.setAllowModifyBatch(jobsettingDO.getAllowModifyBach()); |
|
|
|
//增加业务类型
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerRejectJob"); |
|
|
|
customerreturnJobMainDO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
customerreturnJobMainMapper.insert(customerreturnJobMainDO); |
|
|
|
List<ExpectinCreateReqVO> expectinCreateReqVOList = new ArrayList<>(); |
|
|
|
List<CustomerreturnJobDetailDO> customerreturnJobDetailDOList = new ArrayList<>(); |
|
|
|
for(CustomerreturnRequestDetailDO customerreturnRequestDetailDO : detailDOList) { |
|
|
|
//任务子表数据 同名属性同名赋值
|
|
|
|
CustomerreturnJobDetailDO customerreturnJobDetailDO = CustomerreturnJobDetailConvert.INSTANCE.convert(customerreturnRequestDetailDO); |
|
|
|
BeanUtils.copyProperties(customerreturnRequestDetailDO, customerreturnJobDetailDO); |
|
|
|
customerreturnJobDetailDO.setOwnerCode(customerreturnRequestDetailDO.getFromOwnerCode()); |
|
|
|
customerreturnJobDetailDO.setId(null); |
|
|
|
customerreturnJobDetailDO.setCreator(userApi.getUser(getLoginUserId()).getId().toString()); |
|
|
|
customerreturnJobDetailDO.setCreateTime(null); |
|
|
|
customerreturnJobDetailDO.setUpdater(null); |
|
|
|
customerreturnJobDetailDO.setUpdateTime(null); |
|
|
|
customerreturnJobDetailDO.setMasterId(customerreturnJobMainDO.getId()); |
|
|
|
customerreturnJobDetailDOList.add(customerreturnJobDetailDO); |
|
|
|
//预计入
|
|
|
|
ExpectinCreateReqVO expectinCreateReqVO = new ExpectinCreateReqVO(); |
|
|
|
BeanUtils.copyProperties(customerreturnJobDetailDO, expectinCreateReqVO); |
|
|
|
expectinCreateReqVO.setJobNumber(number); |
|
|
|
expectinCreateReqVO.setBusinessType(customerreturnJobMainDO.getBusinessType()); |
|
|
|
expectinCreateReqVO.setLocationCode(customerreturnJobDetailDO.getFromLocationCode()); |
|
|
|
expectinCreateReqVO.setOwnerCode(customerreturnJobDetailDO.getOwnerCode()); |
|
|
|
expectinCreateReqVO.setQty(customerreturnJobDetailDO.getQty()); |
|
|
|
expectinCreateReqVOList.add(expectinCreateReqVO); |
|
|
|
} |
|
|
|
customerreturnJobDetailMapper.insertBatch(customerreturnJobDetailDOList); |
|
|
|
//增加预计入
|
|
|
|
expectinService.createExpectin(expectinCreateReqVOList); |
|
|
|
trendsApi.createTrends(customerreturnJobMainDO.getId(), "CustomerRejectJob", "客户退货申请生成客户退货任务", TrendsTypeEnum.CREATE); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 主表校验导入,并赋值一些参数 |
|
|
|
* @param mainDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateCustomerreturnRequestMainImport(CustomerreturnRequestMainDO mainDo) { |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
|
|
|
|
String messageMain = ""; |
|
|
|
//主表的验证
|
|
|
|
//校验客户代码
|
|
|
|
try { |
|
|
|
CustomerreturnRequestMainDO customerreturnRequestMainDO = this.validateDeliverRecord(mainDo); |
|
|
|
mainDo.setDeliverPlanNumber(customerreturnRequestMainDO.getDeliverPlanNumber()); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
//校验业务类型相关属性
|
|
|
|
try { |
|
|
|
validateRequestsettingAndBusinesstype(mainDo); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, mainDo); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
return messageMain; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 子表校验导入,并赋值一些参数 |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private String validateCustomerreturnRequestDetailImport(CustomerreturnRequestDetailDO detailDo, CustomerreturnRequestMainDO mainDo, BusinesstypeDO businesstypeDO) { |
|
|
|
String messageDetail = ""; |
|
|
|
// 校验物品基础信息
|
|
|
|
try { |
|
|
|
validateDeliverRecordDetail(mainDo,detailDo); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
ItembasicDO itembasicDO = validatorItembasic(detailDo.getItemCode()); |
|
|
|
if ( !detailDo.getUom().equals(itembasicDO.getUom())) { |
|
|
|
messageDetail += "计量单位" + itembasicDO.getUom() + "错误,应该是" + detailDo.getUom() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, createReqVO); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
if(!"".equals(detailDo.getFromLocationCode())){ |
|
|
|
validatorIfInToLocationType(detailDo.getFromLocationCode(),businesstypeDO); |
|
|
|
} |
|
|
|
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); |
|
|
|
} |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
validatorIfInFromLocationType(detailDo.getToLocationCode(),businesstypeDO); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += "从" + ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
validatorIfInventoryStatuses(detailDo.getInventoryStatus(),businesstypeDO); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += "到" + ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
validatorBalance(detailDo); |
|
|
|
} catch (ServiceException ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
ValidationUtils.validate(validator, mainDo); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail+= ex.getMessage() + (","); |
|
|
|
} |
|
|
|
return messageDetail; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer closeCustomerreturnRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
|
CustomerreturnRequestMainDO mainDO = validateCustomerreturnRequestMainExists(id); |
|
|
|
Long count = customerreturnJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(CUSTOMERRETURN_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.close(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(CUSTOMERRETURN_REQUEST_CANNOT_CLOSE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, "CustomerRejectRequest", "关闭了客户退货申请", TrendsTypeEnum.UPDATE); |
|
|
|
return customerreturnRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer reAddCustomerreturnRequestMain(Long id) { |
|
|
|
// 校验存在存在下级单据
|
|
|
|
CustomerreturnRequestMainDO mainDO = validateCustomerreturnRequestMainExists(id); |
|
|
|
Long count = customerreturnJobMainMapper.selectByRequestNumber(mainDO.getNumber()); |
|
|
|
if(count > 0) { |
|
|
|
throw new ServiceException(CUSTOMERRETURN_REQUEST_JOB_EXISTS); |
|
|
|
} |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.reAdd(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(CUSTOMERRETURN_REQUEST_CANNOT_RE_ADD); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
trendsApi.createTrends(id, "CustomerRejectRequest", "打开了客户退货申请", TrendsTypeEnum.UPDATE); |
|
|
|
return customerreturnRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer submitCustomerreturnRequestMain(Long id) { |
|
|
|
CustomerreturnRequestMainDO mainDO = validateCustomerreturnRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(CUSTOMERRETURN_REQUEST_CANNOT_SUBMIT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, customerreturnRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "CustomerRejectRequest", "提交了客户退货申请", TrendsTypeEnum.UPDATE); |
|
|
|
return customerreturnRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer agreeCustomerreturnRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
CustomerreturnRequestMainDO mainDO = validateCustomerreturnRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.agree(mainDO.getAutoExecute()); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(CUSTOMERRETURN_REQUEST_CANNOT_AGREE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用自动执行方法
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
this.generateJob(mainDO, customerreturnRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
} |
|
|
|
trendsApi.createTrends(id, "CustomerRejectRequest", "审批同意了客户退货申请", TrendsTypeEnum.UPDATE); |
|
|
|
return customerreturnRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer handleCustomerreturnRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
CustomerreturnRequestMainDO mainDO = validateCustomerreturnRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.handle(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(CUSTOMERRETURN_REQUEST_CANNOT_HANDLE); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
//调用执行方法
|
|
|
|
this.generateJob(mainDO, customerreturnRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
trendsApi.createTrends(id, "CustomerRejectRequest", "执行了客户退货申请", TrendsTypeEnum.UPDATE); |
|
|
|
return customerreturnRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer refusedCustomerreturnRequestMain(Long id) { |
|
|
|
// 校验存在
|
|
|
|
CustomerreturnRequestMainDO mainDO = validateCustomerreturnRequestMainExists(id); |
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
boolean flag = requestStatusState.refused(); |
|
|
|
if(!flag) { |
|
|
|
throw new ServiceException(CUSTOMERRETURN_REQUEST_CANNOT_ABORT); |
|
|
|
} |
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
trendsApi.createTrends(id, "CustomerRejectRequest", "审批拒绝了客户退货申请", TrendsTypeEnum.UPDATE); |
|
|
|
return customerreturnRequestMainMapper.updateById(mainDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 新增主表校验 |
|
|
|
* @param mainDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private void validateCustomerreturnRequestMainCreate(CustomerreturnRequestMainDO mainDo) { |
|
|
|
//校验发货记录并赋值
|
|
|
|
CustomerreturnRequestMainDO customerreturnRequestMainDO = this.validateDeliverRecord(mainDo); |
|
|
|
mainDo.setDeliverPlanNumber(customerreturnRequestMainDO.getDeliverPlanNumber()); |
|
|
|
//校验业务类型和申请设置并赋值
|
|
|
|
validateRequestsettingAndBusinesstype(mainDo); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 新增子表校验 |
|
|
|
* @param detailDo |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private void validateCustomerreturnRequestDetailCreate(CustomerreturnRequestMainDO mainDo, CustomerreturnRequestDetailDO detailDo) { |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerRejectRequest"); |
|
|
|
//校验成品发货记录子表并赋值
|
|
|
|
validateDeliverRecordDetail(mainDo,detailDo); |
|
|
|
//校验物品基础信息并赋值
|
|
|
|
ItembasicDO itembasicDO = validatorItembasic(detailDo.getItemCode()); |
|
|
|
if(detailDo.getUom() != null){ |
|
|
|
if (!detailDo.getUom().equals(itembasicDO.getUom())) { |
|
|
|
//注意转换字段数值
|
|
|
|
throw exception(UOM_EXCEPTION,"计量单位" + itembasicDO.getUom() + "错误,应该是" + detailDo.getUom() + ","); |
|
|
|
} |
|
|
|
}); |
|
|
|
//错误不为空并非部分更新,手工回滚
|
|
|
|
if (!errorList.isEmpty() && !updatePart) { |
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
|
|
|
} |
|
|
|
return errorList; |
|
|
|
//校验来源库位
|
|
|
|
if(!"".equals(detailDo.getFromLocationCode())){ |
|
|
|
validatorIfInToLocationType(detailDo.getFromLocationCode(),businesstypeDO); |
|
|
|
} |
|
|
|
//校验到库位
|
|
|
|
// customerdockService.
|
|
|
|
validatorIfInFromLocationType(detailDo.getToLocationCode(),businesstypeDO); |
|
|
|
//校验库存状态
|
|
|
|
validatorIfInventoryStatuses(detailDo.getInventoryStatus(),businesstypeDO); |
|
|
|
//校验库存余额
|
|
|
|
validatorBalance(detailDo); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验发货记录并赋值 |
|
|
|
* @param mainDo |
|
|
|
*/ |
|
|
|
private CustomerreturnRequestMainDO validateDeliverRecord(CustomerreturnRequestMainDO mainDo) { |
|
|
|
DeliverRecordMainDO deliverRecordMainDO = deliverRecordMainService.selectsMainRecordExist(mainDo.getDeliverRecordNumber()); |
|
|
|
mainDo.setDeliverPlanNumber(deliverRecordMainDO.getDeliverPlanNumber()); |
|
|
|
mainDo.setCustomerCode(deliverRecordMainDO.getCustomerCode()); |
|
|
|
mainDo.setCustomerDockCode(deliverRecordMainDO.getCustomerDockCode()); |
|
|
|
return mainDo; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 校验业务类型和申请设置并赋值 |
|
|
|
* @param mainDo |
|
|
|
*/ |
|
|
|
private void validateRequestsettingAndBusinesstype(CustomerreturnRequestMainDO mainDo){ |
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("CustomerRejectRequest"); |
|
|
|
if (requestsettingDO != null) { |
|
|
|
mainDo.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
mainDo.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
mainDo.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
} |
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerRejectRequest"); |
|
|
|
if(businesstypeDO != null){ |
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
mainDo.setToLocationTypes(businesstypeDO.getInLocationTypes()); |
|
|
|
mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
mainDo.setToAreaCodes(businesstypeDO.getInAreaCodes()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验成品发货记录子表并赋值 |
|
|
|
* @param mainDo |
|
|
|
* @param detailDO |
|
|
|
*/ |
|
|
|
private void validateDeliverRecordDetail(CustomerreturnRequestMainDO mainDo,CustomerreturnRequestDetailDO detailDO){ |
|
|
|
List<DeliverRecordDetailDO> deliverRecordDetailDO = deliverRecordMainService.selectsDeliverRecordExist(mainDo.getDeliverRecordNumber()); |
|
|
|
if(deliverRecordDetailDO != null && deliverRecordDetailDO.size() != 0){ |
|
|
|
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 exception(DELIVER_RECORD_DETAIL_EXCEPTION,"物料代码" + detailDO.getItemCode() + "批次" + detailDO.getBatch() + "箱码" + detailDO.getPackingNumber() + "不在发货记录单" |
|
|
|
+ mainDo.getDeliverRecordNumber() + "中"); |
|
|
|
// throw exception(DELIVER_RECORD_DETAIL_EXCEPTION,"销售订单号" + detailDO.getSoNumber() + "销售订单行" + detailDO.getSoLine()
|
|
|
|
// + "物料代码" + detailDO.getItemCode() + "批次" + detailDO.getBatch() + "箱码" + detailDO.getPackingNumber() + "不在发货记录单"
|
|
|
|
// + createReqVO.getDeliverRecordNumber() + "中");
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
throw exception(DELIVER_RECORD_DETAIL_NOT_EXISTS); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验物品基础信息并赋值 |
|
|
|
* @param itemCode |
|
|
|
*/ |
|
|
|
private ItembasicDO validatorItembasic(String itemCode) { |
|
|
|
return itembasicService.selectItembasic(itemCode); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验出库库位类型是否一致 |
|
|
|
* @param fromLocationCode |
|
|
|
* @param businesstypeDO |
|
|
|
*/ |
|
|
|
private void validatorIfInToLocationType(String fromLocationCode, BusinesstypeDO businesstypeDO) { |
|
|
|
jobUtils.ifInToLocationType(fromLocationCode, businesstypeDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验出库库位类型是否一致 |
|
|
|
* @param toLocationCode |
|
|
|
* @param businesstypeDO |
|
|
|
*/ |
|
|
|
private void validatorIfInFromLocationType(String toLocationCode, BusinesstypeDO businesstypeDO) { |
|
|
|
jobUtils.ifInFromLocationType(toLocationCode, businesstypeDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验库存状态是否一致 |
|
|
|
* @param inventoryStatus |
|
|
|
* @param businesstypeDO |
|
|
|
*/ |
|
|
|
private Boolean validatorIfInventoryStatuses(String inventoryStatus, BusinesstypeDO businesstypeDO) { |
|
|
|
return jobUtils.ifInInventoryStatuses(inventoryStatus, businesstypeDO); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 校验库存余额 |
|
|
|
* @param |
|
|
|
*/ |
|
|
|
private void validatorBalance(CustomerreturnRequestDetailDO detailDO) { |
|
|
|
ArrayList<String> list = new ArrayList<>(); |
|
|
|
list.add(detailDO.getInventoryStatus()); |
|
|
|
if("CUST".equals(detailDO.getFromLocationCode())){ |
|
|
|
List<BalanceDO> balance = jobUtils.selectlocationReturnManagementAccuracy(detailDO.getItemCode(),detailDO.getPackingNumber() |
|
|
|
,detailDO.getBatch(),detailDO.getFromLocationCode(),list); |
|
|
|
isqty(detailDO.getQty(), balance.get(0).getQty()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private String isqty(BigDecimal qty1, BigDecimal qty2) { |
|
|
|
if (qty1.compareTo(qty2) < 0) { |
|
|
|
return "ture"; |
|
|
|
} else { |
|
|
|
throw new UtilException("上架数量" + qty2 + "不能大于库存数量" + qty1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|