package com.huaheng.pc.shipment.shipmentHeader.service; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.huaheng.common.utils.DateUtils; import com.huaheng.common.utils.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.http.HttpUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.aspectj.ApiLogAspect; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.address.service.AddressService; import com.huaheng.pc.config.company.service.CompanyService; import com.huaheng.pc.config.customer.domain.Customer; import com.huaheng.pc.config.customer.service.CustomerServiceImpl; import com.huaheng.pc.config.material.service.MaterialService; import com.huaheng.pc.config.shipmentType.service.ShipmentTypeService; import com.huaheng.pc.monitor.apilog.domain.ApiLog; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.shipment.lockingWorkOrder.domain.LockingWorkOrder; import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService; import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService; import com.huaheng.pc.shipment.shipmentDetailHistory.domain.ShipmentDetailHistory; import com.huaheng.pc.shipment.shipmentDetailHistory.service.ShipmentDetailHistoryService; import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; import com.huaheng.pc.shipment.shipmentHeader.mapper.ShipmentHeaderMapper; import com.huaheng.pc.shipment.shipmentHeaderHistory.domain.ShipmentHeaderHistory; import com.huaheng.pc.shipment.shipmentHeaderHistory.service.ShipmentHeaderHistoryService; import com.huaheng.pc.system.dict.service.IDictDataService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; import com.huaheng.pc.u8.domain.*; import com.huaheng.pc.u8.service.ICSShipmentDetailService; import com.huaheng.pc.u8.service.ICSShipmentHeaderService; import org.apache.commons.beanutils.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Service public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper, ShipmentHeader> implements ShipmentHeaderService{ @Autowired private IDictDataService dictDataService; @Resource private ShipmentHeaderMapper shipmentHeaderMapper; @Autowired private ShipmentDetailService shipmentDetailService; @Autowired private ShipmentContainerHeaderService shipmentContainerHeaderService; @Autowired private ShipmentHeaderHistoryService shipmentHeaderHistoryService; @Autowired private ShipmentDetailHistoryService shipmentDetailHistoryService; @Resource private CompanyService companyService; @Resource private CustomerServiceImpl customerService; @Resource private MaterialService materialService; @Resource private ShipmentTypeService shipmentTypeService; @Resource private TaskDetailService taskDetailService; @Resource private ShipmentHeaderService shipmentHeaderService; @Resource private AddressService addressService; @Resource private ICSShipmentHeaderService icsShipmentHeaderService; @Resource private ICSShipmentDetailService icsShipmentDetailService; //新增出库主单 @Override public AjaxResult<Boolean> saveHeader(ShipmentHeader shipmentHeader) { if(shipmentTypeService.checkCode(shipmentHeader.getShipmentType()) == false) { return AjaxResult.error("没有对应的出库单类型"); } AjaxResult ajaxResult = checkHeaderInfo(shipmentHeader); if(ajaxResult.hasErr()){ return ajaxResult; } String code = createCode(shipmentHeader.getShipmentType(),ShiroUtils.getWarehouseCode()); shipmentHeader.setId(null); shipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_BUILD); shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD); shipmentHeader.setLastUpdated(null); shipmentHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); shipmentHeader.setCreated(null); shipmentHeader.setCreatedBy(ShiroUtils.getLoginName()); shipmentHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); shipmentHeader.setCode(code); shipmentHeader.setUWarehouseCode(shipmentHeader.getUWarehouseCode()); boolean result = this.save(shipmentHeader); return AjaxResult.toAjax(result); } //根据单据类型建单据号 @Override public String createCode(String shipmentType,String warehouseCode) { String code = null; Date now = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); String maxCode = shipmentHeaderMapper.createCode(shipmentType,warehouseCode); if (maxCode != null && maxCode.length() > 13 && maxCode.substring(maxCode.length() - 13, maxCode.length() - 5).equals(df.format(now))) { Integer Count = Integer.valueOf(maxCode.substring(maxCode.length() - 5, maxCode.length())); code = shipmentType + df.format(now) + String.format("%05d", Count + 1); } else { code = shipmentType + df.format(now) + "00001"; } return code; } /** * 根据Id更新这个单据的首尾状态 * @param shipmentId * @return */ @Override public AjaxResult updateShipmentStatus(int shipmentId) { //获取这个单 ShipmentHeader shipmentHeader = this.getById(shipmentId); if(shipmentHeader==null){ return AjaxResult.error("单据未找到,Id:"+shipmentId); } //查询是否有生成出库货箱,如果有,则返回出库货箱的最高与最低状态 Map<String,Integer> map = shipmentContainerHeaderService.getShipmentContainerMaxAndMinStatusByShipmentID(shipmentId); if(map==null){ //说明没有货箱,则直接首位均为新建 shipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_POOL); shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_POOL); this.saveOrUpdate(shipmentHeader); }else { int firstStatus = map.get("maxStatus"); int lastStatus = map.get("minStatus"); if(firstStatus<=QuantityConstant.SHIPMENT_CONTAINER_FINISHED){ shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_GROUPDISK); } if(firstStatus==QuantityConstant.SHIPMENT_CONTAINER_REVIEWSUCCESS){ shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_COMPLETED); } if(lastStatus <=QuantityConstant.SHIPMENT_CONTAINER_FINISHED){ shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_GROUPDISK); } if(lastStatus==QuantityConstant.SHIPMENT_CONTAINER_REVIEWSUCCESS){ shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_COMPLETED); } //是否存在未配盘的数量,如果是,则尾状态为新建 Integer UnCompleted = shipmentDetailService.countUnCompleted(shipmentId); if(UnCompleted != null && UnCompleted.intValue() > 0){ shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_POOL); } this.saveOrUpdate(shipmentHeader); } return AjaxResult.success(""); } //出库单字段变为历史出库单 @Override @Transactional public AjaxResult addHistory(ShipmentHeader shipmentHeader) throws InvocationTargetException, IllegalAccessException { //单据主单重复 LambdaQueryWrapper<ShipmentHeaderHistory> headerHistoryLamb = Wrappers.lambdaQuery(); headerHistoryLamb.eq(ShipmentHeaderHistory::getCode,shipmentHeader.getCode()) .eq(ShipmentHeaderHistory::getWarehouseCode,shipmentHeader.getWarehouseCode()); ShipmentHeaderHistory headerHistory =shipmentHeaderHistoryService.getOne(headerHistoryLamb); if(headerHistory == null) { //历史出库主单 ShipmentHeaderHistory shipmentHeaderHistory = new ShipmentHeaderHistory(); // BeanUtils.copyProperties(shipmentHeaderHistory, shipmentHeader); shipmentHeaderHistory.setId(shipmentHeader.getId()); shipmentHeaderHistory.setWarehouseCode(shipmentHeader.getWarehouseCode()); shipmentHeaderHistory.setCarrierCode(shipmentHeader.getCarrierCode()); shipmentHeaderHistory.setCode(shipmentHeader.getCode()); shipmentHeaderHistory.setReferCode(shipmentHeader.getReferCode()); shipmentHeaderHistory.setReferPlatform(shipmentHeader.getFirstStatus()); shipmentHeaderHistory.setFirstStatus(shipmentHeader.getId()); shipmentHeaderHistory.setLastStatus(shipmentHeader.getId()); shipmentHeaderHistory.setShipmentType(shipmentHeader.getShipmentType()); shipmentHeaderHistory.setTotalQty(shipmentHeader.getTotalQty()); shipmentHeaderHistory.setTotalLines(shipmentHeader.getTotalLines()); shipmentHeaderHistory.setLastWaveId(shipmentHeader.getLastWaveId()); shipmentHeaderHistory.setCreated(shipmentHeader.getCreated()); shipmentHeaderHistory.setCreatedBy(shipmentHeader.getCreatedBy()); shipmentHeaderHistory.setLastUpdated(shipmentHeader.getLastUpdated()); shipmentHeaderHistory.setLastUpdatedBy(shipmentHeader.getLastUpdatedBy()); shipmentHeaderHistory.setVersion(shipmentHeader.getVersion()); shipmentHeaderHistory.setDeleted(shipmentHeader.getDeleted()); shipmentHeaderHistory.setCompanyCode(shipmentHeader.getCompanyCode()); if (shipmentHeaderHistoryService.save(shipmentHeaderHistory) == false) { throw new ServiceException("存入历史出库主单失败"); } } LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(ShipmentDetail::getWarehouseCode, shipmentHeader.getWarehouseCode()) .eq(ShipmentDetail::getShipmentCode, shipmentHeader.getCode()); List<ShipmentDetail> shipmentDetails = shipmentDetailService.list(lambdaQueryWrapper); //历史出库子单 List<ShipmentDetailHistory> shipmentDetailHistories = new ArrayList<>(); for (ShipmentDetail item : shipmentDetails) { ShipmentDetailHistory shipmentDetailHistory = new ShipmentDetailHistory(); BeanUtils.copyProperties(shipmentDetailHistory, item); shipmentDetailHistories.add(shipmentDetailHistory); } Boolean flag = shipmentDetailHistoryService.saveBatch(shipmentDetailHistories); if (flag == false) { throw new ServiceException("存入历史出库子单失败"); } return null; } /**审核出库单,加入订单池 * 1、找到主单,确定主单的状态是否小于100 * 2.小于100时,把主单和相应的子单加入到list中,大于等于100时,直接跳过 * 3.将修改后的主单列表和子单列表进行修改,加入订单池 * * @param ids * @return */ @Override @Transactional public AjaxResult review(String ids) { List<ShipmentHeader> shipmentHeaders = new ArrayList<>(); List<ShipmentDetail> shipmentDetails = new ArrayList<>(); //1、找到主单,确定主单的状态是否小于100 for (Integer id : Convert.toIntArray(ids)){ ShipmentHeader shipmentHeader = this.getById(id); if(shipmentHeader == null){ return AjaxResult.error("id为"+id+"的主单在系统不存在"); } //2.小于100时,把主单和相应的子单加入到list中,大于等于100时,直接跳过 if(shipmentHeader.getFirstStatus() < QuantityConstant.SHIPMENT_HEADER_POOL && shipmentHeader.getLastStatus() <QuantityConstant.SHIPMENT_HEADER_POOL){ shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_POOL); shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_POOL); shipmentHeaders.add(shipmentHeader); LambdaQueryWrapper<ShipmentDetail> lam = Wrappers.lambdaQuery(); lam.eq(ShipmentDetail::getShipmentId,id) .eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode()); List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(lam); if(!shipmentDetailList.isEmpty()){ for(ShipmentDetail shipmentDetail : shipmentDetailList){ shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_POOL); } shipmentDetails.addAll(shipmentDetailList); }else { return AjaxResult.error("id为"+id+"的出库明细在系统不存在"); } } } if(shipmentHeaders.isEmpty()){ return AjaxResult.error("选中的单据不需要订单审核"); } if(shipmentDetails.isEmpty()){ return AjaxResult.error("选中的单据不需要订单审核或没有子单"); } // 3.将修改后的主单列表和子单列表进行修改,加入订单池 Boolean flag = this.updateBatchById(shipmentHeaders); if (flag == false){ throw new ServiceException("修改主单状态失败"); } flag = shipmentDetailService.updateBatchById(shipmentDetails); if (flag == false){ throw new ServiceException("修改明细状态失败"); } return AjaxResult.success("订单审核成功,成功加入订单池"); } @Override public List<ShipmentHeader> selectListByCreated() { return shipmentHeaderMapper.selectListByCreated(); } @Override @Transactional(rollbackFor = Exception.class) public List<ShipmentHeader> getLatestShipment() { return shipmentHeaderMapper.getLatestShipment(); } @Override public AjaxResult removeShipmentByHeaderId(Integer headerId) { if(headerId!=null && headerId != 0){ return AjaxResult.error(); } ShipmentHeader shipmentHeader = this.getById(headerId); if (shipmentHeader == null) { return AjaxResult.success(""); } LambdaQueryWrapper<TaskDetail> queryWrapper = com.baomidou.mybatisplus.core.toolkit.Wrappers.lambdaQuery(); queryWrapper.eq(TaskDetail::getBillCode,shipmentHeader.getCode()) .gt(TaskDetail::getStatus,QuantityConstant.TASK_STATUS_RELEASE); List<TaskDetail> taskDetails = taskDetailService.list(queryWrapper); if (!taskDetails.isEmpty()) { throw new ServiceException("此单据存在任务,无法删除"); } ShipmentHeaderHistory shh = shipmentHeaderHistoryService.getOne(new LambdaQueryWrapper<ShipmentHeaderHistory>() .eq(ShipmentHeaderHistory::getCode, shipmentHeader.getCode())); List<ShipmentDetailHistory> shipmentDetailHistories = new ArrayList<>(); List<ShipmentDetail> list = shipmentDetailService.list(new LambdaQueryWrapper<ShipmentDetail>() .eq(ShipmentDetail::getShipmentId, headerId)); ShipmentHeaderHistory shipmentHeaderHistory = new ShipmentHeaderHistory(); try { //复制到出库历史实体 if (list != null && list.size() > 0) { BeanUtils.copyProperties(shipmentHeaderHistory, shipmentHeader); for (ShipmentDetail item : list) { ShipmentDetailHistory shipmentDetailHistory = new ShipmentDetailHistory(); BeanUtils.copyProperties(shipmentDetailHistory, item); shipmentDetailHistories.add(shipmentDetailHistory); } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } boolean b = shipmentHeaderService.removeById(shipmentHeader.getId()); if (!b) { throw new ServiceException("删除头表失败"); } if (list != null && list.size() > 0 && shh == null) { boolean save = shipmentHeaderHistoryService.save(shipmentHeaderHistory); if (!save) { throw new ServiceException("新增历史出库单失败"); } } // 当存在明细时删除 if (list != null && list.size() > 0) { //删除出库明细 if (shh == null) { for (int i = 0; i < shipmentDetailHistories.size(); i++) { shipmentDetailHistories.get(i).setShipmentId(shipmentHeaderHistory.getId()); } } else { for (int i = 0; i < shipmentDetailHistories.size(); i++) { shipmentDetailHistories.get(i).setShipmentId(shh.getId()); } } List<Integer> collect = list.stream().map(ShipmentDetail::getId).collect(Collectors.toList()); if (!shipmentDetailService.removeByIds(collect)) { throw new ServiceException("删除明细表失败"); } if (!shipmentDetailHistoryService.saveBatch(shipmentDetailHistories)) { throw new ServiceException("新增明细失败"); } } return AjaxResult.success("删除成功"); } @Override public ShipmentHeader createShipmentHeader(LockingWorkOrder lockingWorkOrder) { ShipmentHeader shipmentHeader = new ShipmentHeader(); // 公司编码 shipmentHeader.setCompanyCode(ShiroUtils.getCompanyCode()); // 公司id // shipmentHeader.setCompanyId(QuantityConstant.COMPANYID); // 出库单类型 shipmentHeader.setShipmentType("PO"); // 发货站台 shipmentHeader.setStation("102"); // 是否启用 shipmentHeader.setEnable(1); String code = createCode(shipmentHeader.getShipmentType(),ShiroUtils.getWarehouseCode()); shipmentHeader.setId(null); shipmentHeader.setLastUpdated(null); // 更新用户 shipmentHeader.setLastUpdatedBy("mms"); // 创建时间 shipmentHeader.setCreated(new Date()); // 创建人 shipmentHeader.setCreatedBy("mms"); // shipmentHeader.setWarehouseId(ShiroUtils.getWarehouseId()); shipmentHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); shipmentHeader.setCode(code); shipmentHeader.setUploadStatus(0); if (this.save(shipmentHeader)){ return shipmentHeader; } return null; } @Override public List<ShipmentHeader> listByCodes(Collection<String> codes, String warehouseCode) { LambdaQueryWrapper<ShipmentHeader> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.in(ShipmentHeader::getCode,codes) .eq(ShipmentHeader::getWarehouseCode,warehouseCode); List<ShipmentHeader> list = this.list(queryWrapper); return list; } @Override public AjaxResult postBack(TaskHeader taskHeader,String id, Map<Integer, BigDecimal> detailsQtyMap){ AjaxResult ajaxResult = AjaxResult.error(); ShipmentHeader shipmentHeader = this.getById(id); if(shipmentHeader==null){ return AjaxResult.error("回传:入库单"+id+" 不存在。"); } String warehouseCode = shipmentHeader.getWarehouseCode(); //获取当前时间 String nowDateStr = DateUtils.getNowDateString(DateUtils.YYYY_MM_DD_HH_MM_SS); String type = shipmentHeader.getShipmentType(); ICSShipmentModel model = null; switch (type){ case "MO" : model = postBackByMO(shipmentHeader,type,detailsQtyMap); break; case "OO" : model = postBackByOO(shipmentHeader,type,detailsQtyMap); break; case "PRO" : model = postBackByPRO(shipmentHeader,type,detailsQtyMap); break; case "SO" : model = postBackBySO(shipmentHeader,type,detailsQtyMap); break; } String JsonParam = JSON.toJSONString(model); String url = addressService.selectAddress(QuantityConstant.U8_SHIPMENT_BACK, warehouseCode); String result = HttpUtils.bodypost(url, JsonParam,warehouseCode); ajaxResult = JSON.parseObject(result, AjaxResult.class); return ajaxResult; } private ICSShipmentModel postBackByMO(ShipmentHeader shipmentHeader, String type, Map<Integer,BigDecimal> detailsQtyMap){ ICSShipmentModel model = new ICSShipmentModel(); if(!type.equals(QuantityConstant.U8_SHIPMENT_TYPE_MO)){ return model; } List<ShipmentDetail> shipmentDetails = shipmentDetailService.getListByShipmentHeaderId(shipmentHeader.getId(), shipmentHeader.getWarehouseCode()); ICSShipmentHeader icsShipmentHeader = icsShipmentHeaderService.getHeaderByMO(shipmentHeader); List<ICSShipmentDetail> details = icsShipmentDetailService.getDetailsByMO(shipmentDetails, icsShipmentHeader, detailsQtyMap); model.setIcsShipmentHeader(icsShipmentHeader); model.setIcsShipmentDetails(details); return model; } private ICSShipmentModel postBackByOO(ShipmentHeader shipmentHeader,String type,Map<Integer,BigDecimal> detailsQtyMap){ ICSShipmentModel model = new ICSShipmentModel(); if(!type.equals(QuantityConstant.U8_SHIPMENT_TYPE_OO)){ return model; } ICSShipmentHeader icsShipmentHeader = new ICSShipmentHeader(); return model; } private ICSShipmentModel postBackByPRO(ShipmentHeader shipmentHeader,String type,Map<Integer,BigDecimal> detailsQtyMap){ ICSShipmentModel model = new ICSShipmentModel(); if(!type.equals(QuantityConstant.U8_SHIPMENT_TYPE_PRO)){ return model; } List<ShipmentDetail> shipmentDetails = shipmentDetailService.getListByShipmentHeaderId(shipmentHeader.getId(), shipmentHeader.getWarehouseCode()); ICSShipmentHeader icsShipmentHeader = icsShipmentHeaderService.getHeaderByPRO(shipmentHeader); List<ICSShipmentDetail> details = icsShipmentDetailService.getDetailsByPRO(shipmentDetails, icsShipmentHeader, detailsQtyMap); model.setIcsShipmentHeader(icsShipmentHeader); model.setIcsShipmentDetails(details); return model; } private ICSShipmentModel postBackBySO(ShipmentHeader shipmentHeader,String type,Map<Integer,BigDecimal> detailsQtyMap){ ICSShipmentModel model = new ICSShipmentModel(); if(!type.equals(QuantityConstant.U8_SHIPMENT_TYPE_SO)){ return model; } List<ShipmentDetail> shipmentDetails = shipmentDetailService.getListByShipmentHeaderId(shipmentHeader.getId(), shipmentHeader.getWarehouseCode()); ICSShipmentHeader icsShipmentHeader = icsShipmentHeaderService.getHeaderBySO(shipmentHeader); List<ICSShipmentDetail> details = icsShipmentDetailService.getDetailsBySO(shipmentDetails, icsShipmentHeader, detailsQtyMap); model.setIcsShipmentHeader(icsShipmentHeader); model.setIcsShipmentDetails(details); return model; } private AjaxResult checkHeaderInfo(ShipmentHeader shipmentHeader){ if(shipmentHeader==null){ return AjaxResult.error("出库单为null"); } if(StringUtils.isEmpty(shipmentHeader.getShipmentType())){ return AjaxResult.error("出库单类型不能为空"); } // if(StringUtils.isEmpty(shipmentHeader.getUWarehouseCode())){ // return AjaxResult.error("出库单u8仓库不能为空"); // } if(StringUtils.isEmpty(shipmentHeader.getCompanyCode())){ return AjaxResult.error("出库单货主编码不能为空"); } if(!StringUtils.isEmpty(shipmentHeader.getCustomerCode())){ Customer customer = customerService.getCustomerByCode(shipmentHeader.getCustomerCode(), ShiroUtils.getWarehouseCode()); if(customer==null){ return AjaxResult.error("出库单客户编码不存在"); } } return AjaxResult.success(); } public List<ShipmentHeader> getExpiredBill() { List<ShipmentHeader> shipmentHeaderList =shipmentHeaderMapper.getExpiredBill(); return shipmentHeaderList; } //清理出库单 @Override @Transactional(rollbackFor = Exception.class) public int cleanDocuments() { //查找过期的出库单据 List<ShipmentHeader> shipmentHeaderList = this.getExpiredBill(); if(shipmentHeaderList.isEmpty()){ return 1; } for(ShipmentHeader shipmentHeader :shipmentHeaderList){ this.deleteHeaderAndDetail(shipmentHeader.getId().toString()); } return 1; } @Override public AjaxResult deleteHeaderAndDetail(String ids){ List<Integer> idList = Arrays.asList(Convert.toIntArray(ids)); for (Integer id : idList) { ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id); if (shipmentHeader == null) { return AjaxResult.error("没有找到单据" + String.valueOf(id)); } if(shipmentHeader.getFirstStatus() >= QuantityConstant.SHIPMENT_HEADER_COMPLETED) { return AjaxResult.error("订单状态大于500拣货完成不能删除"); } LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(ShipmentDetail::getShipmentId, id); List<ShipmentDetail> list = shipmentDetailService.list(lambdaQueryWrapper); List<ShipmentDetailHistory> shipmentDetailHistories = new ArrayList<>(); List<Integer> shipmentDetailIds = new ArrayList<>(); if (!shipmentHeaderService.removeById(shipmentHeader)) { throw new ServiceException("删除头表失败"); } ShipmentHeaderHistory shipmentHeaderHistory = new ShipmentHeaderHistory(); org.springframework.beans.BeanUtils.copyProperties(shipmentHeader, shipmentHeaderHistory); if (!shipmentHeaderHistoryService.save(shipmentHeaderHistory)) { throw new ServiceException("新增历史头表失败"); } for (ShipmentDetail shipmentDetail : list) { shipmentDetailIds.add(shipmentDetail.getId()); ShipmentDetailHistory shipmentDetailHistory = new ShipmentDetailHistory(); org.springframework.beans.BeanUtils.copyProperties(shipmentDetail, shipmentDetailHistory); shipmentDetailHistory.setShipmentId(shipmentHeaderHistory.getId()); shipmentDetailHistories.add(shipmentDetailHistory); } if(shipmentDetailIds.size() > 0) { if (!shipmentDetailService.removeByIds(shipmentDetailIds)) { throw new ServiceException("删除明细表失败"); } } if(shipmentDetailHistories.size() > 0) { if (!shipmentDetailHistoryService.saveBatch(shipmentDetailHistories)) { throw new ServiceException("新增历史入库明细失败"); } } } return AjaxResult.success("删除成功"); } }