起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7690|回复: 12

[结贴] BizUtils.createNextSequenceString()编码重复

[复制链接]

165

主题

402

帖子

1074

积分

金牌会员

Rank: 6Rank: 6

积分
1074
QQ
发表于 2017-6-2 16:11:58 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
用BizUtils.createNextSequenceString()生成的编码重复,请问这是为什么?

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36069
发表于 2017-6-2 16:16:40 | 显示全部楼层
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

165

主题

402

帖子

1074

积分

金牌会员

Rank: 6Rank: 6

积分
1074
QQ
 楼主| 发表于 2017-6-2 16:31:46 | 显示全部楼层
jishuang 发表于 2017-6-2 16:16
key怎么设置的?
http://bbs.wex5.com/forum.php?mod=viewthread&tid=39632

public static void newInBillProcessAfterFinish() throws Exception {
                String fid=com.justep.system.process.ProcessUtils.getProcessData1();
                System.out.println(fid);
               
                Mkt_inbill_parent inbillParent = Mkt_inbill_parentService.getInstance().fetch(fid);
                BigDecimal inBillAmount=inbillParent.getINBILLAMOUNT();
                if(inBillAmount.compareTo(new BigDecimal(0))>0){
                        inbillParent.setINBILLSTATUS("开正票完成");
                        inbillParent.setINBILLPERSON(null);
             }else {
                     inbillParent.setINBILLSTATUS("开负票完成");
                     inbillParent.setINBILLPERSON(null);
             }
                Mkt_inbill_parentService.getInstance().update(inbillParent);
               
               
                //插入进度单表
                //------------------------------------------------------------
                  List<Mkt_inbill> bill= Mkt_inbillService.getInstance().query(Cnd.where("inBillParentID", "=", fid));
                  String isZhengQi=inbillParent.getKSLB();
                  Iterator<Mkt_inbill> billitIs50 = bill.iterator();
                  String processStatus="审批完成";
                  while(billitIs50.hasNext()){
                      Mkt_inbill tempbill=billitIs50.next();
                      if((tempbill.getPrjAllInbillAmount().add(tempbill.getINBILLAMOUNT())).compareTo(new BigDecimal(5000000))>=0&&"政企".equals(isZhengQi)){
                          
                          processStatus="暂存";
                      }
                  }
                  
                  Fin_schedule_parent temp=new Fin_schedule_parent();
                  String tempfid=temp.UUID();
                  System.out.println(tempfid);
                  temp.setFid(tempfid);
                  temp.setVersion(0);
                  temp.setFcreatdtime(new java.sql.Date(System.currentTimeMillis()));
                  temp.setFupdatetime(new java.sql.Date(System.currentTimeMillis()));
                  temp.setFcreatepersonname(inbillParent.getFCREATEPERSONNAME());
                  temp.setFcreatepersonid(inbillParent.getFCREATEPERSONID());
                  temp.setFcreatepersoncode(inbillParent.getFCREATEPERSONCODE());
                  temp.setFcreatepersonfid(inbillParent.getFCREATEPERSONFID());
          String scheduleCreater=inbillParent.getFCREATEPERSONFID();//进度单发起人
                  temp.setFcreatedeptname(inbillParent.getFCREATEDEPTNAME());
                  temp.setFcreatedeptid(inbillParent.getFCREATEDEPTID());
                  temp.setFcreatedeptcode(inbillParent.getFCREATEDEPTCODE());
                  SimpleDateFormat sDateFormat = new SimpleDateFormat("yyMM");
                  String date = sDateFormat.format(new java.util.Date());
          String bm = BizUtils.createNextSequenceString("KPJD"+date,"0000");       
                  temp.setScheduleno(bm);
                  temp.setCustomerunit(inbillParent.getMNAME());
                  temp.setCustomertype(inbillParent.getMTYPE());
                  temp.setCustomerprovince(inbillParent.getMPROVINCE());
                  temp.setCustomercity(inbillParent.getMCITY());
                  temp.setScheduleamount(inbillParent.getPROCESSAMOUNT());
                  temp.setJudgingcondition("0");
                  try {
                      FinScheduleParentService.getInstance().insert(temp);
                  } catch (Exception e) {
                        log.error("插入进度单主表失败:" + e.getMessage());
                  }
                  
                  Iterator<Mkt_inbill> billit = bill.iterator();
                  while(billit.hasNext()){
                      Mkt_inbill tempbill=billit.next();
                      Fin_schedule_detail tempSchedule=new Fin_schedule_detail();
                      tempSchedule.setFid(tempSchedule.UUID());
                      tempSchedule.setVersion(0);
                      tempSchedule.setFcreatepersonname(inbillParent.getFCREATEPERSONNAME());
                          tempSchedule.setFcreatepersonid(inbillParent.getFCREATEPERSONID());
                          tempSchedule.setFcreatepersoncode(inbillParent.getFCREATEPERSONCODE());
                          tempSchedule.setFcreatepersonfid(inbillParent.getFCREATEPERSONFID());
                          tempSchedule.setFcreatedeptname(inbillParent.getFCREATEDEPTNAME());
                          tempSchedule.setFcreatedeptid(inbillParent.getFCREATEDEPTID());
                          tempSchedule.setFcreatedeptcode(inbillParent.getFCREATEDEPTCODE());
                          tempSchedule.setFcreatdtime(new java.sql.Date(System.currentTimeMillis()));
                          tempSchedule.setFupdatetime(new java.sql.Date(System.currentTimeMillis()));
                      tempSchedule.setPrjno(tempbill.getPRJNO());
                      tempSchedule.setPrjname(tempbill.getPRJNAME());
                      tempSchedule.setSubprjno(tempbill.getSUBPRJNO());
                      tempSchedule.setSubprjname(tempbill.getSUBPRJNAME());
                      tempSchedule.setSubprjincome(tempbill.getSUBPRJESTIMATEAMOUNT());
                      tempSchedule.setSubprjsettlementamount(tempbill.getSUBPRJSETTLEMENTAMOUNT());
                      tempSchedule.setSubprjinagree(tempbill.getSUBPRJINAGREEAMOUNT());
                      BigDecimal allProcessAmount=tempbill.getPLUSPROCESSAMOUNT().add(tempbill.getTHISPROCESSAMOUNT());
                      tempSchedule.setSubsumschedamount(allProcessAmount);//单项累计进度额
                      tempSchedule.setSubsumschedtemp(allProcessAmount);//单项累计进度额暂时
                      tempSchedule.setNowschedamount(tempbill.getTHISPROCESSAMOUNT());//单项本次进度额
                      tempSchedule.setIs_confirm("否");
                      tempSchedule.setIs_print("否");
                      tempSchedule.setCurrentstate(processStatus);
              tempSchedule.setParentid(tempfid);
                     
                      FinScheduleDetailService.getInstance().insert(tempSchedule);
                  }
                  
                 
                  if("暂存".equals(processStatus)){
                      ProcessUtils.startProcess("/ERP/FIN/fininCome/process/schedule/scheduleProcess", "进度单发起", tempfid, scheduleCreater);
          }
                   //------------------------------------------------------------


                 
                 
//                 //发送emoss
                 try {
                        //参数:类型 、业务主键 、业务表、类型名称、数据源
                        CallForEmoss.callServiceAndSaveInfoByDataModel("MKT_INBILL", fid, null, "开票发起", "/ERP/MKT/inbill/data");
                } catch (Exception e) {
                        log.error("调用发报文方法出错:" + e.getMessage());
                }
                  
        }
