package com.thhy.mobile.modules.biz.steelcheck.service.impl; import com.alibaba.nacos.api.utils.StringUtils; import com.thhy.general.common.BasicStatus; import com.thhy.general.common.enums.CheckResult; import com.thhy.general.config.SysUserInfo; import com.thhy.general.exception.BasicException; import com.thhy.general.utils.DeepCopyUtils; import com.thhy.general.utils.UserInfoUtils; import com.thhy.mobile.modules.biz.steelcheck.entity.CheckFile; import com.thhy.mobile.modules.biz.steelcheck.entity.SteelCheckDto; import com.thhy.mobile.modules.biz.steelcheck.entity.SteelCheckListVo; import com.thhy.mobile.modules.biz.steelcheck.entity.UpdateCheckResultDto; import com.thhy.mobile.modules.biz.steelcheck.service.SteelCheckService; import com.thhy.mobile.modules.biz.steelcheckrecord.entity.SteelCheckRecord; import com.thhy.mobile.modules.biz.steelcheckrecord.mapper.SteelCheckRecordMapper; import com.thhy.mobile.modules.biz.steelproduce.entity.SteelProduce; import com.thhy.mobile.modules.biz.steelproduce.mapper.SteelProduceMapper; import com.thhy.mobile.modules.biz.steelrecord.entity.SteelRecord; import com.thhy.mobile.modules.biz.steelrecord.mapper.SteelRecordMapper; import com.thhy.mobile.modules.biz.steelstock.entity.SteelConsume; import com.thhy.mobile.modules.biz.steelstock.entity.SteelStock; import com.thhy.mobile.modules.biz.steelstock.mapper.SteelStockMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service public class SteelCheckServiceImpl implements SteelCheckService { @Autowired private SteelProduceMapper steelProduceMapper; @Autowired private SteelCheckRecordMapper recordMapper; @Autowired private SteelStockMapper steelStockMapper; @Autowired private SteelRecordMapper steelRecordMapper; private Logger logger = LoggerFactory.getLogger("钢筋笼质检"); @Override @Transactional public void check(SteelCheckDto steelCheckDto) { SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); String produceNum = steelCheckDto.getProduceNumber(); if(StringUtils.isEmpty(produceNum)){ throw new BasicException(BasicStatus.SCAN_QR_IS_EORROR); } SteelProduce steelProduce = steelProduceMapper.queryByProduceNum(produceNum); if(steelProduce==null){ throw new BasicException(BasicStatus.PRODUCE_NUM_IS_NOT_EXIST); } int count = recordMapper.countByProduceNum(produceNum); if(count>0){ throw new BasicException(BasicStatus.PRODUCE_NUM_SCAN_AGAIN); } //更新状态 steelProduceMapper.updateQualified(new SteelProduce(produceNum, CheckResult.pass.getValue(),userInfo.getUserId())); //记录 SteelCheckRecord steelCheckRecord = new SteelCheckRecord(); steelCheckRecord.setCheckResult(CheckResult.pass.getValue()); steelCheckRecord.setSteelProduceId(steelProduce.getSteelProduceId()); steelCheckRecord.setSteelProduceNum(produceNum); steelCheckRecord.setCreateUser(userInfo.getUserId()); recordMapper.insert(steelCheckRecord); //增加钢筋笼库存 int stockRecord = steelStockMapper.countStockByPSRB(new SteelStock(steelProduce)); if(stockRecord>0){ //增加钢筋笼库存 steelStockMapper.updatePlusStock(new SteelStock(steelProduce)); }else{ SteelStock steelStock = new SteelStock(steelProduce); steelStock.setStock(1); steelStockMapper.insert(steelStock); } //钢筋消耗的理论耗量 List steelConsumeList = steelStockMapper.queryByPSRB(new SteelStock(steelProduce)); for(SteelConsume steelConsume : steelConsumeList){ steelStockMapper.updateMinusSteelStock(steelConsume); //jian //库存记录 SteelRecord steelRecord = new SteelRecord(); steelRecord.setProId(steelProduce.getProId()); steelRecord.setStockType(2); steelRecord.setSteelId(steelConsume.getSteelId()); steelRecord.setChangeStock((steelConsume.getNeedNum()*steelConsume.getCoefficient())); steelRecord.setLineCode(produceNum); steelRecord.setCreateUser(userInfo.getUserId()); steelRecordMapper.insert(steelRecord); } } @Override public List queryCheckList(SteelProduce steelProduce) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); if(steelProduce==null)steelProduce = new SteelProduce(); return steelProduceMapper.queryCheckList(steelProduce.setCompanyId(sysUserInfo.getCompanyId())); } @Override @Transactional public void updateCheckResult(UpdateCheckResultDto updateCheckResultDto) { logger.info("本次要修改为 "+updateCheckResultDto.getCheckResult()); SteelProduce steelProduce = steelProduceMapper.queryByProduceNum(updateCheckResultDto.getSteelProduceNum()); Integer qualified = steelProduce.getIsQualified(); logger.info("查询出状态为 "+steelProduce.getIsQualified()); if(updateCheckResultDto.getCheckResult()==1){ throw new BasicException(BasicStatus.PARAM_IS_ERROR); } if(steelProduce.getIsQualified().equals(updateCheckResultDto.getCheckResult())){ throw new BasicException(BasicStatus.STATUS_IS_UPDATED); } //更新记录 SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); SteelCheckRecord steelCheckRecord = new SteelCheckRecord(); DeepCopyUtils.copy(updateCheckResultDto,steelCheckRecord); steelCheckRecord.setCreateUser(userInfo.getUserId()); recordMapper.insert(steelCheckRecord); if(steelCheckRecord.getCheckResult()==3){ //报废 List checkFileList = updateCheckResultDto.getCheckFiles(); for(CheckFile checkFile : checkFileList){ checkFile.setSteelCheckId(steelCheckRecord.getCheckId()); steelRecordMapper.insertCheckFile(checkFile); } } //更新住状态 steelProduceMapper.updateQualified(new SteelProduce(updateCheckResultDto.getSteelProduceNum(), steelCheckRecord.getCheckResult(),userInfo.getUserId())); if (steelCheckRecord.getCheckResult()!=3) { //减【钢筋笼】库存 steelStockMapper.updateMinusStock(new SteelStock(steelProduce)); //加【钢筋】库存记录 List steelRecordList = steelRecordMapper.findListByProduceNum(updateCheckResultDto.getSteelProduceNum()); for(SteelRecord steelRecord : steelRecordList){ steelStockMapper.updatePlusSteelStock(new SteelConsume(steelRecord.getSteelId(),steelRecord.getChangeStock())); } //删除【钢筋】库存记录 steelRecordMapper.deleteByProduceNum(updateCheckResultDto.getSteelProduceNum()); } //合格状态————————>报废 if(qualified==1&&updateCheckResultDto.getCheckResult()==3){ //减【钢筋笼】库存 steelStockMapper.updateMinusStock(new SteelStock(steelProduce)); } //不合格状态————————>报废 if(qualified==2&&updateCheckResultDto.getCheckResult()==3){//不合格状态————————>报废 //钢筋消耗的理论耗量 List steelConsumeList = steelStockMapper.queryByPSRB(new SteelStock(steelProduce)); for(SteelConsume steelConsume : steelConsumeList){ steelStockMapper.updateMinusSteelStock(steelConsume); //jian //库存记录 SteelRecord steelRecord = new SteelRecord(); steelRecord.setProId(steelProduce.getProId()); steelRecord.setStockType(2); steelRecord.setSteelId(steelConsume.getSteelId()); steelRecord.setChangeStock((steelConsume.getNeedNum()*steelConsume.getCoefficient())); steelRecord.setLineCode(updateCheckResultDto.getSteelProduceNum()); steelRecord.setCreateUser(userInfo.getUserId()); steelRecordMapper.insert(steelRecord); } } } @Override @Transactional public void updateCheckPass(UpdateCheckResultDto updateCheckResultDto) { SteelProduce steelProduce = steelProduceMapper.queryByProduceNum(updateCheckResultDto.getSteelProduceNum()); if(steelProduce.getIsQualified()==1){ throw new BasicException(BasicStatus.CURRENT_IS_PASS); } if(steelProduce.getIsQualified()==3){ throw new BasicException(BasicStatus.STEEL_GIVEN_NOT_TO_PASS); } //更新记录 SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); SteelCheckRecord steelCheckRecord = new SteelCheckRecord(); DeepCopyUtils.copy(updateCheckResultDto,steelCheckRecord); steelCheckRecord.setCheckResult(1); steelCheckRecord.setCreateUser(userInfo.getUserId()); recordMapper.insert(steelCheckRecord); //更新住状态 steelProduceMapper.updateQualified(new SteelProduce(updateCheckResultDto.getSteelProduceNum(), 1,userInfo.getUserId())); steelStockMapper.updatePlusStock(new SteelStock(steelProduce)); //钢筋消耗的理论耗量 List steelConsumeList = steelStockMapper.queryByPSRB(new SteelStock(steelProduce)); for(SteelConsume steelConsume : steelConsumeList){ steelStockMapper.updateMinusSteelStock(steelConsume); //jian //库存记录 SteelRecord steelRecord = new SteelRecord(); steelRecord.setProId(steelProduce.getProId()); steelRecord.setStockType(2); steelRecord.setSteelId(steelConsume.getSteelId()); steelRecord.setChangeStock((steelConsume.getNeedNum()*steelConsume.getCoefficient())); steelRecord.setLineCode(updateCheckResultDto.getSteelProduceNum()); steelRecord.setCreateUser(userInfo.getUserId()); steelRecordMapper.insert(steelRecord); } } }