package com.huaheng.api.general.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.huaheng.api.general.domain.BarCodeDomain; import com.huaheng.api.wcs.service.taskInfo.TaskInfoService; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.constant.Res; import com.huaheng.common.exception.BusinessException; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.utils.DateUtils; import com.huaheng.common.utils.spring.SpringUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.barcode.barcodeDetail.domain.BarCodeDetail; import com.huaheng.pc.barcode.barcodeDetail.service.BarCodeDetailService; import com.huaheng.pc.barcode.barcodeHeader.domain.BarCodeHeader; import com.huaheng.pc.barcode.barcodeHeader.service.BarCodeHeaderService; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialService; import com.huaheng.pc.config.station.domain.Station; 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.task.taskHeader.service.ReceiptTaskService; import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.ResourceBundle; @Component @Transactional public class BarCodeApiService { @Resource private BarCodeHeaderService barCodeHeaderService; @Resource private MaterialService materialService; @Resource private BarCodeDetailService barCodeDetailService; @Resource private TaskHeaderService taskHeaderService; @Resource private TaskDetailService taskDetailService; @Resource private TaskInfoService taskInfoService; @Resource private ReceiptTaskService receiptTaskService; @Transactional(rollbackFor = Exception.class) public AjaxResult addBarCodeApi(BarCodeDomain barCodeDomain){ AjaxResult ajaxResult = checkBarCode(barCodeDomain); if (ajaxResult.getCode()!=200) { return AjaxResult.error(ajaxResult.getMsg()); } boolean result = false; BarCodeHeader header = barCodeDomain.getBarCodeHeader(); BarCodeHeader barCodeHeader = new BarCodeHeader(); barCodeHeader.setLocked(QuantityConstant.BARCODEHEADER_LOCKED_DEFAULT); barCodeHeader.setCode(barCodeHeaderService.createCode("BZXXRK")); barCodeHeader.setMaterialBatch(header.getMaterialBatch()); barCodeHeader.setReceiptType("BZXXRK"); barCodeHeader.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE); barCodeHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANYCODE); barCodeHeader.setFbillno(header.getFbillno()); barCodeHeader.setCreatedBy(QuantityConstant.PLATFORM_MES); barCodeHeader.setBarCodeHeaderCode(header.getCode()); barCodeHeader.setReceiptNote(header.getReceiptNote()); barCodeHeader.setTotalQty(BigDecimal.ZERO); barCodeHeader.setTotalLines(0); barCodeHeader.setTotalWeight(BigDecimal.ZERO); result = barCodeHeaderService.save(barCodeHeader); if(!result){ throw new ServiceException("包装头信息创建失败"); } List<BarCodeDetail> barCodeDetails = barCodeDomain.getBarCodeDetails(); BigDecimal totalQty = BigDecimal.ZERO; BigDecimal totalWeight = BigDecimal.ZERO; int totalLines = barCodeDetails.size(); for (BarCodeDetail detail : barCodeDetails) { BarCodeDetail barCodeDetail = new BarCodeDetail(); // detail = addAttr(detail.getCode(),detail); barCodeDetail.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE); barCodeDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANYCODE); barCodeDetail.setReceiptId(barCodeHeader.getId()); barCodeDetail.setCode(detail.getCode()); barCodeDetail.setDayShift("day"); AjaxResult ajaxResultCode = barCodeDetailService.createRegenerationCode(1); String regenerationCode = (String)ajaxResultCode.getData(); barCodeDetail.setRegenerationCode(regenerationCode); barCodeDetail.setReceiptCode(barCodeHeader.getCode()); String materialCode = detail.getMaterialCode(); BigDecimal qty = detail.getQty(); BigDecimal weight = detail.getWeight(); BarCodeHeader oneBarCodeHeader = barCodeHeaderService.getOne(new LambdaQueryWrapper<BarCodeHeader>().eq(BarCodeHeader::getId, barCodeHeader.getId())); if(weight.compareTo(BigDecimal.ZERO) == 0){ oneBarCodeHeader.setProType("1");//重量为0,就是装配 }else { oneBarCodeHeader.setProType("2");//有重量就是拆解 } barCodeHeaderService.updateById(oneBarCodeHeader); if (detail.getCode()==null || "".equals(detail.getCode())) { //没有子条码,属于拆解中的散装,只有重量没有数量,重量赋值给数量 qty=weight; } totalQty.add(qty); totalWeight.add(weight); Material material = materialService.getOne(new LambdaQueryWrapper<Material>().eq(Material::getCode,materialCode)); barCodeDetail.setMaterialCode(material.getCode()); barCodeDetail.setMaterialName(material.getName()); barCodeDetail.setMaterialSpec(material.getSpec()); barCodeDetail.setMaterialUnit(material.getUnit()); barCodeDetail.setTotalQty(qty); barCodeDetail.setSn(detail.getSn()); barCodeDetail.setWeight(weight); // barCodeDetail.setStorageType(detail.getStorageType()); // barCodeDetail.setConstitute(detail.getConstitute()); // barCodeDetail.setProductType(detail.getProductType()); // barCodeDetail.setBatteryModel(detail.getBatteryModel()); // barCodeDetail.setWarehouseInTime(detail.getWarehouseInTime()); result = barCodeDetailService.save(barCodeDetail); if(!result){ result=false; throw new ServiceException("包装子信息创建失败"); } } barCodeHeader.setTotalQty(barCodeHeader.getTotalQty().add(totalQty)); barCodeHeader.setTotalWeight(barCodeHeader.getTotalWeight().add(totalWeight)); barCodeHeader.setTotalLines(totalLines); result = barCodeHeaderService.updateById(barCodeHeader); if(!result){ throw new ServiceException("更新包装入库头信息失败。"); } return AjaxResult.toAjax(result); } @Transactional(rollbackFor = Exception.class) public AjaxResult checkBarCode(BarCodeDomain barCodeDomain) { BarCodeHeader barCodeHeader = barCodeDomain.getBarCodeHeader(); String barCodeHeaderCode = barCodeHeader.getCode(); if(barCodeHeaderCode == null || "".equals(barCodeHeaderCode)){ return AjaxResult.error("没有主条码"); } if(barCodeHeader.getFbillno() == null || "".equals(barCodeHeader.getFbillno())){ return AjaxResult.error("没有生产订单编号"); } BarCodeHeader one = barCodeHeaderService.getOne(new LambdaQueryWrapper<BarCodeHeader>() .eq(BarCodeHeader::getBarCodeHeaderCode,barCodeHeaderCode) .eq(BarCodeHeader::getFbillno,barCodeHeader.getFbillno())); if(one != null){ return AjaxResult.error("包装信息头错误:主条码【"+barCodeHeaderCode+"】和生产订单号都重复了 "+barCodeHeader.getFbillno()); } List<BarCodeDetail> barCodeDetailList = barCodeDomain.getBarCodeDetails(); for (BarCodeDetail barCodeDetail : barCodeDetailList) { String materialCode = barCodeDetail.getMaterialCode(); if(materialCode == null){ return AjaxResult.error("物料编码不存在 "+materialCode); } Material material = materialService.getOne(new LambdaQueryWrapper<Material>().eq(Material::getCode,barCodeDetail.getMaterialCode())); if(material == null){ return AjaxResult.error("没有该物料编码:"+materialCode); } } return AjaxResult.success(); } private BarCodeDetail addAttr(String barCode,BarCodeDetail detail){ String productType = barCode.substring(3,4); String batteryType = barCode.substring(4,5); String productDate = barCode.substring(7,10); String year = productDate.substring(0, 1); String month = productDate.substring(1, 2); String day = productDate.substring(2, 3); String type = barCode.substring(17,19); String days = Res.string().dateKey(day); String years = Res.string().yearKey(year); Date inTime = DateUtils.dateTime("yyyy-MM-dd", years + "-" + month + "-" + days); //默认都是 1 梯级利用 (0是再生利用 再生利用需要填type) detail.setStorageType("1"); // detail.setType("1"); detail.setConstitute(Res.string().batteryKey(type)); detail.setProductType(Res.string().batteryKey(productType+"1")); detail.setBatteryModel(Res.string().batteryKey(batteryType)); detail.setWarehouseInTime(inTime); return detail; } }