Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public String genCurrentAccountCode(EntityManager em, String paBranchCode, String paAccountType, String paUidAmn, String paIpaddress, String paScreenId) throws Exception
- {
- int vnCurrentAccountCode = 0;
- AccountControl voAccountControl = null;
- //หาช่วงของเลขทะเบียนตาม สาขา และ ประเภทของทะเบียนลูกค้า (ได้ข้อมูลแถวเดียว)
- StringBuffer jpqlStmt = new StringBuffer();
- jpqlStmt.append(" SELECT a ");
- jpqlStmt.append(" FROM AccountControl a ");
- jpqlStmt.append(" WHERE a.branchCode = ?1 ");
- jpqlStmt.append(" AND a.accountType = ?2 ");
- Query voQuery = em.createQuery(jpqlStmt.toString());
- voQuery.setParameter(1, paBranchCode);
- voQuery.setParameter(2, paAccountType);
- //หาเลขทะเบียนปัจจุบัน ที่จะนำไปใช้เป็นเลข ป.
- if (voQuery.getResultList() != null && voQuery.getResultList().size() == 1 && !voQuery.getResultList().get(0).equals(""))
- {
- List voList = voQuery.getResultList();
- voAccountControl = new AccountControl();
- voAccountControl = (AccountControl)voList.get(0);
- //หา เลขทะเบียนเริ่มต้น, เลขทะเบียนสิ้นสุด, เลขทะเบียนปัจจุบัน
- String vaStartAccountCode = voAccountControl.getStartAccountCode();
- String vaFinishAccountCode = voAccountControl.getFinishAccountCode();
- String vaCurrentAccountCode = voAccountControl.getCurrentAccountCode();
- if (Integer.parseInt(vaStartAccountCode) <= Integer.parseInt(vaCurrentAccountCode) && Integer.parseInt(vaCurrentAccountCode) <= Integer.parseInt(vaFinishAccountCode))
- { //กรณี เลขทะเบียนอยู่ในช่วง
- vnCurrentAccountCode = Integer.parseInt(vaCurrentAccountCode);
- if (vnCurrentAccountCode == 8888888)
- { //เนื่องจาก เลข 8888888 มีคนจองใช้แล้ว (ธุรกิจเสริม)
- vnCurrentAccountCode = vnCurrentAccountCode + 1;
- }
- }
- else
- { //กรณี เลขทะเบียนหมดแล้ว ต้อง Gen ช่วงเลขใหม่
- //หาเลขทะเบียนเริ่มต้น ของช่วงที่จะ Gen ใหม่
- long vnBgn = generateAccountCode(em, paAccountType);
- //เตรียมข้อมูล เลขทะเบียนเริ่มต้น, เลขทะเบียนสิ้นสุด, เลขทะเบียนปัจจุบัน ของช่วงที่จะ Gen ใหม่
- vaStartAccountCode = StringPadding.padString(String.valueOf(vnBgn), 7, '0', true);
- vaFinishAccountCode = StringPadding.padString(String.valueOf(vnBgn + voAccountControl.getNumberOfAccount() - 1), 7, '0', true);
- vaCurrentAccountCode = StringPadding.padString(String.valueOf(vnBgn), 7, '0', true);
- //ตรวจสอบเลขทะเบียน 8888888 เนื่องจากมีคนจองใช้แล้ว (ธุรกิจเสริม)
- long vnSpecialNumber = 88888888;
- if (vnSpecialNumber > Long.parseLong(vaStartAccountCode) && vnSpecialNumber < Long.parseLong(vaFinishAccountCode))
- { //กรณี Gen ช่วงเลขทะเบียนที่มี 8888888 อยู่ในช่วง ให้บวกเพิ่มให้ อีก 1 ตัว (แต่ตอนดึงมาใช้ ต้องมีตรวจสอบว่าถ้าเป็น 8888888 ให้ข้ามไปด้วย)
- vaFinishAccountCode = StringPadding.padString(String.valueOf(Long.parseLong(vaFinishAccountCode)) + 1, 7, '0', true);
- }
- //Update ช่วงเลขทะเบียนใหม่
- StringBuffer sqlStmt = new StringBuffer();
- sqlStmt.append(" UPDATE AccountControl o ");
- sqlStmt.append(" SET o.startAccountCode = ?3 ");
- sqlStmt.append(" , o.finishAccountCode = ?4 ");
- sqlStmt.append(" , o.currentAccountCode = ?5 ");
- sqlStmt.append(" , o.updatedBy = ?6 ");
- sqlStmt.append(" , o.updatedDate = CURRENT_TIMESTAMP ");
- sqlStmt.append(" , o.ipaddress = ?7 ");
- sqlStmt.append(" , o.recStatus = 1 ");
- sqlStmt.append(" , o.screenId = ?8 ");
- sqlStmt.append(" WHERE o.branchCode = ?1 ");
- sqlStmt.append(" AND o.accountType = ?2 ");
- voQuery = em.createQuery(sqlStmt.toString());
- int vnCnt = 1;
- voQuery.setParameter(vnCnt++, paBranchCode);
- voQuery.setParameter(vnCnt++, paAccountType);
- voQuery.setParameter(vnCnt++, vaStartAccountCode);
- voQuery.setParameter(vnCnt++, vaFinishAccountCode);
- voQuery.setParameter(vnCnt++, vaCurrentAccountCode);
- voQuery.setParameter(vnCnt++, paUidAmn);
- voQuery.setParameter(vnCnt++, paIpaddress);
- voQuery.setParameter(vnCnt++, paScreenId);
- voQuery.executeUpdate();
- vnCurrentAccountCode = Integer.parseInt(vaCurrentAccountCode);
- } //End กรณี เลขทะเบียนหมดแล้ว ต้อง Gen ช่วงเลขใหม่
- } //End หาเลขทะเบียนปัจจุบัน ที่จะนำไปใช้เป็นเลข ป.
- else
- {
- //throw new Exception("genCurrentAccountCode : ไม่พบข้อมูล");
- throw new ApplicationException("ไม่พบการจองทะเบียนผู้ใช้น้ำ");
- }
- //Gen เลข Check Digit
- int vnTemp1 = 0;
- int vnTemp2 = 0;
- int vnTemp3 = 0;
- int vnTemp4 = 0;
- int vnTemp5 = 0;
- int vnTemp6 = 0;
- int vnTemp7 = 0;
- int vnTemp = 0;
- vnTemp1 = vnCurrentAccountCode % 10 * 2;
- vnTemp2 = vnCurrentAccountCode % 100 / 10;
- vnTemp3 = vnCurrentAccountCode % 1000 / 100 * 2;
- vnTemp4 = vnCurrentAccountCode % 10000 / 1000;
- vnTemp5 = vnCurrentAccountCode % 100000 / 10000 * 2;
- vnTemp6 = vnCurrentAccountCode % 1000000 / 100000;
- vnTemp7 = vnCurrentAccountCode % 10000000 / 1000000 * 2;
- vnTemp += vnTemp1 / 10 + vnTemp1 % 10;
- vnTemp += vnTemp2 / 10 + vnTemp2 % 10;
- vnTemp += vnTemp3 / 10 + vnTemp3 % 10;
- vnTemp += vnTemp4 / 10 + vnTemp4 % 10;
- vnTemp += vnTemp5 / 10 + vnTemp5 % 10;
- vnTemp += vnTemp6 / 10 + vnTemp6 % 10;
- vnTemp += vnTemp7 / 10 + vnTemp7 % 10;
- vnTemp = 10 - (vnTemp % 10);
- vnTemp = vnTemp % 10;
- //Gen เลขทะเบียน ป. (เลขทะเบียน + Check Digit)
- String vaAccountCode = StringPadding.padString(String.valueOf(vnCurrentAccountCode), 7, '0', true).concat(String.valueOf(vnTemp));
- //
- insertAccountLog(em, voAccountControl, vaAccountCode, vnCurrentAccountCode, paUidAmn, paIpaddress, paScreenId);
- return vaAccountCode;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement