package com.huaheng.pc.srm.service; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.api.srm.domain.ICSPOArrive; import com.huaheng.api.srm.domain.ICSPOArriveDetail; import com.huaheng.api.srm.domain.ICSinspection; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.utils.DateUtils; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.Wrappers; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialService; import com.huaheng.pc.config.warehouse.domain.WarehouseU8; import com.huaheng.pc.config.warehouse.service.WarehouseService; import com.huaheng.pc.config.warehouse.service.WarehouseU8Service; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; import com.huaheng.pc.srm.domain.ICSASN; import com.huaheng.pc.srm.domain.SrmDetail; import com.huaheng.pc.srm.domain.SrmHeader; import com.huaheng.pc.srm.mapper.ICSASNMapper; import com.huaheng.pc.srm.mapper.SrmHeaderMapper; import com.huaheng.pc.system.user.domain.User; import com.huaheng.pc.system.user.service.IUserService; import com.huaheng.pc.u8.domain.ICSReceiptDetail; import com.huaheng.pc.u8.domain.ICSReceiptHeader; import com.huaheng.pc.u8.domain.ICSReceiptModel; import com.huaheng.pc.u8.service.ICSReceiptAPIService; import com.huaheng.pc.u8.service.ICSReceiptDetailService; import com.huaheng.pc.u8.service.ICSReceiptHeaderService; import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Service public class SrmHeaderService extends ServiceImpl<SrmHeaderMapper, SrmHeader> { private static final Logger logger = LoggerFactory.getLogger(SrmHeaderService.class); @Resource private SrmHeaderMapper srmHeaderMapper; @Resource private SrmDetailService srmDetailService; @Resource private ICSASNService icsasnService; @Resource private ICSReceiptAPIService icsReceiptAPIService; @Resource private IUserService userService; @Resource private WarehouseU8Service warehouseU8Service; @Resource private ReceiptHeaderService receiptHeaderService; @Resource private ICSReceiptHeaderService icsReceiptHeaderService; @Resource private ICSReceiptDetailService icsReceiptDetailService; @Resource private MaterialService materialService; @Resource private ReceiptDetailService receiptDetailService; public SrmHeader selectFirstModel(SrmHeader srmHeader){ LambdaQueryWrapper<SrmHeader> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(StringUtils.isNotNull(srmHeader.getId()),SrmHeader::getId,srmHeader.getId()); queryWrapper.eq(StringUtils.isNotEmpty(srmHeader.getCode()),SrmHeader::getCode,srmHeader.getCode()); queryWrapper.eq(StringUtils.isNotEmpty(srmHeader.getWarehouseCode()),SrmHeader::getWarehouseCode,srmHeader.getWarehouseCode()); queryWrapper.last("limit 1"); return this.getOne(queryWrapper); } public List<SrmHeader> selectBySTNO(List<String> STNOS) { if(STNOS!=null&&STNOS.size()>0){ String[] split=STNOS.toArray(new String[0]); LambdaQueryWrapper<SrmHeader> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.in(SrmHeader::getCode,split); return this.list(queryWrapper); } return null; } /** * 根据条件查询list * @param srmHeader * @return */ public List<SrmHeader> selectList(SrmHeader srmHeader) { LambdaQueryWrapper<SrmHeader> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.like(StringUtils.isNotEmpty(srmHeader.getCode()),SrmHeader::getCode,srmHeader.getCode()); queryWrapper.ge(StringUtils.isNotNull(srmHeader.getEnable()),SrmHeader::getEnable,srmHeader.getEnable()); queryWrapper.ge(StringUtils.isNotNull(srmHeader.getCheckCode()),SrmHeader::getCheckCode,srmHeader.getCheckCode()); queryWrapper.eq(StringUtils.isNotEmpty(srmHeader.getSupplierCode()),SrmHeader::getSupplierCode,srmHeader.getSupplierCode()); queryWrapper.eq(StringUtils.isNotNull(srmHeader.getMark()),SrmHeader::getMark,srmHeader.getMark()); queryWrapper.like(StringUtils.isNotEmpty(srmHeader.getUserDef2()),SrmHeader::getUserDef2,srmHeader.getUserDef2()); queryWrapper.eq(SrmHeader::getWarehouseCode,ShiroUtils.getWarehouseCode()); queryWrapper.orderByDesc(SrmHeader::getId); return this.list(queryWrapper); } /** * 回传srm * @return */ @Transactional public AjaxResult returnSrmModel() { //1、查找所有需要回传的明细 List<SrmDetail> details = new ArrayList<>(); SrmDetail srmDetail = new SrmDetail(); srmDetail.setUploadStatus1(0); srmDetail.setEnable(1); List<SrmDetail> srmDetailList = srmDetailService.selectList(srmDetail); srmDetail.setUploadStatus1(2); List<SrmDetail> srmDetails = srmDetailService.selectList(srmDetail); if (srmDetailList.isEmpty() && srmDetails.isEmpty()) { return AjaxResult.success("没有目标数据"); } if (!srmDetailList.isEmpty()) { details.addAll(srmDetailList); } if (!srmDetails.isEmpty()) { details.addAll(srmDetails); } if(details!=null&&details.size()>50){ details=details.subList(0,49); } return this.confirmSRMModel(details); } /** * 回传实体 * @param details * @return */ @Transactional public AjaxResult comfirmSrmModel(List<SrmDetail> details) { //单据根据单号分组,组建回传实体 //根据code去重 Set<String> codes = new HashSet<>(); String warehouseCode=null; for (SrmDetail detail : details) { codes.add(detail.getCode()); } warehouseCode=details.get(0).getWarehouseCode(); // List<SrmDetail> newlist = details.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SrmDetail :: getCode))), ArrayList::new)); Integer number = 0; for (String code : codes) { List<ICSPOArrive> icspoArrives = new ArrayList<>(); List<ICSPOArriveDetail> icspoArriveDetails = new ArrayList<>(); //将相同code的放一个list icspoArriveDetails=createIcspoArriveDetail(details,code,icspoArriveDetails); //创建ICSPOArrive ICSPOArrive icspoArrive=createIcspoArrive(details,code,icspoArriveDetails); icspoArrives.add(icspoArrive); AjaxResult ajaxResult = icsasnService.returnICSPOArrive(icspoArrives,warehouseCode); if (ajaxResult.hasErr()) { for (SrmDetail detail : details) { if (detail.getCode().equals(code)) { detail.setUploadStatus1(2); srmDetailService.updateById(detail); } } number++; } else { for (SrmDetail detail : details) { if (detail.getCode().equals(code)) { detail.setUploadStatus1(1); srmDetailService.updateById(detail); } } } } if (number == codes.size()) { return AjaxResult.error("失败"); } return AjaxResult.success("成功"); } //组建回传实体 public List<ICSPOArriveDetail> createIcspoArriveDetail(List<SrmDetail> details,String code,List<ICSPOArriveDetail> icspoArriveDetails){ for (SrmDetail item : details) { if (item.getCode().equals(code)) { ICSPOArriveDetail icspoArriveDetail = new ICSPOArriveDetail(); icspoArriveDetail.setLOTNO(item.getLineCode()); icspoArriveDetail.setWHCode(item.getUWarehouseCode()); icspoArriveDetail.setReceiveQty(item.getConfirmQty()); icspoArriveDetails.add(icspoArriveDetail); } } return icspoArriveDetails; } //组建回传实体 public ICSPOArrive createIcspoArrive(List<SrmDetail> details,String code,List<ICSPOArriveDetail> icspoArriveDetails){ ICSPOArrive icspoArrive = new ICSPOArrive(); icspoArrive.setUser(details.get(0).getLastUpdateBy()); User user = userService.selectUserByLoginName(details.get(0).getLastUpdateBy()); if (user != null) { icspoArrive.setMUSERName(user.getUserName()); } WarehouseU8 warehouseWu = new WarehouseU8(); warehouseWu.setUWarehouseCode(details.get(0).getUWarehouseCode()); warehouseWu.setCompanyCode(details.get(0).getCompanyCode()); warehouseWu.setWarehouseCode("KS0001"); List<WarehouseU8> warehouseWulist = warehouseU8Service.getByDomain(warehouseWu); if(warehouseWulist!=null&&warehouseWulist.size()>0){ warehouseWu=warehouseWulist.get(0); icspoArrive.setCompanyCode(warehouseWu.getUCompanyCode().substring(7,10)); }else { icspoArrive.setCompanyCode(""); } icspoArrive.setMTime(DateUtils.getTime()); icspoArrive.setASNNO(code); icspoArrive.setCompanyCode(""); icspoArrive.setType(QuantityConstant.PLATFORM_SRM); icspoArrive.setDetails(icspoArriveDetails); return icspoArrive; } @Transactional public AjaxResult returnSrmCheck() { //1、查找所有需要回传的明细 List<SrmDetail> details = new ArrayList<>(); SrmDetail srmDetail = new SrmDetail(); srmDetail.setCheckCode(2); srmDetail.setUploadStatus1(1); srmDetail.setUploadStatus2(0); srmDetail.setEnable(1); List<SrmDetail> srmDetailList = srmDetailService.selectList(srmDetail); srmDetail.setUploadStatus2(2); List<SrmDetail> srmDetails = srmDetailService.selectList(srmDetail); if(srmDetailList.isEmpty() && srmDetails.isEmpty()){ return AjaxResult.success("没有目标数据"); } if(!srmDetailList.isEmpty()){ details.addAll(srmDetailList); } if(!srmDetails.isEmpty()){ details.addAll(srmDetails); } if(details!=null&&details.size()>100){ details = details.subList(0, 99); } //组建回传实体 List<ICSinspection> icSinspections = createICSinspection(details); AjaxResult ajaxResult = icsasnService.returnICSinspection(icSinspections,details.get(0).getWarehouseCode()); if(ajaxResult.hasErr()){ for (SrmDetail detail : details) { detail.setUploadStatus2(2); srmDetailService.updateById(detail); } try { if(StringUtils.isNotEmpty(ajaxResult.getMsg())){ String s = ajaxResult.getMsg().trim().split(":")[1]; if(StringUtils.isNotEmpty(s)){ String lineCode = s.split("未")[0]; srmDetailService.updateByLineCode(lineCode); } } }catch (Exception e) { } return AjaxResult.error("失败"); }else { for (SrmDetail detail : details) { detail.setUploadStatus2(1); srmDetailService.updateById(detail); } return AjaxResult.success("成功"); } } //组建回传实体 public List<ICSinspection> createICSinspection(List<SrmDetail> details ){ List<ICSinspection> icSinspections = new ArrayList<>(); for (SrmDetail detail : details) { ICSinspection icSinspection = new ICSinspection(); icSinspection.setLotNo(detail.getLineCode()); icSinspection.setYLOTQTY(detail.getQualifiedQty()); icSinspection.setNLOTQTY(detail.getUnqualifiedQty()); if(StringUtils.isEmpty(detail.getReason())){ icSinspection.setBadCause(""); }else { icSinspection.setBadCause(detail.getReason()); } if(StringUtils.isEmpty(detail.getCheckUser())){ icSinspection.setUser(""); icSinspection.setMUSERName(""); }else { icSinspection.setUser(detail.getCheckUser()); User user = userService.selectUserByLoginName(detail.getCheckUser()); if(user!=null){ icSinspection.setMUSERName(user.getUserName()); } } SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if(StringUtils.isNull(detail.getCheckTime())){ String dt = simpleDateFormat.format(new Date()); icSinspection.setMTime(dt); }else { String dt = simpleDateFormat.format(detail.getCheckTime()); icSinspection.setMTime(dt); } icSinspections.add(icSinspection); } return icSinspections; } @Transactional(rollbackFor = Exception.class) public AjaxResult getReceipt(String[] ids)throws ParseException { //分别获取主单和未上传的明细 for (String id : ids) { SrmHeader srmHeader = this.getById(id); if(srmHeader == null){ return AjaxResult.error("id为"+id+"的到货单不存在"); } SrmDetail srmDetail = new SrmDetail(); //查询未提交的明细 srmDetail.setUploadStatus4(0); srmDetail.setEnable(1); srmDetail.setHeaderId(srmHeader.getId()); List<SrmDetail> srmDetailList = srmDetailService.selectList(srmDetail); if(srmDetailList.isEmpty()){ break; } //转换为接口实体,发送获取ERP单据 List<ICSPOArrive> icspoArrives = new ArrayList<>(); ICSPOArrive icspoArrive = new ICSPOArrive(); List<ICSPOArriveDetail> icspoArriveDetails = new ArrayList<>(); for (SrmDetail item : srmDetailList) { if(item.getConfirmQty().compareTo(new BigDecimal(0)) == 1) { ICSPOArriveDetail icspoArriveDetail = new ICSPOArriveDetail(); icspoArriveDetail.setLOTNO(item.getLineCode()); icspoArriveDetail.setReceiveQty(item.getConfirmQty()); icspoArriveDetail.setWHCode(item.getUWarehouseCode()); icspoArriveDetails.add(icspoArriveDetail); } } if(icspoArriveDetails.isEmpty()){ break; } SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dt = simpleDateFormat.format(new Date()); icspoArrive.setUser(ShiroUtils.getLoginName()); User user = userService.selectUserByLoginName(ShiroUtils.getLoginName()); if(user!=null){ icspoArrive.setMUSERName(user.getUserName()); } icspoArrive.setCompanyCode(srmDetailList.get(0).getCompanyCode()); icspoArrive.setMTime(dt); icspoArrive.setASNNO(srmHeader.getCode()); icspoArrive.setType("ERP"); icspoArrive.setDetails(icspoArriveDetails); icspoArrives.add(icspoArrive); //获取ERP到货单 AjaxResult ajaxResult = icsasnService.returnICSPOArrive(icspoArrives,srmHeader.getWarehouseCode()); List<ICSReceiptModel> icsReceiptModels = new ArrayList<>(); if(ajaxResult.hasErr()){ // 获取到货单失败改为从数据库获取 icsReceiptModels = this.getICSReceiptModelList(srmHeader); }else { try { icsReceiptModels = this.parseResults(ajaxResult, srmHeader, srmDetailList.get(0).getCompanyCode()); } catch (Exception e) { this.updateErrMsg(srmHeader, e.getMessage()); return AjaxResult.error(e.getMessage()); } } if (icsReceiptModels.size() == 0){ this.updateErrMsg(srmHeader, ajaxResult.getMsg()); return ajaxResult; } for (ICSReceiptModel icsReceiptModel :icsReceiptModels){ // 生成入库信息 try { ajaxResult = icsReceiptAPIService.insertICSReceipts(icsReceiptModel); if (ajaxResult.hasErr()){ return ajaxResult; } }catch (Exception e){ this.updateErrMsg(srmHeader, e.getMessage()); return AjaxResult.error(e.getMessage()); }finally { ajaxResult = this.saveResult(icsReceiptModel); } String json = JSON.toJSONString(icsReceiptModel); logger.info("WMS到货单实体:{}",json); if(ajaxResult.hasErr()){ this.updateErrMsg(srmHeader, ajaxResult.getMsg()); return ajaxResult; } } srmHeader.setUploadStatus(1); boolean isMandatory = false; for (SrmDetail item : srmDetailList) { if(item.getConfirmQty().compareTo(new BigDecimal(0)) == 1) { item.setUploadStatus4(1); // 物料编码不为2开头认为不检 Material materialall = materialService.getMaterialByCode(item.getMaterialCode(), ShiroUtils.getWarehouseCode()); boolean flag=false; if(materialall!=null&&materialall.getQcFlag()!=null){ flag = materialall.getQcFlag().equals("0"); } if (!("2".equals(item.getMaterialCode().substring(0,1)))||flag){ item.setCheckCode(2); // 不合格数量是否等于0 if (item.getUnqualifiedQty().compareTo(new BigDecimal(0)) == 0){ item.setQualifiedQty(item.getConfirmQty()); item.setCheckTime(new Date()); item.setCheckUser(ShiroUtils.getLoginName()); } }else { isMandatory = true; } srmDetailService.updateById(item); } } if (isMandatory == false){ srmHeader.setCheckCode(2); } this.updateById(srmHeader); if(srmHeader.getCheckCode() < 2) { //修改入库单,不显示 ReceiptHeader receiptHeader = new ReceiptHeader(); receiptHeader.setUserDef3(srmHeader.getCode()); List<ReceiptHeader> receiptHeaderlist = receiptHeaderService.getByDomain(receiptHeader); if(receiptHeaderlist != null&&receiptHeaderlist.size()>0){ receiptHeader=receiptHeaderlist.get(0); receiptHeader.setDeleted(true); receiptHeaderService.updateById(receiptHeader); } } } return AjaxResult.success("获取ERP到货单成功"); } private List<ICSReceiptModel> getICSReceiptModelList(SrmHeader srmHeader) { List<ICSReceiptModel> icsReceiptModels = new ArrayList<>(); if (srmHeader == null){ return icsReceiptModels; } // 获取erp到货单失败,从另一个接口获取 ICSReceiptHeader query = new ICSReceiptHeader(); query.setCTVCode(srmHeader.getCode()); query.setWarehouseCode(srmHeader.getWarehouseCode()); List<ICSReceiptHeader> icsReceiptHeaderList = icsReceiptHeaderService.selectModelList(query); if (icsReceiptHeaderList.isEmpty()){ return icsReceiptModels; } if (icsReceiptHeaderList.size() == 0){ return icsReceiptModels; } for (ICSReceiptHeader header : icsReceiptHeaderList){ LambdaQueryWrapper<ICSReceiptDetail> lambdaQueryWrapper=Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(ICSReceiptDetail::getID,header.getID()); lambdaQueryWrapper.eq(ICSReceiptDetail::getCompanyCode,header.getCompanyCode()); lambdaQueryWrapper.eq(ICSReceiptDetail::getWarehouseCode,header.getWarehouseCode()); List<ICSReceiptDetail> details = icsReceiptDetailService.list(lambdaQueryWrapper); ICSReceiptModel icsReceiptModel = new ICSReceiptModel(); icsReceiptModel.setIcsReceiptHeader(header); icsReceiptModel.setIcsReceiptDetails(details); icsReceiptModels.add(icsReceiptModel); } return icsReceiptModels; } public AjaxResult getReceiptlist(List<SrmDetail> srmDetails) throws ParseException { if (srmDetails.isEmpty()){ return AjaxResult.error("请勿提交空数据!"); } List<ICSPOArrive> list = dataConversion(srmDetails); if (list.size() == 0){ return AjaxResult.success("已成功获取erp到货单!"); } SrmHeader srmHeader = new SrmHeader(); srmHeader.setCode(srmDetails.get(0).getCode()); srmHeader.setWarehouseCode(srmDetails.get(0).getWarehouseCode()); srmHeader = this.selectFirstModel(srmHeader); if (srmHeader == null){ return AjaxResult.error("未查询到送货单主表!"); } // 获取ERP到货单 AjaxResult ajaxResult = icsasnService.returnICSPOArrive(list,srmHeader.getWarehouseCode()); List<ICSReceiptModel> icsReceiptModels; if (ajaxResult.hasErr()){ this.updateErrMsg(srmHeader, ajaxResult.getMsg()); return ajaxResult; }else { // 解析erp到货单数据 try { icsReceiptModels = this.parseResults(ajaxResult, srmHeader, srmDetails.get(0).getCompanyCode()); // 修改送货单主表 srmHeader.setUploadStatus(1); this.updateById(srmHeader); }catch (Exception e){ this.updateErrMsg(srmHeader, e.getMessage()); return AjaxResult.error(e.getMessage()); } if (icsReceiptModels.size() == 0){ this.updateErrMsg(srmHeader, ajaxResult.getMsg()); return ajaxResult; } for (ICSReceiptModel icsReceiptModel :icsReceiptModels){ // 生成入库信息 try { ajaxResult = icsReceiptAPIService.insertICSReceipts(icsReceiptModel); if (ajaxResult.hasErr()){ return ajaxResult; } }catch (Exception e){ this.updateErrMsg(srmHeader, e.getMessage()); return AjaxResult.error(e.getMessage()); }finally { ajaxResult = this.saveResult(icsReceiptModel); } String json = JSON.toJSONString(icsReceiptModel); logger.info("WMS到货单实体:{}",json); if(ajaxResult.hasErr()){ this.updateErrMsg(srmHeader, ajaxResult.getMsg()); return ajaxResult; } } // 是否必检查 boolean isMandatory = false; for (SrmDetail item : srmDetails) { if(item.getConfirmQty().compareTo(new BigDecimal(0)) == 1) { item.setUploadStatus4(1); // 物料编码不为2开头认为不检 if (!("2".equals(item.getMaterialCode().substring(0,1)))){ item.setCheckCode(2); // 不合格数量是否等于0 if (item.getUnqualifiedQty().compareTo(new BigDecimal(0)) == 0){ item.setQualifiedQty(item.getConfirmQty()); item.setCheckTime(new Date()); item.setCheckUser(ShiroUtils.getLoginName()); } }else { isMandatory = true; } srmDetailService.updateById(item); } } if (isMandatory){ //修改入库单,不显示 ReceiptHeader receiptHeader = new ReceiptHeader(); receiptHeader.setUserDef3(srmHeader.getCode()); receiptHeader.setReferCode(icsReceiptModels.get(0).getIcsReceiptHeader().getCCode()); List<ReceiptHeader> receiptHeaderList = receiptHeaderService.getByDomain(receiptHeader); if(receiptHeaderList.size() > 0){ receiptHeaderList.forEach(item->{ item.setDeleted(true); receiptHeaderService.updateById(item); }); } } } return AjaxResult.success("送货单提交成功!"); } public List<ICSPOArrive> dataConversion(List<SrmDetail> srmDetails) { //转换为接口实体,发送获取ERP单据 List<ICSPOArrive> icspoArrives = new ArrayList<>(); ICSPOArrive icspoArrive = new ICSPOArrive(); List<ICSPOArriveDetail> icspoArriveDetails = new ArrayList<>(); for (SrmDetail srmDetail :srmDetails){ srmDetail.setUploadStatus4(0); if (srmDetail.getUploadStatus4() == 0 && srmDetail.getEnable() == 1 && srmDetail.getConfirmQty().compareTo(new BigDecimal(0)) == 1){ ICSPOArriveDetail icspoArriveDetail = new ICSPOArriveDetail(); icspoArriveDetail.setLOTNO(srmDetail.getLineCode()); icspoArriveDetail.setReceiveQty(srmDetail.getConfirmQty()); icspoArriveDetail.setWHCode(srmDetail.getUWarehouseCode()); icspoArriveDetails.add(icspoArriveDetail); }else { break; } } if(icspoArriveDetails.isEmpty()){ return icspoArrives; } SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dt = format.format(new Date()); icspoArrive.setUser(ShiroUtils.getLoginName()); User user = userService.selectUserByLoginName(ShiroUtils.getLoginName()); if(user!=null){ icspoArrive.setMUSERName(user.getUserName()); } icspoArrive.setCompanyCode(srmDetails.get(0).getCompanyCode()); icspoArrive.setMTime(dt); icspoArrive.setASNNO(srmDetails.get(0).getCode()); icspoArrive.setType("ERP"); icspoArrive.setDetails(icspoArriveDetails); icspoArrives.add(icspoArrive); return icspoArrives; } public Boolean updateErrMsg(SrmHeader srmHeader, String msg) { srmHeader.setUploadStatus(2); srmHeader.setUserDef2(""); srmHeader.setUserDef1(msg); return this.updateById(srmHeader); } @Transactional public AjaxResult saveResult(ICSReceiptModel icsReceiptModel) { if (icsReceiptModel == null){ return AjaxResult.error("erp到货单接口返回结果为空值!"); } // 查询数据是否已经存在 ICSReceiptHeader query = new ICSReceiptHeader(); query.setID(icsReceiptModel.getIcsReceiptHeader().getID()); query.setCCode(icsReceiptModel.getIcsReceiptHeader().getCCode()); query.setCTVCode(icsReceiptModel.getIcsReceiptHeader().getCTVCode()); List<ICSReceiptHeader> list = icsReceiptHeaderService.selectModelList(query); if (list.size() > 0){ return AjaxResult.success(); } // 先保存数据在进行处理 Boolean result = icsReceiptHeaderService.save(icsReceiptModel.getIcsReceiptHeader()); if (!result ){ return AjaxResult.error("插入出库下发或回传主单失败!"); } ICSReceiptDetail icsReceiptDetail = new ICSReceiptDetail(); // 主单id与送货单号是否已经存在 icsReceiptDetail.setID(query.getID()); icsReceiptDetail.setCCode(query.getCCode()); List<ICSReceiptDetail> icsReceiptDetailList = icsReceiptDetailService.selectModelList(icsReceiptDetail); // 以存在不进行新增 if (icsReceiptDetailList.size() > 0){ return AjaxResult.success(); } result = icsReceiptDetailService.saveBatch(icsReceiptModel.getIcsReceiptDetails()); if (!result ){ return AjaxResult.error("插入出库下发或回传单子表失败!"); } return AjaxResult.success(); } public List<ICSReceiptModel> parseResults(AjaxResult ajaxResult, SrmHeader srmHeader,String companyCode) { List<ICSReceiptModel> icsReceiptModels = new ArrayList<>(); //调用ERP单据存储和wms采购到货单生成 Object object = ajaxResult.getData(); String ja = String.valueOf(object); List<Map> icsReceipts = JSON.parseObject(ja, ArrayList.class); for (Map map : icsReceipts) { ICSReceiptHeader icsReceiptHeader = new ICSReceiptHeader(); if(StringUtils.isNotNull(map.get("cWhCode"))) { icsReceiptHeader.setCWHCode(map.get("cWhCode").toString()); } if(StringUtils.isNotNull(map.get("cVenCode"))) { icsReceiptHeader.setCVenCode(map.get("cVenCode").toString()); } if(StringUtils.isNotNull(map.get("POCode"))) { icsReceiptHeader.setDPODate(map.get("POCode").toString()); } if(StringUtils.isNotNull(map.get("cMaker"))) { icsReceiptHeader.setCMaker(map.get("cMaker").toString()); } if(StringUtils.isNotNull(map.get("cBusType"))) { icsReceiptHeader.setCBusType(map.get("cBusType").toString()); } if(StringUtils.isNotNull(map.get("cDepCode"))) { icsReceiptHeader.setCDepCode(map.get("cDepCode").toString()); } if(StringUtils.isNotNull(map.get("dPODate"))) { icsReceiptHeader.setDPODate(map.get("dPODate").toString()); } if(StringUtils.isNotNull(map.get("cMemo"))) { icsReceiptHeader.setCMemo(map.get("cMemo").toString()); } if(StringUtils.isNotNull(map.get("ID"))) { icsReceiptHeader.setID(Integer.valueOf(map.get("ID").toString())); } if(StringUtils.isNotNull(map.get("cCode"))) { icsReceiptHeader.setCCode(map.get("cCode").toString()); } if(StringUtils.isNotNull(map.get("cPersonCode"))) { icsReceiptHeader.setCPersonCode(map.get("cPersonCode").toString()); } if (StringUtils.isNotNull(map.get("cCode"))){ if(StringUtils.isEmpty(srmHeader.getUserDef2())) { srmHeader.setUserDef2(map.get("cCode").toString()); }else { srmHeader.setUserDef2(srmHeader.getUserDef2()+";"+map.get("cCode").toString()); } } icsReceiptHeader.setType(QuantityConstant.U8_RECEIPT_TYPE_PI); icsReceiptHeader.setCTVCode(srmHeader.getCode()); icsReceiptHeader.setSourcePlatform(QuantityConstant.PLATFORM_SRM); icsReceiptHeader.setCompanyCode(companyCode); icsReceiptHeader.setWarehouseCode(srmHeader.getWarehouseCode()); List<Map> list = JSON.parseObject(map.get("list").toString(), ArrayList.class); List<ICSReceiptDetail> icsReceiptDetails = new ArrayList<>(); for (Map item : list) { ICSReceiptDetail icsReceiptDetail = new ICSReceiptDetail(); if(StringUtils.isNotNull(item.get("cInvCode"))) { icsReceiptDetail.setCInvCode(item.get("cInvCode").toString()); } if(StringUtils.isNotNull(item.get("iQuantity"))) { icsReceiptDetail.setIQuantity(new BigDecimal(item.get("iQuantity").toString())); } if(StringUtils.isNotNull(item.get("POCode"))) { icsReceiptDetail.setPOCode(item.get("POCode").toString()); } if(StringUtils.isNotNull(item.get("Autoid"))) { icsReceiptDetail.setAutoID(Integer.valueOf(item.get("Autoid").toString())); } if(StringUtils.isNotNull(item.get("POID"))) { icsReceiptDetail.setPOID(Integer.valueOf(item.get("POID").toString())); } if(StringUtils.isNotNull(item.get("PODID"))) { icsReceiptDetail.setPODID(Integer.valueOf(item.get("PODID").toString())); } if(StringUtils.isNotNull(item.get("cCode"))) { icsReceiptDetail.setCCode(item.get("cCode").toString()); } if(StringUtils.isNotNull(item.get("ID"))) { icsReceiptDetail.setID(Integer.valueOf(item.get("ID").toString())); } if(StringUtils.isNotNull(item.get("irowno"))) { icsReceiptDetail.setIrowno(Integer.valueOf(item.get("irowno").toString())); } if(StringUtils.isNotNull(item.get("cwhcode"))) { icsReceiptDetail.setCWHCode(item.get("cwhcode").toString()); } if(StringUtils.isNotNull(item.get("lotno"))) { icsReceiptDetail.setLotno(item.get("lotno").toString()); } icsReceiptDetail.setCompanyCode(icsReceiptHeader.getCompanyCode()); icsReceiptDetail.setWarehouseCode(icsReceiptHeader.getWarehouseCode()); icsReceiptDetails.add(icsReceiptDetail); } ICSReceiptModel icsReceiptModel = new ICSReceiptModel(); icsReceiptModel.setIcsReceiptHeader(icsReceiptHeader); icsReceiptModel.setIcsReceiptDetails(icsReceiptDetails); icsReceiptModels.add(icsReceiptModel); } return icsReceiptModels; } @Transactional(rollbackFor = Exception.class) public AjaxResult confirmU8Model(List<SrmDetail> srmDetails){ if (srmDetails.isEmpty()){ return AjaxResult.error("请勿提交空数据!"); } List<ICSPOArrive> icspoArrives = formU8Entities(srmDetails); if(icspoArrives.size()==0){ throw new ServiceException("提交U8aohuoshitishibai"); } SrmHeader srmHeader = this.getOne(new LambdaQueryWrapper<SrmHeader>().eq(SrmHeader::getCode, srmDetails.get(0).getCode()).eq(SrmHeader::getWarehouseCode, ShiroUtils.getWarehouseCode())); List<SrmDetail> srmDetailsAll = srmDetailService.list(new LambdaQueryWrapper<SrmDetail>().eq(SrmDetail::getCode, srmHeader.getCode()).eq(SrmDetail::getWarehouseCode, ShiroUtils.getWarehouseCode())); // 获取ERP到货单 AjaxResult ajaxResult = icsasnService.returnICSPOArrive(icspoArrives,ShiroUtils.getWarehouseCode()); List<ICSReceiptModel> icsReceiptModels = null; if (ajaxResult.hasErr()){ // 获取到货单失败改为从数据库获取 icsReceiptModels = this.getICSReceiptModelList(srmHeader); }else { // 解析erp到货单数据 try { icsReceiptModels = this.parseResults(ajaxResult, srmHeader, srmDetails.get(0).getCompanyCode()); } catch (Exception e) { this.updateErrMsg(srmHeader, e.getMessage()); return AjaxResult.error(e.getMessage()); } } if(icsReceiptModels==null||icsReceiptModels.size()==0){ this.updateErrMsg(srmHeader, ajaxResult.getMsg()); return ajaxResult; } AjaxResult result = new AjaxResult<>(); // 修改送货单主表 for (ICSReceiptModel icsReceiptModel :icsReceiptModels){ try { // 生成WMS采购入库单 result = icsReceiptAPIService.insertICSReceipts(icsReceiptModel); if (ajaxResult.hasErr()){ return ajaxResult; } }catch (Exception e){ this.updateErrMsg(srmHeader, e.getMessage()); return AjaxResult.error(e.getMessage()); }finally { // 生成U8 result = saveResult(icsReceiptModel); } } if(result.hasErr()){ this.updateErrMsg(srmHeader, ajaxResult.getMsg()); return ajaxResult; } icspoArrives.get(0).getDetails().forEach(icspoArriveDetail -> { srmDetails.forEach(srmDetail -> { if(icspoArriveDetail.getLOTNO().equals(srmDetail.getLineCode())){ srmDetail.setUploadStatus4(1); srmDetailService.updateById(srmDetail); } }); }); List<SrmDetail> srmDetailsCheck = srmDetailService.list(new LambdaQueryWrapper<SrmDetail>().eq(SrmDetail::getCode, srmHeader.getCode()).eq(SrmDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()).eq(SrmDetail::getCheckCode,2)); if(CollectionUtils.isNotEmpty(srmDetailsCheck)&&srmDetailsCheck.size()==srmDetailsAll.size()){ srmHeader.setCheckCode(2); }else { ReceiptHeader receiptHeader = new ReceiptHeader(); receiptHeader.setUserDef3(srmHeader.getCode()); receiptHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); List<ReceiptHeader> receiptHeaderlist = receiptHeaderService.getByDomain(receiptHeader); if(receiptHeaderlist != null&&receiptHeaderlist.size()>0){ receiptHeader=receiptHeaderlist.get(0); // receiptHeader.setDeleted(true); // receiptHeaderService.updateById(receiptHeader); } srmHeader.setCheckCode(1); } srmHeader.setUploadStatus(1); this.updateById(srmHeader); return AjaxResult.success("送货单提交成功!"); } public List<ICSPOArrive> formU8Entities(List<SrmDetail> srmDetails) { //转换为接口实体,发送获取ERP单据 List<ICSPOArrive> icspoArrives = new ArrayList<>(); ICSPOArrive icspoArrive = new ICSPOArrive(); List<ICSPOArriveDetail> icspoArriveDetails = new ArrayList<>(); for (SrmDetail srmDetail :srmDetails){ // String materialCode = srmDetail.getMaterialCode(); // Material material = materialService.getMaterialByCode(materialCode, ShiroUtils.getWarehouseCode()); // if(material==null){ // throw new ServiceException("物料编码"+materialCode+"不存在"); // } // //外观检 // if(materialCode.startsWith("1")){ // BigDecimal qualifiedQty = srmDetail.getConfirmQty().subtract(srmDetail.getUnqualifiedQty()); // srmDetail.setQualifiedQty(qualifiedQty); // } // //品质检设置不质检属性了的 // if(materialCode.startsWith("2")&&StringUtils.isNotEmpty(material.getQcFlag())&&material.getQcFlag().equals("0")){ // srmDetail.setQualifiedQty(srmDetail.getConfirmQty()); // } // if (srmDetail.getUploadStatus4() == 0 && srmDetail.getEnable() == 1 && // srmDetail.getQualifiedQty().compareTo(new BigDecimal(0)) == 1){ if (srmDetail.getUploadStatus4() == 0 && srmDetail.getEnable() == 1){ ICSPOArriveDetail icspoArriveDetail = new ICSPOArriveDetail(); icspoArriveDetail.setLOTNO(srmDetail.getLineCode()); icspoArriveDetail.setReceiveQty(srmDetail.getConfirmQty()); icspoArriveDetail.setWHCode(srmDetail.getUWarehouseCode()); icspoArriveDetails.add(icspoArriveDetail); srmDetailService.updateById(srmDetail); } } if(icspoArriveDetails.isEmpty()){ return icspoArrives; } SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dt = format.format(new Date()); icspoArrive.setUser(srmDetails.get(0).getLastUpdateBy()); User user = userService.selectUserByLoginName(srmDetails.get(0).getLastUpdateBy()); if(user!=null){ icspoArrive.setMUSERName(user.getUserName()); } icspoArrive.setCompanyCode(srmDetails.get(0).getCompanyCode()); icspoArrive.setMTime(dt); icspoArrive.setASNNO(srmDetails.get(0).getCode()); icspoArrive.setType("ERP"); icspoArrive.setDetails(icspoArriveDetails); icspoArrives.add(icspoArrive); return icspoArrives; } @Transactional(rollbackFor = Exception.class) public AjaxResult confirmSRMModel(List<SrmDetail> details){ //单据根据单号分组,组建回传实体 //根据code去重 Set<String> codes = new HashSet<>(); String warehouseCode=null; for (SrmDetail detail : details) { codes.add(detail.getCode()); } warehouseCode=details.get(0).getWarehouseCode(); Integer number = 0; for (String code : codes) { for (SrmDetail srmDetail : details) { if (srmDetail.getCode().equals(code)) { String materialCode = srmDetail.getMaterialCode(); Material material = materialService.getMaterialByCode(materialCode, warehouseCode); if(material==null){ throw new ServiceException("物料编码"+materialCode+"不存在"); } //外观检 if(materialCode.startsWith("1")){ BigDecimal qualifiedQty = srmDetail.getConfirmQty().subtract(srmDetail.getUnqualifiedQty()); srmDetail.setQualifiedQty(qualifiedQty); srmDetail.setCheckCode(2); } //品质检设置不质检属性了的 if(materialCode.startsWith("2")&&StringUtils.isNotEmpty(material.getQcFlag())&&material.getQcFlag().equals("0")){ srmDetail.setQualifiedQty(srmDetail.getConfirmQty()); srmDetail.setCheckCode(2); } srmDetailService.updateById(srmDetail); } } List<ICSPOArrive> icspoArrives = new ArrayList<>(); List<ICSPOArriveDetail> icspoArriveDetails = new ArrayList<>(); //将相同code的放一个list icspoArriveDetails=createIcspoArriveDetail(details,code,icspoArriveDetails); //创建ICSPOArrive ICSPOArrive icspoArrive=createIcspoArrive(details,code,icspoArriveDetails); icspoArrives.add(icspoArrive); AjaxResult ajaxResult = icsasnService.returnICSPOArrive(icspoArrives,warehouseCode); if (ajaxResult.hasErr()) { for (SrmDetail detail : details) { if (detail.getCode().equals(code)) { detail.setUploadStatus1(2); srmDetailService.updateById(detail); } } number++; } else { for (SrmDetail detail : details) { if (detail.getCode().equals(code)) { detail.setUploadStatus1(1); srmDetailService.updateById(detail); } } } } if (number == codes.size()) { return AjaxResult.error("失败"); } return AjaxResult.success("成功"); } }