package com.gk.firework.Scheduls.GenerateCode; import com.gk.firework.Domain.ContractLogInfo; import com.gk.firework.Domain.ContractOrderInfo; import com.gk.firework.Domain.ProductCodeInfo; import com.gk.firework.Domain.ProductLocusInfo; import com.gk.firework.Domain.Vo.ContractStatus; import com.gk.firework.Domain.Vo.GenerateCode; import com.gk.firework.Domain.Vo.ProductVo; import com.gk.firework.Service.*; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @Configuration @EnableScheduling @ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true") public class GenerateCodeTask { private Logger logger = LogManager.getLogger(GenerateCodeTask.class); @Autowired ContractDetailService contractDetailService; @Autowired ContractOrderService contractOrderService; @Autowired ContractLogService contractLogService; @Autowired ProductService productService; @Autowired ProductCodeService productCodeService; @Autowired ProductLocusService productLocusService; @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次 private void GenerateCode() throws Exception { SimpleDateFormat sdfnow = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List orderInfoList = contractOrderService.selectByStatus(ContractStatus.Confirm_Product,sdfnow.format(new Date())); for (ContractOrderInfo contractOrderInfo : orderInfoList) { //生成电子标签号码 List productVoList = contractDetailService.selectByOrder(contractOrderInfo.getOrdercode()); for (ProductVo productVo : productVoList) { //查询最新的箱码 String directionCode = productVo.getDirectionCode(); String four = GenerateCode.generateProduct(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); ProductCodeInfo productCodeInfo = productCodeService.selectByFourteen(directionCode + four,sdf.format(new Date())); List productCodeInfoList = new ArrayList<>(); Date now = new Date(); for (int i = 0; i < productVo.getNum(); i++) { int serial = 1; if (productCodeInfoList.size() > 0){ serial = Integer.parseInt(productCodeInfoList.get(productCodeInfoList.size()-1).getOriginalcode().substring(14,19)) + productCodeInfoList.get(productCodeInfoList.size()-1).getBoxnumber(); }else if (productCodeInfo != null) { serial = Integer.parseInt(productCodeInfo.getOriginalcode().substring(14,19)) + productCodeInfo.getBoxnumber(); } String serialNum = String.format("%05d", serial); String boxNum = String.format("%03d", productVo.getBoxNumber()); ProductCodeInfo productCode = new ProductCodeInfo(); productCode.setOrdercode(contractOrderInfo.getOrdercode()); productCode.setOriginalcode(directionCode + four + serialNum + boxNum); productCode.setItemname(productVo.getName()); productCode.setManufacturer(productVo.getManufacturer()); BigDecimal explosiveContent = productVo.getExplosiveContent(); Integer boxNumber = productVo.getBoxNumber(); BigDecimal sum = explosiveContent.multiply(new BigDecimal(boxNumber)); if (sum.compareTo(new BigDecimal(1000)) > 0) { BigDecimal explosive = sum.divide(new BigDecimal(1000),2, RoundingMode.HALF_UP); productCode.setExplosivecontent(explosive + "kg"); } else { productCode.setExplosivecontent(sum + "g"); } productCode.setBoxnumber(productVo.getBoxNumber()); productCode.setType(productVo.getType()); productCode.setLevel(productVo.getLevel()); productCode.setCreatedby("自动生成"); productCode.setCreateddate(new Date()); productCode.setPrice(productVo.getPrice()); productCodeInfoList.add(productCode); //电子合同生成电子标签号插入流向轨迹表 ProductLocusInfo productLocusInfo = new ProductLocusInfo(); productLocusInfo.setDirectioncode(productCode.getOriginalcode()); productLocusInfo.setCreateddate(now); productLocusInfo.setModifieddate(now); //生产单位 productLocusInfo.setContent(productCode.getManufacturer()); productLocusInfo.setType(ProductLocusInfo.ELECTRONIC_LABEL_STATUS); productLocusInfo.setBoxcode(Integer.valueOf(productCode.getOriginalcode().substring(19,22)).toString()); productLocusService.insertProductLocus(productLocusInfo); } productCodeService.insertBatch(productCodeInfoList); } contractOrderInfo.setStatus(ContractStatus.Generated); contractOrderInfo.setModifieddate(new Date()); contractOrderService.updateById(contractOrderInfo); ContractLogInfo contractLogInfo = new ContractLogInfo(); contractLogInfo.setOptlog("生成电子标签"); contractLogInfo.setOperator("后台生成"); contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode()); contractLogInfo.setOperatordate(new Date()); contractLogService.save(contractLogInfo); } } }