|
@ -2,23 +2,46 @@ package com.win.module.wms.service.customersettleRequest; |
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
import cn.hutool.core.exceptions.UtilException; |
|
|
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.pojo.CustomConditions; |
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
import com.win.framework.dict.core.util.DictFrameworkUtils; |
|
|
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.serialnumber.SerialNumberApi; |
|
|
import com.win.module.system.api.serialnumber.SerialNumberApi; |
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
|
|
import com.win.module.wms.controller.customersettleRecord.vo.CustomersettleRecordDetailCreateReqVO; |
|
|
|
|
|
import com.win.module.wms.controller.customersettleRecord.vo.CustomersettleRecordMainCreateReqVO; |
|
|
import com.win.module.wms.controller.customersettleRequest.vo.*; |
|
|
import com.win.module.wms.controller.customersettleRequest.vo.*; |
|
|
|
|
|
import com.win.module.wms.controller.deliverRequest.vo.DeliverRequestDetailCreateReqVO; |
|
|
|
|
|
import com.win.module.wms.controller.deliverRequest.vo.DeliverRequestMainCreateReqVO; |
|
|
|
|
|
import com.win.module.wms.convert.customersettleRecord.CustomersettleRecordDetailConvert; |
|
|
|
|
|
import com.win.module.wms.convert.customersettleRecord.CustomersettleRecordMainConvert; |
|
|
import com.win.module.wms.convert.customersettleRequest.CustomersettleRequestDetailConvert; |
|
|
import com.win.module.wms.convert.customersettleRequest.CustomersettleRequestDetailConvert; |
|
|
|
|
|
import com.win.module.wms.convert.deliverRequest.DeliverRequestDetailConvert; |
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; |
|
|
|
|
|
import com.win.module.wms.dal.dataobject.customerreturnRequest.CustomerreturnRequestMainDO; |
|
|
|
|
|
import com.win.module.wms.dal.dataobject.customersettleRecord.CustomersettleRecordMainDO; |
|
|
import com.win.module.wms.dal.dataobject.customersettleRequest.CustomersettleRequestDetailDO; |
|
|
import com.win.module.wms.dal.dataobject.customersettleRequest.CustomersettleRequestDetailDO; |
|
|
import com.win.module.wms.dal.dataobject.deliverRecord.DeliverRecordDetailDO; |
|
|
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.deliverRecord.DeliverRecordMainDO; |
|
|
|
|
|
import com.win.module.wms.dal.dataobject.deliverRequest.DeliverRequestDetailDO; |
|
|
|
|
|
import com.win.module.wms.dal.dataobject.deliverRequest.DeliverRequestMainDO; |
|
|
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
|
|
import com.win.module.wms.dal.dataobject.purchasereturnRequest.PurchasereturnRequestMainDO; |
|
|
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; |
|
|
import com.win.module.wms.dal.dataobject.requestsetting.RequestsettingDO; |
|
|
|
|
|
import com.win.module.wms.dal.mysql.customersettleRecord.CustomersettleRecordDetailMapper; |
|
|
|
|
|
import com.win.module.wms.dal.mysql.customersettleRecord.CustomersettleRecordMainMapper; |
|
|
import com.win.module.wms.dal.mysql.customersettleRequest.CustomersettleRequestDetailMapper; |
|
|
import com.win.module.wms.dal.mysql.customersettleRequest.CustomersettleRequestDetailMapper; |
|
|
import com.win.module.wms.enums.DictTypeConstants; |
|
|
import com.win.module.wms.enums.DictTypeConstants; |
|
|
|
|
|
import com.win.module.wms.enums.request.RequestStatusEnum; |
|
|
|
|
|
import com.win.module.wms.enums.request.RequestStatusState; |
|
|
|
|
|
import com.win.module.wms.service.customersettleRecord.CustomersettleRecordMainService; |
|
|
import com.win.module.wms.service.deliverRecord.DeliverRecordMainService; |
|
|
import com.win.module.wms.service.deliverRecord.DeliverRecordMainService; |
|
|
import com.win.module.wms.service.requestsetting.RequestsettingService; |
|
|
import com.win.module.wms.service.requestsetting.RequestsettingService; |
|
|
import com.win.module.wms.util.JobUtils; |
|
|
import com.win.module.wms.util.JobUtils; |
|
|
|
|
|
import org.checkerframework.checker.units.qual.C; |
|
|
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
import javax.annotation.Resource; |
|
|
import javax.annotation.Resource; |
|
|
import javax.validation.Validator; |
|
|
import javax.validation.Validator; |
|
@ -53,27 +76,37 @@ public class CustomersettleRequestMainServiceImpl implements CustomersettleReque |
|
|
|
|
|
|
|
|
@Resource |
|
|
@Resource |
|
|
private CustomersettleRequestDetailMapper customersettleRequestDetailMapper; |
|
|
private CustomersettleRequestDetailMapper customersettleRequestDetailMapper; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private CustomersettleRecordMainMapper customersettleRecordMainMapper; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private CustomersettleRecordDetailMapper customersettleRecordDetailMapper; |
|
|
|
|
|
|
|
|
@Resource |
|
|
@Resource |
|
|
private DeliverRecordMainService deliverRecordMainService; |
|
|
private CustomersettleRecordMainService customersettleRecordMainService; |
|
|
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
|
private DeliverRecordMainService deliverRecordMainService; |
|
|
@Resource |
|
|
@Resource |
|
|
private RequestsettingService requestsettingService; |
|
|
private RequestsettingService requestsettingService; |
|
|
|
|
|
|
|
|
@Resource |
|
|
@Resource |
|
|
private JobUtils jobUtils; |
|
|
private JobUtils jobUtils; |
|
|
@Resource |
|
|
@Resource |
|
|
private Validator validator; |
|
|
private Validator validator; |
|
|
|
|
|
@Resource |
|
|
|
|
|
private TrendsApi trendsApi; |
|
|
@Resource |
|
|
@Resource |
|
|
private SerialNumberApi serialNumberApi; |
|
|
private SerialNumberApi serialNumberApi; |
|
|
@Override |
|
|
@Override |
|
|
public Long createCustomersettleRequestMain(CustomersettleRequestMainCreateReqVO createReqVO) { |
|
|
public Long createCustomersettleRequestMain(CustomersettleRequestMainCreateReqVO createReqVO) { |
|
|
// 插入
|
|
|
// 插入
|
|
|
CustomersettleRequestMainDO customersettleRequestMain = CustomersettleRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
CustomersettleRequestMainDO customersettleRequestMainDO = validatorToCreate(createReqVO); |
|
|
customersettleRequestMainMapper.insert(customersettleRequestMain); |
|
|
//调用自动执行方法
|
|
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(customersettleRequestMainDO.getStatus())) { |
|
|
|
|
|
generateRecord(customersettleRequestMainDO,customersettleRequestDetailMapper.selectList(customersettleRequestMainDO.getId())); |
|
|
|
|
|
} |
|
|
|
|
|
trendsApi.createTrends(customersettleRequestMainDO.getId(), "CustomersettleRequest", "增加了客户结算申请", TrendsTypeEnum.CREATE); |
|
|
// 返回
|
|
|
// 返回
|
|
|
return customersettleRequestMain.getId(); |
|
|
return customersettleRequestMainDO.getId(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
@ -82,6 +115,10 @@ public class CustomersettleRequestMainServiceImpl implements CustomersettleReque |
|
|
validateCustomersettleRequestMainExists(updateReqVO.getId()); |
|
|
validateCustomersettleRequestMainExists(updateReqVO.getId()); |
|
|
// 更新
|
|
|
// 更新
|
|
|
CustomersettleRequestMainDO updateObj = CustomersettleRequestMainConvert.INSTANCE.convert(updateReqVO); |
|
|
CustomersettleRequestMainDO updateObj = CustomersettleRequestMainConvert.INSTANCE.convert(updateReqVO); |
|
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(updateObj.getStatus())) { |
|
|
|
|
|
generateRecord(updateObj,customersettleRequestDetailMapper.selectList(updateObj.getId())); |
|
|
|
|
|
} |
|
|
|
|
|
trendsApi.createTrends(updateObj.getId(), "CustomersettleRequest", "修改了客户结算申请", TrendsTypeEnum.UPDATE); |
|
|
customersettleRequestMainMapper.updateById(updateObj); |
|
|
customersettleRequestMainMapper.updateById(updateObj); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -93,10 +130,12 @@ public class CustomersettleRequestMainServiceImpl implements CustomersettleReque |
|
|
customersettleRequestMainMapper.deleteById(id); |
|
|
customersettleRequestMainMapper.deleteById(id); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void validateCustomersettleRequestMainExists(Long id) { |
|
|
private CustomersettleRequestMainDO validateCustomersettleRequestMainExists(Long id) { |
|
|
if (customersettleRequestMainMapper.selectById(id) == null) { |
|
|
CustomersettleRequestMainDO customersettleRequestMainDO = customersettleRequestMainMapper.selectById(id); |
|
|
|
|
|
if (customersettleRequestMainDO == null) { |
|
|
throw exception(CUSTOMERSETTLE_REQUEST_MAIN_NOT_EXISTS); |
|
|
throw exception(CUSTOMERSETTLE_REQUEST_MAIN_NOT_EXISTS); |
|
|
} |
|
|
} |
|
|
|
|
|
return customersettleRequestMainDO; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
@ -121,115 +160,366 @@ public class CustomersettleRequestMainServiceImpl implements CustomersettleReque |
|
|
public List<CustomersettleRequestMainDO> getCustomersettleRequestMainList(CustomersettleRequestMainExportReqVO exportReqVO) { |
|
|
public List<CustomersettleRequestMainDO> getCustomersettleRequestMainList(CustomersettleRequestMainExportReqVO exportReqVO) { |
|
|
return customersettleRequestMainMapper.selectList(exportReqVO); |
|
|
return customersettleRequestMainMapper.selectList(exportReqVO); |
|
|
} |
|
|
} |
|
|
|
|
|
//关闭
|
|
|
|
|
|
@Override |
|
|
|
|
|
public Integer closeCustomersettleRequestMain(Long id) { |
|
|
|
|
|
// 校验存在存在下级单据
|
|
|
|
|
|
CustomersettleRequestMainDO mainDO = validateCustomersettleRequestMainExists(id); |
|
|
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
|
|
boolean flag = requestStatusState.close(); |
|
|
|
|
|
if(!flag) { |
|
|
|
|
|
throw new ServiceException(CUSTOMERSETTLE_REQUEST_CANNOT_CLOSE); |
|
|
|
|
|
} |
|
|
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
|
|
trendsApi.createTrends(id, "customersettleRequest", "关闭了客户结算申请", TrendsTypeEnum.UPDATE); |
|
|
|
|
|
return customersettleRequestMainMapper.updateById(mainDO); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//打开
|
|
|
|
|
|
@Override |
|
|
|
|
|
@Transactional |
|
|
|
|
|
public Integer reAddCustomersettleRequestMain(Long id) { |
|
|
|
|
|
// 校验存在存在下级单据
|
|
|
|
|
|
CustomersettleRequestMainDO mainDO = validateCustomersettleRequestMainExists(id); |
|
|
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
|
|
boolean flag = requestStatusState.reAdd(); |
|
|
|
|
|
if(!flag) { |
|
|
|
|
|
throw new ServiceException(CUSTOMERSETTLE_REQUEST_CANNOT_RE_ADD); |
|
|
|
|
|
} |
|
|
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode());//增加操作记录
|
|
|
|
|
|
trendsApi.createTrends(id, "customersettleRequest", "打开了客户结算申请", TrendsTypeEnum.UPDATE); |
|
|
|
|
|
return customersettleRequestMainMapper.updateById(mainDO); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//提交
|
|
|
|
|
|
@Transactional |
|
|
|
|
|
@Override |
|
|
|
|
|
public Integer submitCustomersettleRequestMain(Long id) { |
|
|
|
|
|
CustomersettleRequestMainDO mainDO = validateCustomersettleRequestMainExists(id); |
|
|
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
|
|
boolean flag = requestStatusState.submit(mainDO.getAutoAgree(), mainDO.getAutoExecute()); |
|
|
|
|
|
if(!flag) { |
|
|
|
|
|
throw new ServiceException(CUSTOMERSETTLE_REQUEST_CANNOT_SUBMIT); |
|
|
|
|
|
} |
|
|
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
|
|
//调用自动执行方法
|
|
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
|
|
this.generateRecord(mainDO, customersettleRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
|
|
} |
|
|
|
|
|
trendsApi.createTrends(id, "deliverRequest", "提交了客户结算申请", TrendsTypeEnum.UPDATE); |
|
|
|
|
|
return customersettleRequestMainMapper.updateById(mainDO); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//审批同意
|
|
|
|
|
|
@Transactional |
|
|
|
|
|
@Override |
|
|
|
|
|
public Integer agreeCustomersettleRequestMain(Long id) { |
|
|
|
|
|
// 校验存在
|
|
|
|
|
|
CustomersettleRequestMainDO mainDO = validateCustomersettleRequestMainExists(id); |
|
|
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
|
|
boolean flag = requestStatusState.agree(mainDO.getAutoExecute()); |
|
|
|
|
|
if(!flag) { |
|
|
|
|
|
throw new ServiceException(CUSTOMERSETTLE_REQUEST_CANNOT_AGREE); |
|
|
|
|
|
} |
|
|
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
|
|
//调用自动执行方法
|
|
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
|
|
this.generateRecord(mainDO, customersettleRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
|
|
} |
|
|
|
|
|
trendsApi.createTrends(id, "deliverRequest", "审批同意了客户结算申请", TrendsTypeEnum.UPDATE); |
|
|
|
|
|
return customersettleRequestMainMapper.updateById(mainDO); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//执行
|
|
|
|
|
|
@Transactional |
|
|
@Override |
|
|
@Override |
|
|
|
|
|
public Integer handleCustomersettleRequestMain(Long id) { |
|
|
|
|
|
// 校验存在
|
|
|
|
|
|
CustomersettleRequestMainDO mainDO = validateCustomersettleRequestMainExists(id); |
|
|
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
|
|
boolean flag = requestStatusState.handle(); |
|
|
|
|
|
if(!flag) { |
|
|
|
|
|
throw new ServiceException(CUSTOMERSETTLE_REQUEST_CANNOT_HANDLE); |
|
|
|
|
|
} |
|
|
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
|
|
//调用执行方法
|
|
|
|
|
|
this.generateRecord(mainDO, customersettleRequestDetailMapper.selectList(mainDO.getId())); |
|
|
|
|
|
trendsApi.createTrends(id, "deliverRequest", "执行了客户结算申请", TrendsTypeEnum.UPDATE); |
|
|
|
|
|
return customersettleRequestMainMapper.updateById(mainDO); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//审批拒绝
|
|
|
@Transactional |
|
|
@Transactional |
|
|
public List<CustomersettleRequestImportErrorVO> customersettleRequestMainService(List<CustomersettleRequestMainCreateReqVO> datas, Integer mode, boolean updatePart){ |
|
|
@Override |
|
|
|
|
|
public Integer abortCustomersettleRequestMain(Long id) { |
|
|
|
|
|
// 校验存在
|
|
|
|
|
|
CustomersettleRequestMainDO mainDO = validateCustomersettleRequestMainExists(id); |
|
|
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(mainDO.getStatus()); |
|
|
|
|
|
boolean flag = requestStatusState.refused(); |
|
|
|
|
|
if(!flag) { |
|
|
|
|
|
throw new ServiceException(CUSTOMERSETTLE_REQUEST_CANNOT_ABORT); |
|
|
|
|
|
} |
|
|
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
|
|
trendsApi.createTrends(id, "customersettleRequest", "审批拒绝了客户结算申请", TrendsTypeEnum.UPDATE); |
|
|
|
|
|
return customersettleRequestMainMapper.updateById(mainDO); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 生成客户收货记录,不要改动事务传播方式,否则会有事务问题 |
|
|
|
|
|
* |
|
|
|
|
|
* @param mainDO 客户收货主 |
|
|
|
|
|
* @param detailDOList 客户收货子 |
|
|
|
|
|
*/ |
|
|
|
|
|
private void generateRecord(CustomersettleRequestMainDO mainDO, List<CustomersettleRequestDetailDO> detailDOList) { |
|
|
|
|
|
if ("TRUE".equals(mainDO.getDirectCreateRecord())) { |
|
|
|
|
|
CustomersettleRecordMainCreateReqVO customersettleRecordMainCreateReqVO = new CustomersettleRecordMainCreateReqVO(); |
|
|
|
|
|
BeanUtils.copyProperties(mainDO, customersettleRecordMainCreateReqVO); |
|
|
|
|
|
customersettleRecordMainCreateReqVO.setRequestNumber(mainDO.getNumber()); |
|
|
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.CUSTOMER_SETTLE_REQUEST.getCode()); |
|
|
|
|
|
customersettleRecordMainCreateReqVO.setNumber(number); |
|
|
|
|
|
//增加业务类型
|
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomersettleRecord"); |
|
|
|
|
|
customersettleRecordMainCreateReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
|
|
|
CustomersettleRecordMainDO convert = CustomersettleRecordMainConvert.INSTANCE.convert(customersettleRecordMainCreateReqVO); |
|
|
|
|
|
customersettleRecordMainMapper.insert(convert); |
|
|
|
|
|
for (CustomersettleRequestDetailDO customersettleRequestDetailDO : detailDOList) { |
|
|
|
|
|
CustomersettleRecordDetailCreateReqVO customersettleRecordDetailCreateReqVO = new CustomersettleRecordDetailCreateReqVO(); |
|
|
|
|
|
BeanUtils.copyProperties(customersettleRequestDetailDO, customersettleRecordDetailCreateReqVO); |
|
|
|
|
|
customersettleRecordDetailCreateReqVO.setNumber(number); |
|
|
|
|
|
customersettleRecordDetailCreateReqVO.setMasterId(convert.getId().toString()); |
|
|
|
|
|
customersettleRecordDetailMapper.insert(CustomersettleRecordDetailConvert.INSTANCE.convert(customersettleRecordDetailCreateReqVO)); |
|
|
|
|
|
trendsApi.createTrends(mainDO.getId(), "CustomersettleRecord", "客户结算申请生成客户结算记录", TrendsTypeEnum.CREATE); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public List<CustomersettleRequestMainDO> getCustomersettleRequestMainList(CustomConditions conditions) { |
|
|
|
|
|
return customersettleRequestMainMapper.selectSeniorList(conditions); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
@Transactional |
|
|
|
|
|
public List<CustomersettleRequestImportErrorVO> customersettleRequestMainImport(List<CustomersettleRequestMainCreateReqVO> datas, Integer mode, boolean updatePart){ |
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
throw exception(CUSTOMERSETTLE_REQUEST_NOT_EXISTS); |
|
|
throw exception(CUSTOMERSETTLE_REQUEST_NOT_EXISTS); |
|
|
} |
|
|
} |
|
|
List<CustomersettleRequestImportErrorVO> errorList = new ArrayList<>(); |
|
|
List<CustomersettleRequestImportErrorVO> errorList = new ArrayList<>(); |
|
|
datas.forEach(createReqVO -> { |
|
|
datas.forEach(createReqVO -> { |
|
|
String messageMain = ""; |
|
|
CustomersettleRequestMainDO mainDO = CustomersettleRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
BusinesstypeDO businesstypeDO = null; |
|
|
String messageMain = this.validateCustomersettleRequestMainImport(mainDO); |
|
|
//主表校验方法
|
|
|
List<CustomersettleRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
|
|
List<CustomersettleRequestDetailDO> subDOList = CustomersettleRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
|
|
// 是否有错误数据
|
|
|
|
|
|
boolean flag = true; |
|
|
|
|
|
for (CustomersettleRequestDetailDO detailDO : subDOList) { |
|
|
|
|
|
String messageDetail = this.validateCustomersettleRequestDetailImport(mainDO, detailDO); |
|
|
|
|
|
if(!messageMain.isEmpty() || !messageDetail.isEmpty()) { |
|
|
|
|
|
CustomersettleRequestImportErrorVO importErrorVO = CustomersettleRequestMainConvert.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.CUSTOMER_SETTLE_REQUEST.getCode()); |
|
|
|
|
|
mainDO.setNumber(number); |
|
|
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("CustomersettleRequest"); |
|
|
|
|
|
RequestStatusState requestStatusState = new RequestStatusState(); |
|
|
|
|
|
requestStatusState.newObject(requestsettingDO.getAutoCommit(), requestsettingDO.getAutoAgree(), requestsettingDO.getAutoExecute()); |
|
|
|
|
|
mainDO.setStatus(requestStatusState.getState().getCode()); |
|
|
|
|
|
mainDO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
|
|
mainDO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
|
|
mainDO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
|
|
mainDO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
|
|
mainDO.setRequestTime(LocalDateTime.now()); |
|
|
|
|
|
customersettleRequestMainMapper.insert(mainDO); |
|
|
|
|
|
trendsApi.createTrends(mainDO.getId(), "customersettleRequestMain", "导入了客户结算申请", TrendsTypeEnum.CREATE); |
|
|
|
|
|
for (CustomersettleRequestDetailDO detailDO : subDOList) { |
|
|
|
|
|
detailDO.setMasterId(mainDO.getId()); |
|
|
|
|
|
detailDO.setNumber(number); |
|
|
|
|
|
} |
|
|
|
|
|
//调用自动执行方法
|
|
|
|
|
|
if(RequestStatusEnum.HANDLING.getCode().equals(mainDO.getStatus())) { |
|
|
|
|
|
this.generateRecord(mainDO, subDOList); |
|
|
|
|
|
} |
|
|
|
|
|
customersettleRequestDetailMapper.insertBatch(subDOList); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
//错误不为空并非部分更新,手工回滚
|
|
|
|
|
|
if(!errorList.isEmpty() && !updatePart) { |
|
|
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
|
|
|
|
|
} |
|
|
|
|
|
return errorList; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 校验主表导入,并赋值一些参数 |
|
|
|
|
|
* @param mainDo |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private String validateCustomersettleRequestMainImport(CustomersettleRequestMainDO mainDo) { |
|
|
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
try { |
|
|
try { |
|
|
DeliverRecordMainDO deliverRecordMainDO = deliverRecordMainService.selectsMainRecordExist(createReqVO.getDeliverRecordNumber()); |
|
|
validateBusinesstypeDO(mainDo); |
|
|
createReqVO.setDeliverPlanNumber(deliverRecordMainDO.getDeliverPlanNumber()); |
|
|
|
|
|
createReqVO.setCustomerCode(deliverRecordMainDO.getCustomerCode()); |
|
|
|
|
|
createReqVO.setFromWarehouseCode(deliverRecordMainDO.getFromWarehouseCode()); |
|
|
|
|
|
} catch (Exception ex) { |
|
|
} catch (Exception ex) { |
|
|
messageMain += ex.getMessage() + ","; |
|
|
message.append(ex.getMessage()).append(","); |
|
|
} |
|
|
} |
|
|
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
|
|
createReqVO.setCreateTime(LocalDateTime.now()); |
|
|
|
|
|
try { |
|
|
try { |
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("CustomerRejectRequest"); |
|
|
ValidationUtils.validate(validator, mainDo); |
|
|
if (requestsettingDO != null) { |
|
|
|
|
|
createReqVO.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
|
|
createReqVO.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
|
|
createReqVO.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
|
|
createReqVO.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
} catch (Exception ex) { |
|
|
} catch (Exception ex) { |
|
|
messageMain += ex.getMessage() + ","; |
|
|
message.append(ex.getMessage()).append(","); |
|
|
} |
|
|
} |
|
|
|
|
|
return message.toString(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 校验子表导入,并赋值一些参数 |
|
|
|
|
|
* @param detailDo |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private String validateCustomersettleRequestDetailImport(CustomersettleRequestMainDO mainDo, CustomersettleRequestDetailDO detailDo) { |
|
|
|
|
|
StringBuilder message = new StringBuilder(); |
|
|
try { |
|
|
try { |
|
|
businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerRejectRequest"); |
|
|
DeliverRecordMainDO deliverRecordMainDO = validateDeliverRecordNumber(mainDo.getDeliverRecordNumber()); |
|
|
createReqVO.setBusinessType(businesstypeDO.getCode()); |
|
|
if (deliverRecordMainDO != null){ |
|
|
createReqVO.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
mainDo.setDeliverPlanNumber(deliverRecordMainDO.getDeliverPlanNumber()); |
|
|
createReqVO.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
mainDo.setFromWarehouseCode(deliverRecordMainDO.getFromWarehouseCode()); |
|
|
|
|
|
mainDo.setCustomerCode(deliverRecordMainDO.getCustomerCode()); |
|
|
|
|
|
mainDo.setDepartmentCode(deliverRecordMainDO.getDepartmentCode()); |
|
|
|
|
|
try { |
|
|
|
|
|
this.validateDeliverRecordDetailDO(mainDo,detailDo); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
message.append(e.getMessage()).append(","); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} catch (Exception ex) { |
|
|
} catch (Exception ex) { |
|
|
messageMain += ex.getMessage() + ","; |
|
|
message.append(ex.getMessage()).append(","); |
|
|
} |
|
|
} |
|
|
try { |
|
|
try { |
|
|
ValidationUtils.validate(validator, createReqVO); |
|
|
ValidationUtils.validate(validator, detailDo); |
|
|
} catch (Exception ex) { |
|
|
} catch (Exception e) { |
|
|
messageMain += ex.getMessage() + ","; |
|
|
message.append(e.getMessage()).append(","); |
|
|
} |
|
|
} |
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.CUSTOMER_SETTLE_RECORD.getCode()); |
|
|
return message.toString(); |
|
|
createReqVO.setNumber(number); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 新增校验子表并给部分字段赋值 |
|
|
|
|
|
* @param detailDo |
|
|
|
|
|
* @param mainDo |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private void validateCustomersettleRequestDetailCreate(CustomersettleRequestMainDO mainDo,CustomersettleRequestDetailDO detailDo) { |
|
|
|
|
|
DeliverRecordMainDO deliverRecordMainDO = validateDeliverRecordNumber(mainDo.getDeliverRecordNumber()); |
|
|
|
|
|
if (deliverRecordMainDO != null) { |
|
|
|
|
|
mainDo.setDeliverPlanNumber(deliverRecordMainDO.getDeliverPlanNumber()); |
|
|
|
|
|
mainDo.setFromWarehouseCode(deliverRecordMainDO.getFromWarehouseCode()); |
|
|
|
|
|
mainDo.setCustomerCode(deliverRecordMainDO.getCustomerCode()); |
|
|
|
|
|
mainDo.setDepartmentCode(deliverRecordMainDO.getDepartmentCode()); |
|
|
|
|
|
this.validateDeliverRecordDetailDO(mainDo,detailDo); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 新增时校验主子表方法 |
|
|
|
|
|
* @param createReqVO |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private CustomersettleRequestMainDO validatorToCreate(CustomersettleRequestMainCreateReqVO createReqVO) { |
|
|
|
|
|
CustomersettleRequestMainDO mainDo = CustomersettleRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
|
|
requestsettingAndBusinesstype(mainDo); |
|
|
List<CustomersettleRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
List<CustomersettleRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
List<CustomersettleRequestDetailDO> subDOList = CustomersettleRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
List<CustomersettleRequestDetailDO> subDOList = CustomersettleRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
for(CustomersettleRequestDetailDO detailDO : subDOList){ |
|
|
for (CustomersettleRequestDetailDO deliverRequestDetailDO : subDOList) { |
|
|
String messageDetail = ""; |
|
|
validateCustomersettleRequestDetailCreate(mainDo,deliverRequestDetailDO); |
|
|
// 校验,判断是否有不符合的原因,并加入errorList,同主表,只把有错误的子表加入errorList
|
|
|
} |
|
|
//子表校验方法
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.CUSTOMER_SETTLE_REQUEST.getCode()); |
|
|
try { |
|
|
mainDo.setNumber(number); |
|
|
List <DeliverRecordDetailDO> deliverRecordDetailDO = deliverRecordMainService.selectsDeliverRecordExist(createReqVO.getDeliverRecordNumber()); |
|
|
mainDo.setRequestTime(LocalDateTime.now()); |
|
|
try{ |
|
|
RequestStatusState requestStatusState = new RequestStatusState(); |
|
|
|
|
|
requestStatusState.newObject(mainDo.getAutoCommit(), mainDo.getAutoAgree(), mainDo.getAutoExecute()); |
|
|
|
|
|
mainDo.setStatus(requestStatusState.getState().getCode()); |
|
|
|
|
|
customersettleRequestMainMapper.insert(mainDo); |
|
|
|
|
|
for (CustomersettleRequestDetailDO customersettleRequestDetailDO : subDOList) { |
|
|
|
|
|
customersettleRequestDetailDO.setMasterId(mainDo.getId()); |
|
|
|
|
|
customersettleRequestDetailDO.setNumber(mainDo.getNumber()); |
|
|
|
|
|
} |
|
|
|
|
|
customersettleRequestDetailMapper.insertBatch(subDOList); |
|
|
|
|
|
return mainDo; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//校验发货记录是否存在
|
|
|
|
|
|
private DeliverRecordMainDO validateDeliverRecordNumber(String deliverRecordNumber){ |
|
|
|
|
|
return deliverRecordMainService.selectsMainRecordExist(deliverRecordNumber); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//查询业务类型跟申请设置进行复制
|
|
|
|
|
|
private void requestsettingAndBusinesstype(CustomersettleRequestMainDO mainDo) { |
|
|
|
|
|
RequestsettingDO requestsettingDO = requestsettingService.selectRequestsettingExist("CustomerSettleRequest"); |
|
|
|
|
|
mainDo.setAutoAgree(requestsettingDO.getAutoAgree()); |
|
|
|
|
|
mainDo.setAutoCommit(requestsettingDO.getAutoCommit()); |
|
|
|
|
|
mainDo.setAutoExecute(requestsettingDO.getAutoExecute()); |
|
|
|
|
|
mainDo.setDirectCreateRecord(requestsettingDO.getDirectCreateRecord()); |
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerSettleRequest"); |
|
|
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
|
|
mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
|
|
mainDo.setInInventoryStatus(businesstypeDO.getInInventoryStatuses()); |
|
|
|
|
|
mainDo.setOutInventoryStatus(businesstypeDO.getOutInventoryStatuses()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 查询成品发货记录子表 |
|
|
|
|
|
* @param mainDo |
|
|
|
|
|
* @param detailDO |
|
|
|
|
|
*/ |
|
|
|
|
|
private void validateDeliverRecordDetailDO(CustomersettleRequestMainDO mainDo,CustomersettleRequestDetailDO detailDO) { |
|
|
|
|
|
List<DeliverRecordDetailDO> deliverRecordDetailDO = deliverRecordMainService.selectsDeliverRecordExist(mainDo.getDeliverRecordNumber()); |
|
|
|
|
|
boolean flag = false; |
|
|
for (DeliverRecordDetailDO deliver : deliverRecordDetailDO) { |
|
|
for (DeliverRecordDetailDO deliver : deliverRecordDetailDO) { |
|
|
if(deliver.getSoNumber().equals(detailDO.getSoNumber())&& |
|
|
// if (deliver.getSoNumber().equals(detailDO.getSoNumber()) &&
|
|
|
deliver.getSoLine().equals(detailDO.getSoLine()) |
|
|
// deliver.getSoLine().equals(detailDO.getSoLine())
|
|
|
&&deliver.getItemCode().equals(detailDO.getItemCode())&& |
|
|
// && 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() + "不在发货记录单"
|
|
|
|
|
|
// + mainDo.getDeliverRecordNumber() + "中");
|
|
|
|
|
|
// }
|
|
|
|
|
|
if (deliver.getItemCode().equals(detailDO.getItemCode()) && |
|
|
deliver.getBatch().equals(detailDO.getBatch()) && |
|
|
deliver.getBatch().equals(detailDO.getBatch()) && |
|
|
deliver.getPackingNumber().equals(detailDO.getPackingNumber())) { |
|
|
deliver.getPackingNumber().equals(detailDO.getPackingNumber())) { |
|
|
detailDO.setQty(deliver.getQty()); |
|
|
detailDO.setQty(deliver.getQty()); |
|
|
detailDO.setUom(deliver.getUom()); |
|
|
detailDO.setUom(deliver.getUom()); |
|
|
|
|
|
detailDO.setInventoryStatus(deliver.getInventoryStatus()); |
|
|
|
|
|
detailDO.setFromLocationCode(deliver.getFromLocationCode()); |
|
|
|
|
|
detailDO.setItemDesc2(deliver.getItemDesc2()); |
|
|
|
|
|
detailDO.setItemDesc1(deliver.getItemDesc1()); |
|
|
|
|
|
detailDO.setItemName(deliver.getItemName()); |
|
|
|
|
|
detailDO.setProjectCode(deliver.getProjectCode()); |
|
|
|
|
|
flag = true; |
|
|
} |
|
|
} |
|
|
else{ |
|
|
|
|
|
throw new UtilException("销售订单号"+detailDO.getSoNumber()+"销售订单行"+detailDO.getSoLine() |
|
|
|
|
|
+"物料代码"+detailDO.getItemCode()+"批次"+detailDO.getBatch()+"箱码"+detailDO.getPackingNumber()+"不在发货记录单" |
|
|
|
|
|
+createReqVO.getDeliverRecordNumber()+"中"); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
if(flag == false) { |
|
|
|
|
|
throw new UtilException("物料代码" + detailDO.getItemCode() + "批次" + detailDO.getBatch() + "箱码" + detailDO.getPackingNumber() + "不在发货记录单" |
|
|
|
|
|
+ mainDo.getDeliverRecordNumber() + "中"); |
|
|
} |
|
|
} |
|
|
}catch (Exception ex) { |
|
|
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
|
|
} |
|
|
|
|
|
} catch (Exception ex) { |
|
|
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
|
|
} |
|
|
|
|
|
CustomersettleRequestDetailCreateReqVO purchaseturnRequestDetailCreateReqVO = CustomersettleRequestDetailConvert.INSTANCE.convert1(detailDO); |
|
|
|
|
|
CustomersettleRequestImportErrorVO importVO = CustomersettleRequestDetailConvert.INSTANCE.convert(createReqVO, purchaseturnRequestDetailCreateReqVO); |
|
|
|
|
|
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()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
CustomersettleRequestMainDO createobj = CustomersettleRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
|
|
if (errorList.isEmpty()) { |
|
|
|
|
|
CustomersettleRequestMainDO existCustomersettleRequestMainDO = customersettleRequestMainMapper.selectByDeliverrecordnumberAndSupplierCode(createReqVO.getDeliverRecordNumber()); |
|
|
|
|
|
if (existCustomersettleRequestMainDO == null && mode != 3) { |
|
|
|
|
|
customersettleRequestMainMapper.insert(createobj); |
|
|
|
|
|
customersettleRequestDetailMapper.insertBatch(subDOList); |
|
|
|
|
|
} else if (existCustomersettleRequestMainDO != null && mode != 2) { |
|
|
|
|
|
customersettleRequestMainMapper.updateById(createobj); |
|
|
|
|
|
customersettleRequestDetailMapper.updateBatch(subDOList); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
//查询业务类型并赋值给主表
|
|
|
|
|
|
private void validateBusinesstypeDO(CustomersettleRequestMainDO mainDo){ |
|
|
|
|
|
BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("CustomerRejectRequest"); |
|
|
|
|
|
mainDo.setBusinessType(businesstypeDO.getCode()); |
|
|
|
|
|
mainDo.setFromLocationTypes(businesstypeDO.getOutLocationTypes()); |
|
|
|
|
|
mainDo.setFromAreaCodes(businesstypeDO.getOutAreaCodes()); |
|
|
|
|
|
mainDo.setInInventoryStatus(businesstypeDO.getInInventoryStatuses()); |
|
|
|
|
|
mainDo.setOutInventoryStatus(businesstypeDO.getOutInventoryStatuses()); |
|
|
} |
|
|
} |
|
|
}); |
|
|
|
|
|
//错误不为空并非部分更新,手工回滚
|
|
|
|
|
|
if (!errorList.isEmpty() && !updatePart) { |
|
|
|
|
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
|
|
|
|
|
} |
|
|
|
|
|
return errorList; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|