回复 支持 反对

使用道具 举报

165

主题

402

帖子

1074

积分

金牌会员

Rank: 6Rank: 6

积分
1074
QQ
 楼主| 发表于 2017-6-2 16:32:14 | 显示全部楼层
  SimpleDateFormat sDateFormat = new SimpleDateFormat("yyMM");
                  String date = sDateFormat.format(new java.util.Date());
          String bm = BizUtils.createNextSequenceString("KPJD"+date,"0000");        
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36069
发表于 2017-6-2 17:13:28 | 显示全部楼层
这个应该没问题

把具体的场景详细描述一下
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

165

主题

402

帖子

1074

积分

金牌会员

Rank: 6Rank: 6

积分
1074
QQ
 楼主| 发表于 2017-6-2 17:41:51 | 显示全部楼层
jishuang 发表于 2017-6-2 17:13
这个应该没问题

把具体的场景详细描述一下

我就是流程结束后向另外一张表里插入一条数据,但是出现了很奇怪的现象,一种是同一条记录被插入多次,另一种是不同流程插入的不同数据,但是编号出现重复
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36069
发表于 2017-6-2 17:57:28 | 显示全部楼层
看看SA_KVSequence中key值为你设置的key,value是什么
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

165

主题

402

帖子

1074

积分

金牌会员

Rank: 6Rank: 6

积分
1074
QQ
 楼主| 发表于 2017-6-7 15:45:38 | 显示全部楼层
jishuang 发表于 2017-6-2 17:57
看看SA_KVSequence中key值为你设置的key,value是什么

我查出原因了,是因为我在流程结束事件调用了另外一段java代码,在调用的那段代码里有自己用jdbc写的操作数据库的动作,导致提交数据库失去了原子性,请问这种情况有办法保证处理数据库的原子性吗?
回复 支持 反对

使用道具 举报

165

主题

402

帖子

1074

积分

金牌会员

Rank: 6Rank: 6

积分
1074
QQ
 楼主| 发表于 2017-6-7 15:46:15 | 显示全部楼层
我查出原因了,是因为我在流程结束事件调用了另外一段java代码,在调用的那段代码里有自己用jdbc写的操作数据库的动作,导致提交数据库失去了原子性,请问这种情况有办法保证处理数据库的原子性吗?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36069
发表于 2017-6-7 16:59:02 | 显示全部楼层
调用平台的API处理的是一个事务
自己jdbc创建的连接是另一个事务
这个是不能控制的,要么都用同一个Connection才会在一个事务
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-25 10:36 , Processed in 0.114371 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表