package com.thhy.mobile.modules.biz.pipecheckrecord.service.impl; import com.thhy.general.common.BasicStatus; import com.thhy.general.common.enums.MouldFreeType; import com.thhy.general.common.enums.ProListenType; import com.thhy.general.config.SysUserInfo; import com.thhy.general.exception.BasicException; import com.thhy.general.utils.ScreenMqUtils; import com.thhy.general.utils.UserInfoUtils; import com.thhy.mobile.modules.biz.mouldcheck.entity.MouldFree; import com.thhy.mobile.modules.biz.pipecheckrecord.entity.*; import com.thhy.mobile.modules.biz.pipecheckrecord.mapper.PipeCheckRecordMapper; import com.thhy.mobile.modules.biz.pipecheckrecord.service.PipeCheckRecordService; import com.thhy.mobile.modules.biz.pipeinfo.entity.MaterialInfo; import com.thhy.mobile.modules.biz.pipeinfo.entity.PipeInfo; import com.thhy.mobile.modules.biz.pipeinfo.mapper.PipeInfoMapper; import org.redisson.SlotCallback; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; /** * 服务实现类 * @author zhang_xiao_bo * @since 2023-05-08 19:43:32 */ @Service public class PipeCheckRecordServiceImpl implements PipeCheckRecordService { @Autowired private PipeCheckRecordMapper pipeCheckRecordMapper; @Autowired private PipeInfoMapper pipeInfoMapper; @Autowired private ScreenMqUtils screenMqUtils; @Autowired private RedissonClient redissonClient; public PipeCheckRecord get(Serializable id){ return pipeCheckRecordMapper.queryById(id); } public List findList(PipeCheckRecord pipeCheckRecord){ return pipeCheckRecordMapper.findList(pipeCheckRecord); } /** * 增加和修改 * @param pipeCheckRecord */ @Transactional public void addPipeCheckRecord(PipeCheckRecord pipeCheckRecord){ if(pipeCheckRecord.getPipeCheckId() == null){ //增加操作 pipeCheckRecordMapper.insert(pipeCheckRecord); }else{ //修改操作 pipeCheckRecordMapper.update(pipeCheckRecord); } } /** * 修改 * @param pipeCheckRecord */ public void update(PipeCheckRecord pipeCheckRecord){ pipeCheckRecordMapper.update(pipeCheckRecord); } /** * 删除 * @param pipeCheckId */ public void delete(Serializable pipeCheckId){ pipeCheckRecordMapper.deletelogic(pipeCheckId); } @Override @Transactional public void check(PipeCheckDto pipeCheckDto) { SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); PipeInfo pipeInfo = pipeInfoMapper.queryByPipeNum(pipeCheckDto.getPipeNum()); if(pipeInfo==null){ throw new BasicException(BasicStatus.SCAN_QR_IS_EORROR); } if(pipeInfo.getCheckResult()!=0){ throw new BasicException(BasicStatus.PRODUCE_NUM_SCAN_AGAIN); } //记录 PipeCheckRecord pipeCheckRecord = new PipeCheckRecord(); pipeCheckRecord.setPipeId(pipeInfo.getPipeId()); pipeCheckRecord.setCheckResult(1); pipeCheckRecord.setCheckUser(userInfo.getUserId()); pipeCheckRecordMapper.insert(pipeCheckRecord); //更新 pipeInfoMapper.updateCheckResult(pipeInfo.setCheckResult(1).setCheckUser(userInfo.getUserId())); //模具表 改为 空闲状态 pipeInfoMapper.updateSysMouldFree(new MouldFree(pipeInfo.getModId(), MouldFreeType.FREE.getValue())); //管片表 改为 已出模 pipeInfoMapper.updatePipeOutMod(pipeInfo.getPipeNum()); //模具检查记录 改为 已出模 pipeInfoMapper.updateModCheck(pipeInfo.getModId()); //出窑 pipeInfoMapper.pipeIdOutUpdate(pipeInfo.getPipeId()); List materialInfoList = pipeInfoMapper.queryPipeDeplete(pipeInfo); //减库存 RLock lock = redissonClient.getLock("materlock"); try { if (lock.tryLock(5, 10, TimeUnit.SECONDS)) { for(MaterialInfo materialInfo : materialInfoList){ MaterialInfo current = pipeInfoMapper.queryMaterStock(materialInfo.getMaterialName(), userInfo.getCompanyId()); MaterialStockRecord materialStockRecord = new MaterialStockRecord(); materialStockRecord.setType(2); materialStockRecord.setOpType(2); //减库存 materialStockRecord.setMaterialName(materialInfo.getMaterialName()); materialStockRecord.setMaterialValue(materialInfo.getMaterialValue()); materialStockRecord.setBeforeStock(current.getMaterialValue()); materialStockRecord.setCompanyId(userInfo.getCompanyId()); materialStockRecord.setPipeId(pipeInfo.getPipeId()); materialStockRecord.setPipeNum(pipeInfo.getPipeNum()); double changeValue = current.getMaterialValue()-materialInfo.getMaterialValue(); materialStockRecord.setAfterStock(changeValue); pipeInfoMapper.updateMaterStockRecord(materialStockRecord); pipeInfoMapper.updateMaterStock(materialInfo.getMaterialName(), changeValue, userInfo.getCompanyId()); } } else { throw new BasicException(BasicStatus.OP_IS_TIMEOUT); } } catch (InterruptedException e) { throw new BasicException(BasicStatus.OP_IS_REPEAT); } finally { if (lock.isLocked()) { lock.unlock(); } } int count = pipeInfoMapper.ringCompleteByRingNum(pipeInfo.getRingNum()); if(count>0){ screenMqUtils.send(ProListenType.PIPEYEARMONTH); } } @Override public void updateResult(PipeCheckDto pipeCheckDto) { SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); //PipeCheckRecord pcr = pipeCheckRecordMapper.queryById(pipeCheckDto.getPipeCheckId()); PipeInfo pipeInfo = pipeInfoMapper.queryById(pipeCheckDto.getPipeId()); //记录 PipeCheckRecord pipeCheckRecord = new PipeCheckRecord(); pipeCheckRecord.setPipeId(pipeInfo.getPipeId()); pipeCheckRecord.setCheckResult(pipeCheckDto.getCheckResult()); pipeCheckRecord.setCheckUser(userInfo.getUserId()); pipeCheckRecord.setRemark(pipeCheckDto.getRemark()); pipeCheckRecord.setCheckReason(pipeCheckDto.getCheckReason()); pipeCheckRecordMapper.insert(pipeCheckRecord); System.out.println("#######################"+pipeCheckDto.getCheckResult()); if(pipeCheckDto.getCheckResult()==3){ //报废 //pipeCheckRecordMapper.insert(pipeCheckRecord); List fileList = pipeCheckDto.getFileList()==null?new ArrayList<>():pipeCheckDto.getFileList(); System.out.println(fileList.size()); for(PipeCheckFile cf : fileList){ System.out.println("jiance"+cf==null); cf.setPipeCheckId(pipeCheckRecord.getPipeCheckId()); pipeCheckRecordMapper.insertCheckFile(cf); } } //更新 pipeInfoMapper.updateCheckResult(pipeInfo.setCheckResult(pipeCheckDto.getCheckResult()).setCheckUser(userInfo.getUserId())); } @Override public List pipeCheckList(PipeCheckDto pipeCheckDto) { SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); if(pipeCheckDto==null)pipeCheckDto = new PipeCheckDto(); pipeCheckDto.setCompanyId(userInfo.getCompanyId()); return pipeCheckRecordMapper.pipeCheckList(pipeCheckDto); } @Override @Transactional public void updateResultPass(PipeCheckDto pipeCheckDto) { SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); PipeInfo pipeInfo = pipeInfoMapper.queryById(pipeCheckDto.getPipeId()); if(pipeInfo.getCheckResult()==1){ throw new BasicException(BasicStatus.CURRENT_IS_PASS); } //记录 PipeCheckRecord pipeCheckRecord = new PipeCheckRecord(); pipeCheckRecord.setPipeId(pipeInfo.getPipeId()); pipeCheckRecord.setCheckResult(1); pipeCheckRecord.setCheckUser(userInfo.getUserId()); pipeCheckRecordMapper.insert(pipeCheckRecord); //更新 pipeInfoMapper.updateCheckResult(pipeInfo.setCheckResult(1).setCheckUser(userInfo.getUserId())); } }