|
|
@ -1,29 +1,39 @@ |
|
|
|
package com.win.module.wms.service.purchaseclaimRequest; |
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
|
import cn.hutool.core.exceptions.UtilException; |
|
|
|
import com.win.framework.common.pojo.CustomConditions; |
|
|
|
import com.win.framework.common.pojo.PageResult; |
|
|
|
import com.win.framework.common.util.validation.ValidationUtils; |
|
|
|
import com.win.framework.dict.core.util.DictFrameworkUtils; |
|
|
|
import com.win.module.system.api.serialnumber.SerialNumberApi; |
|
|
|
import com.win.module.system.enums.serialNumber.RuleCodeEnum; |
|
|
|
import com.win.module.wms.controller.purchaseclaimRequest.vo.*; |
|
|
|
import com.win.module.wms.convert.purchaseclaimRequest.PurchaseclaimRequestDetailConvert; |
|
|
|
import com.win.module.wms.convert.purchaseclaimRequest.PurchaseclaimRequestMainConvert; |
|
|
|
import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; |
|
|
|
import com.win.module.wms.dal.dataobject.purchase.PurchaseDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.purchaseclaimRequest.PurchaseclaimRequestDetailDO; |
|
|
|
import com.win.module.wms.dal.dataobject.purchaseclaimRequest.PurchaseclaimRequestMainDO; |
|
|
|
import com.win.module.wms.dal.mysql.purchaseclaimRequest.PurchaseclaimRequestDetailMapper; |
|
|
|
import com.win.module.wms.dal.mysql.purchaseclaimRequest.PurchaseclaimRequestMainMapper; |
|
|
|
import com.win.module.wms.enums.DictTypeConstants; |
|
|
|
import com.win.module.wms.service.itembasic.ItembasicService; |
|
|
|
import com.win.module.wms.service.purchase.PurchaseMainService; |
|
|
|
import com.win.module.wms.service.supplier.SupplierService; |
|
|
|
import com.win.module.wms.service.supplierdeliverRecord.SupplierdeliverRecordMainService; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.validation.annotation.Validated; |
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
import javax.validation.Validator; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.PURCHASECLAIM_REQUEST_MAIN_NOT_EXISTS; |
|
|
|
import static com.win.module.wms.enums.ErrorCodeConstants.*; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 采购索赔申请主 Service 实现类 |
|
|
@ -43,6 +53,20 @@ public class PurchaseclaimRequestMainServiceImpl implements PurchaseclaimRequest |
|
|
|
@Resource |
|
|
|
private SerialNumberApi serialNumberApi; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private SupplierService supplierService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private ItembasicService itembasicService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private SupplierdeliverRecordMainService supplierdeliverRecordMainService; |
|
|
|
@Resource |
|
|
|
private PurchaseMainService purchaseMainService; |
|
|
|
|
|
|
|
@Resource |
|
|
|
private Validator validator; |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Long createPurchaseclaimRequestMain(PurchaseclaimRequestMainCreateReqVO createReqVO) { |
|
|
@ -87,8 +111,11 @@ public class PurchaseclaimRequestMainServiceImpl implements PurchaseclaimRequest |
|
|
|
} |
|
|
|
|
|
|
|
private void validatePurchaseclaimRequestMainExists(Long id) { |
|
|
|
if (purchaseclaimRequestMainMapper.selectById(id) == null) { |
|
|
|
throw exception(PURCHASECLAIM_REQUEST_MAIN_NOT_EXISTS); |
|
|
|
PurchaseclaimRequestMainDO purchaseclaimRequestMainDO = purchaseclaimRequestMainMapper.selectById(id); |
|
|
|
if (purchaseclaimRequestMainDO == null) { |
|
|
|
return; |
|
|
|
}else { |
|
|
|
throw exception(PURCHASECLAIM_REQUEST_MAIN_EXISTS); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -117,45 +144,119 @@ public class PurchaseclaimRequestMainServiceImpl implements PurchaseclaimRequest |
|
|
|
return purchaseclaimRequestMainMapper.selectList(exportReqVO); |
|
|
|
} |
|
|
|
|
|
|
|
private void selectUomExist(String itemUom,String uom) { |
|
|
|
if(itemUom == uom){ |
|
|
|
return; |
|
|
|
}else { |
|
|
|
throw new UtilException("提示单位"+ uom + "错误,应该是" + itemUom); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void ifPlanQtyBigThanOrderQty(String poLine, BigDecimal shippedQty, BigDecimal qty, BigDecimal orderQty) { |
|
|
|
if(shippedQty.add(qty).compareTo(orderQty) > 0){ |
|
|
|
throw new UtilException("订单行"+ poLine + "的已发货数量" + shippedQty + "+计划数量" + qty + "大于订单数量" + orderQty); |
|
|
|
} |
|
|
|
} |
|
|
|
public List<PurchaseclaimRequestImportErrorVO> importPurchaseclaimRequestList(List<PurchaseclaimRequestMainCreateReqVO> datas, Integer mode, boolean updatePart) { |
|
|
|
if (CollUtil.isEmpty(datas)) { |
|
|
|
throw exception(PURCHASECLAIM_REQUEST_IMPORT_LIST_IS_EMPTY); |
|
|
|
} |
|
|
|
List<PurchaseclaimRequestImportErrorVO> errorList = new ArrayList<>(); |
|
|
|
datas.forEach(createReqVO -> { |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,如果主表则所有子表都加入errorList
|
|
|
|
boolean isError = false; |
|
|
|
// String importRemark = "";
|
|
|
|
// try {
|
|
|
|
// if(mode != null){
|
|
|
|
// validatePurchaseclaimRequestMainExists(null);
|
|
|
|
// }
|
|
|
|
// } catch (ServiceException ex) {
|
|
|
|
// isError = true;
|
|
|
|
// importRemark += ex.getMessage() + ",";
|
|
|
|
// }
|
|
|
|
// if(isError) {
|
|
|
|
// List<PurchaseclaimRequestDetailCreateReqVO> subList = createReqVO.getSubList();
|
|
|
|
// for (PurchaseclaimRequestDetailCreateReqVO detailVo : subList) {
|
|
|
|
// PurchaseclaimRequestImportErrorVO importVO = PurchaseclaimRequestDetailConvert.INSTANCE.convert(createReqVO, detailVo);
|
|
|
|
// importVO.setImportStatus("失败");
|
|
|
|
// importVO.setImportRemark(importRemark.substring(0, importRemark.length() - 1));
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
PurchaseclaimRequestMainDO createObj = PurchaseclaimRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
purchaseclaimRequestMainMapper.insert(createObj); |
|
|
|
List<PurchaseclaimRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<PurchaseclaimRequestDetailDO> subDOList = PurchaseclaimRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
// 新增子表数据
|
|
|
|
for (PurchaseclaimRequestDetailDO detailDO : subDOList) { |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,同主表,只把有错误的子表加入errorList
|
|
|
|
detailDO.setMasterId(createReqVO.getId()); |
|
|
|
detailDO.setNumber(createReqVO.getNumber()); |
|
|
|
String messageMain = ""; |
|
|
|
int detailErrorCount = 0; |
|
|
|
//主表校验方法
|
|
|
|
if(mode != null){ |
|
|
|
try { |
|
|
|
validatePurchaseclaimRequestMainExists(null); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try{ |
|
|
|
ValidationUtils.validate(validator,createReqVO); |
|
|
|
}catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
supplierService.selectSupplier(createReqVO.getSupplierCode()); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageMain += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
PurchaseclaimRequestMainDO createObj = PurchaseclaimRequestMainConvert.INSTANCE.convert(createReqVO); |
|
|
|
List<PurchaseclaimRequestDetailCreateReqVO> subList = createReqVO.getSubList(); |
|
|
|
List<PurchaseclaimRequestDetailDO> subDOList = PurchaseclaimRequestDetailConvert.INSTANCE.convertList03(subList); |
|
|
|
// 新增子表数据
|
|
|
|
for (PurchaseclaimRequestDetailDO detailDO : subDOList) { |
|
|
|
String messageDetail = ""; |
|
|
|
// 校验,判断是否有不符合的原因,并加入errorList,同主表,只把有错误的子表加入errorList
|
|
|
|
//子表校验方法
|
|
|
|
try { |
|
|
|
supplierdeliverRecordMainService.selectSupplierdeliverRecordMainDO(createReqVO.getSupplierCode(), |
|
|
|
detailDO.getNumber(), detailDO.getItemCode(), detailDO.getPoNumber(), detailDO.getPoLine()); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
ItembasicDO itembasicDO = itembasicService.selectItembasic(detailDO.getItemCode()); |
|
|
|
detailDO.setProjectCode(itembasicDO.getProject()); |
|
|
|
try { |
|
|
|
selectUomExist(itembasicDO.getUom(), detailDO.getUom()); |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
} catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
try { |
|
|
|
PurchaseDetailDO purchaseDetailDO = purchaseMainService.selectPurchaseDetailDoExist(detailDO.getNumber(), createReqVO.getSupplierCode() |
|
|
|
, detailDO.getItemCode(), detailDO.getPoNumber(), detailDO.getPoLine()); |
|
|
|
try { |
|
|
|
ifPlanQtyBigThanOrderQty(detailDO.getPoLine(), purchaseDetailDO.getShippedQty(), detailDO.getQty(), purchaseDetailDO.getOrderQty()); |
|
|
|
}catch (Exception ex){ |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
}catch (Exception ex) { |
|
|
|
messageDetail += ex.getMessage() + ","; |
|
|
|
} |
|
|
|
PurchaseclaimRequestDetailCreateReqVO purchaseclaimRequestDetailCreateReqVO = PurchaseclaimRequestDetailConvert.INSTANCE.convert1(detailDO); |
|
|
|
PurchaseclaimRequestImportErrorVO importVO = PurchaseclaimRequestDetailConvert.INSTANCE.convert(createReqVO, purchaseclaimRequestDetailCreateReqVO); |
|
|
|
//进行子表的错误统计
|
|
|
|
if(!messageDetail.isEmpty()){ |
|
|
|
detailErrorCount ++; |
|
|
|
} |
|
|
|
//如果子表没有全错
|
|
|
|
if(detailErrorCount != subDOList.size()){ |
|
|
|
//主表没有错误 写入库里
|
|
|
|
if(messageMain == null){ |
|
|
|
createReqVO.setStatus(DictFrameworkUtils.parseDictDataValue(DictTypeConstants.REQUEST_STATUS, "新增")); |
|
|
|
String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_CLAIM_RECORD.getCode()); |
|
|
|
createReqVO.setNumber(number); |
|
|
|
|
|
|
|
purchaseclaimRequestMainMapper.insert(createObj); |
|
|
|
} //反之 跳出本次循环 进行下一个主表的循环
|
|
|
|
if(messageMain != null || messageDetail != null) { |
|
|
|
importVO.setImportStatus("失败"); |
|
|
|
String messageAll = messageMain+ messageDetail; |
|
|
|
importVO.setImportRemark(messageAll.substring(0,messageAll.length()-1)); |
|
|
|
errorList.add(importVO); |
|
|
|
continue; |
|
|
|
} |
|
|
|
//如果子表没有错误 写库
|
|
|
|
if(messageDetail == null){ |
|
|
|
detailDO.setNumber(createReqVO.getNumber()); |
|
|
|
detailDO.setMasterId(createReqVO.getId()); |
|
|
|
detailDO.setAmount(detailDO.getQty().multiply(detailDO.getSinglePrice()).setScale(6,BigDecimal.ROUND_HALF_UP)); |
|
|
|
purchaseclaimRequestDetailMapper.insertBatch(subDOList); |
|
|
|
} |
|
|
|
//如果子表全错
|
|
|
|
}else { |
|
|
|
importVO.setImportStatus("失败"); |
|
|
|
String messageAll = messageMain+ messageDetail; |
|
|
|
importVO.setImportRemark(messageAll.substring(0,messageAll.length()-1)); |
|
|
|
errorList.add(importVO); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
purchaseclaimRequestDetailMapper.insertBatch(subDOList); |
|
|
|
}); |
|
|
|
return errorList; |
|
|
|
} |
|
|
|