操作VO时 对VO数据进行锁定

本文深入探讨了在NC系统中单据锁定的实现方式,通过分析nc.vo.util.BDPKLockUtil类的lockString方法,解释了如何在InformerManageServiceImpl类的makeBill方法中对特定单据进行锁定,防止并发修改。
//单据锁定
nc.vo.util.BDPKLockUtil
BDPKLockUtil.lockString(new String[] { rvo.getPk_informer() });

具体代码

nc.impl.cmp.informer.InformerManageServiceImpl


/*      */   public InformerAppendVO makeBill(String billType, InformerVO rvo, InformerAppendVO dvo)
/*      */     throws BusinessException
/*      */   {
/*  105 */     BDPKLockUtil.lockString(new String[] { rvo.getPk_informer() });
/*      */     
/*  107 */     InformerBS bs = new InformerBS();
/*  108 */     if ("36J7".equals(billType)) {
/*  109 */       return bs.makeCommissionGatherBill(rvo, dvo);
/*      */     }
public Result addFeedDetail(IngredientDetailVO vo){ Result result = new Result(); WOMFeedDetail feedDetail = new WOMFeedDetail(); //主表对象 WOMProduceTask produceTask = produceTaskDao.get(vo.getTaskId()); feedDetail.setProduceTask(produceTask); //物料 String sqlForMaterial = "SELECT * FROM BASESET_MATERIALS WHERE VALID = 1 AND CODE = ?"; List<BaseSetMaterial> materialList = produceTaskDao.createNativeQuery(sqlForMaterial, BaseSetMaterial.class, vo.getMaterialCode()).list(); feedDetail.setMaterial(materialList.get(0)); //投入工单号 //feedDetail.setInputOrderNo(vo.getInputOrderNo()); //左下指令单活动 feedDetail.setTaskActive(taskActiveDao.get(vo.getSubId())); //物料批次 feedDetail.setMaterialBatch(vo.getMaterialBatch()); //预投料数量 feedDetail.setPreFeedNum(new BigDecimal(vo.getPreFeedNum())); //是否采用 feedDetail.setIsUsed(true); //是否锁定 feedDetail.setIsLocked(false); //是否跨级工单明细物料 feedDetail.setIsBind(vo.getIsBind()); //跨级工单id feedDetail.setBindTaskId(vo.getBindTaskId().toString()); //以下为非必要部分 //物料码扫码内容 feedDetail.setMaterialInput(vo.getMaterialInput()); //物料编码(文本) feedDetail.setMaterialCode(vo.getMaterialCode()); //物料名称(文本) feedDetail.setMaterialName(vo.getMaterialName()); //批次号 feedDetail.setBatchCode(vo.getBatchCode()); //批次现存量 feedDetail.setBatchRemain(vo.getBatchRemain()); //所选称重设备 feedDetail.setDevice(vo.getDevice()); //扫描称重码 feedDetail.setDeviceCode(vo.getDeviceCode()); //称重重量 feedDetail.setWeight(new BigDecimal(vo.getWeight())); //标准皮重 feedDetail.setTare(new BigDecimal(vo.getTare())); //实际皮重 feedDetail.setActualTare(new BigDecimal(vo.getActualTare())); //确认重量 feedDetail.setEnsureWeight(new BigDecimal(vo.getEnsureWeight())); //实际投料量 feedDetail.setActualFeed(new BigDecimal(vo.getActualFeed())); feedDetailDao.save(feedDetail); feedDetailDao.flush(); feedDetailDao.clear(); //根据明细表数据计算并同步活动表物料投入总和并保存 if(vo.getIsBind()){ //跨级工单绑定 WOMTaskActive taskActive = taskActiveDao.get(vo.getSubId()); BigDecimal total = new BigDecimal("0.000"); if(Objects.nonNull(taskActive.getPreFeedSum())){ total = taskActive.getPreFeedSum(); } total = total.add(new BigDecimal(vo.getActualFeed())); taskActive.setPreFeedSum(total); taskActiveDao.save(taskActive); }else{ //非跨级工单绑定 savePreFeedSum(vo.getTaskId(), vo.getSubId(), materialList.get(0).getId()); } result.setData(feedDetail.getId()); result.setCode(200); result.setMessage("success"); return result; }代码是否有逻辑错误或语法错误
最新发布
08-08
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值