Browse Source

【泛微对接】【银行登记新增接口】

wub 2 weeks ago
parent
commit
60ca5eb380

+ 4 - 4
src/main/java/com/uas/eis/controller/ERPController.java

@@ -34,11 +34,11 @@ public class ERPController {
 
 
     @RequestMapping("/erp/saveAccountRegister")
-    public Map<String, Object> save(@RequestBody AccountRegisterReq accountRegisterReq) {
+    public ApiResult<String> save(@RequestBody AccountRegisterReq accountRegisterReq) {
         Map<String, Object> modelMap = new HashMap<String, Object>();
-        erpService.saveAccountRegister(accountRegisterReq);
-        modelMap.put("success", true);
-        return modelMap;
+        return erpService.saveAccountRegister(accountRegisterReq);
+//        modelMap.put("success", true);
+//        return modelMap;
     }
 
     /**

+ 1 - 1
src/main/java/com/uas/eis/service/ERPService.java

@@ -15,7 +15,7 @@ public interface ERPService {
 //
 //    ApiResult<String> syncOriFactoryDelivery(String data);
 
-    void saveAccountRegister(AccountRegisterReq accountRegisterReq);
+    ApiResult<String> saveAccountRegister(AccountRegisterReq accountRegisterReq);
 
     ApiResult<String> syncProduct(String data);
 

+ 136 - 119
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -228,143 +228,160 @@ public class ERPServiceImpl implements ERPService {
 
     @Override
     @Transactional
-    public void saveAccountRegister(AccountRegisterReq accountRegisterReq) {
-        String caller="AccountRegister!Bank";
-        AccountRegisterMain accountRegisterMain = accountRegisterReq.getAccountRegisterMain();
-        int ar_id = baseDao.getSeqId("ACCOUNTREGISTER_SEQ");
-        String code = baseDao.sGetMaxNumber("AccountRegister", 2);
-        List<String> sqls = new ArrayList<>();
+    public ApiResult<String> saveAccountRegister(AccountRegisterReq accountRegisterReq) {
+        try {
+            JSONObject jsonObject = new JSONObject();
+            logger.info("saveAccountRegister-Begin:master {} ids {}");
+            String caller="AccountRegister!Bank";
+            AccountRegisterMain accountRegisterMain = accountRegisterReq.getAccountRegisterMain();
+            int ar_id = baseDao.getSeqId("ACCOUNTREGISTER_SEQ");
+            String code = baseDao.sGetMaxNumber("AccountRegister", 2);
+            List<String> sqls = new ArrayList<>();
 
-        // 应收票据收款、应付票据付款 必须有来源,不允许手工新增
-        String type = accountRegisterMain.getType();
-        //Employee employee = SystemSession.getUser();
-        if ("应收票据收款".equals(type) || "应付票据付款".equals(type))
-            BaseUtil.showError(type + " 必须有来源,不允许手工新增");
-        List<AccountRegisterDetail1> accountRegisterDetail1s = accountRegisterReq.getListDetail1();
+            // 应收票据收款、应付票据付款 必须有来源,不允许手工新增
+            String type = accountRegisterMain.getType();
+            //Employee employee = SystemSession.getUser();
+            if ("应收票据收款".equals(type) || "应付票据付款".equals(type)){
+                return ApiResponse.failRsp("102",type + " 必须有来源,不允许手工新增");
+            }
+            List<AccountRegisterDetail1> accountRegisterDetail1s = accountRegisterReq.getListDetail1();
 
-        String err_out = "";
-        int count = accountRegisterDetail1s.size();
+            String err_out = "";
+            int count = accountRegisterDetail1s.size();
 
-        for (AccountRegisterDetail1 map : accountRegisterDetail1s) {
-            String cate_code = map.getCatecode(); // 科目编码
-            BigDecimal detno = map.getDetno();
-            if (!cate_code.trim().equals("")) {
-                Object o = baseDao.getFieldDataByCondition("CATEGORY", "ca_isleaf", "ca_code='" + cate_code + "'");
-                String isleaf = o == null ? "0" : o.toString();
-                if (isleaf.equals("0")) {
-                    // 科目不是子节点 报错
-                    err_out = err_out + String.valueOf(detno);
-                    if (accountRegisterDetail1s.indexOf(map) == count - 1) {
+            for (AccountRegisterDetail1 map : accountRegisterDetail1s) {
+                String cate_code = map.getCatecode(); // 科目编码
+                BigDecimal detno = map.getDetno();
+                if (!cate_code.trim().equals("")) {
+                    Object o = baseDao.getFieldDataByCondition("CATEGORY", "ca_isleaf", "ca_code='" + cate_code + "'");
+                    String isleaf = o == null ? "0" : o.toString();
+                    if (isleaf.equals("0")) {
+                        // 科目不是子节点 报错
+                        err_out = err_out + String.valueOf(detno);
+                        if (accountRegisterDetail1s.indexOf(map) == count - 1) {
 
-                    } else {
-                        err_out = err_out + ",";
+                        } else {
+                            err_out = err_out + ",";
+                        }
                     }
                 }
             }
-        }
-        if (!err_out.equals("")) {
-            BaseUtil.showError("第" + err_out + "条明细行科目不是末级科目,不能保存明细行!");
-        }
-        Object date = (Object) accountRegisterMain.getDate();
-        baseDao.checkCloseMonth("MONTH-B", date);
-
-        String Sql="insert into AccountRegister(ar_id,ar_code,ar_date,ar_type,ar_currencytype,ar_accountcode,ar_accountname,ar_accountcurrency,ar_accountrate" +
-                ",ar_payment,ar_departmentcode,ar_departmentname,ar_cateid,ar_emid,ar_recordman,ar_status,ar_statuscode,ar_poststatus,ar_poststatuscode)" +
-                "values("+ar_id+",'"+code+"',to_date('"+accountRegisterMain.getDate()+"','yyyy-mm-dd'),'"+accountRegisterMain.getType()+"','"+accountRegisterMain.getCurrencytype()+"','"+accountRegisterMain.getAccountcode()+"'," +
-                "'"+accountRegisterMain.getAccountname()+"','"+accountRegisterMain.getAccountcurrency()+"','"+accountRegisterMain.getAccountrate()+"'," +
-                accountRegisterMain.getPayment()+",'"+accountRegisterMain.getDepartmentcode()+"','"+accountRegisterMain.getDepartmentname()+"',"+accountRegisterMain.getCateid()+"," +
-                "1033922,'管理员','在录入','ENTERING','未过账','UNPOST')";
+            if (!err_out.equals("")) {
+                return ApiResponse.failRsp("102","第" + err_out + "条明细行科目不是末级科目,不能保存明细行!");
+            }
+            Object date = (Object) accountRegisterMain.getDate();
+            baseDao.checkCloseMonth("MONTH-B", date);
 
-        sqls.add(Sql);
+            boolean bool = baseDao.checkIf("PeriodsDetail", "pd_code='MONTH-B' and pd_status=99 and pd_detno=to_char(to_date('" + date
+                    + "','yyyy-mm-dd hh24:mi:ss'), 'yyyymm')");
+            if (bool) {
+                return ApiResponse.failRsp("102",type + " 单据日期所属期间已结账,不允许进行当前操作!");
+            }
 
+            String Sql="insert into AccountRegister(ar_id,ar_code,ar_date,ar_type,ar_currencytype,ar_accountcode,ar_accountname,ar_accountcurrency,ar_accountrate" +
+                    ",ar_payment,ar_departmentcode,ar_departmentname,ar_cateid,ar_emid,ar_recordman,ar_status,ar_statuscode,ar_poststatus,ar_poststatuscode)" +
+                    "values("+ar_id+",'"+code+"',to_date('"+accountRegisterMain.getDate()+"','yyyy-mm-dd'),'"+accountRegisterMain.getType()+"','"+accountRegisterMain.getCurrencytype()+"','"+accountRegisterMain.getAccountcode()+"'," +
+                    "'"+accountRegisterMain.getAccountname()+"','"+accountRegisterMain.getAccountcurrency()+"','"+accountRegisterMain.getAccountrate()+"'," +
+                    accountRegisterMain.getPayment()+",'"+accountRegisterMain.getDepartmentcode()+"','"+accountRegisterMain.getDepartmentname()+"',"+accountRegisterMain.getCateid()+"," +
+                    "1033922,'管理员','在录入','ENTERING','未过账','UNPOST')";
 
-        List<AccountRegisterDetail2> accountRegisterDetail2s = accountRegisterReq.getListDetail2();
-        for (AccountRegisterDetail1 accountRegisterDetail1: accountRegisterDetail1s) {
-            int ard_id = baseDao.getSeqId("ACCOUNTREGISTERDETAIL_SEQ");
-            Sql="insert into AccountRegisterDetail(ard_id,ard_arid,ard_detno,ard_explanation,ard_catecode,ard_catedesc,ard_currency,ard_rate,ard_doubledebit,ard_debit)" +
-                    "values("+ard_id+","+ar_id+","+accountRegisterDetail1.getDetno()+",'"+accountRegisterDetail1.getExplanation()+"','"+accountRegisterDetail1.getCatecode()+"','"+
-                    accountRegisterDetail1.getCatedesc()+"','"+accountRegisterDetail1.getCurrency()+"',"+accountRegisterDetail1.getRate()+","+accountRegisterDetail1.getDoubledebit()+","+accountRegisterDetail1.getDebit()+")";
             sqls.add(Sql);
 
-            for (AccountRegisterDetail2 accountRegisterDetail2: accountRegisterDetail2s) {
-                if (accountRegisterDetail2.getDetailFkId().doubleValue() == accountRegisterDetail1.getDetailId().doubleValue()){
-                    Sql="insert into ACCOUNTREGISTERDETAILASS(ARS_ID, ARS_ARDID, ARS_DETNO, ARS_ASSTYPE, ARS_ASSCODE, ARS_ASSNAME, ARS_TYPE)" +
-                            "values(ACCOUNTREGISTERDETAILASS_seq.nextval,"+ard_id+","+accountRegisterDetail2.getDetno()+",'"+accountRegisterDetail2.getAsstype()+"','"+accountRegisterDetail2.getAsscode()+"','"+
-                            accountRegisterDetail2.getAssname()+"','AccountRegister!Bank')";
-                    sqls.add(Sql);
+
+            List<AccountRegisterDetail2> accountRegisterDetail2s = accountRegisterReq.getListDetail2();
+            for (AccountRegisterDetail1 accountRegisterDetail1: accountRegisterDetail1s) {
+                int ard_id = baseDao.getSeqId("ACCOUNTREGISTERDETAIL_SEQ");
+                Sql="insert into AccountRegisterDetail(ard_id,ard_arid,ard_detno,ard_explanation,ard_catecode,ard_catedesc,ard_currency,ard_rate,ard_doubledebit,ard_debit)" +
+                        "values("+ard_id+","+ar_id+","+accountRegisterDetail1.getDetno()+",'"+accountRegisterDetail1.getExplanation()+"','"+accountRegisterDetail1.getCatecode()+"','"+
+                        accountRegisterDetail1.getCatedesc()+"','"+accountRegisterDetail1.getCurrency()+"',"+accountRegisterDetail1.getRate()+","+accountRegisterDetail1.getDoubledebit()+","+accountRegisterDetail1.getDebit()+")";
+                sqls.add(Sql);
+
+                for (AccountRegisterDetail2 accountRegisterDetail2: accountRegisterDetail2s) {
+                    if (accountRegisterDetail2.getDetailFkId().doubleValue() == accountRegisterDetail1.getDetailId().doubleValue()){
+                        Sql="insert into ACCOUNTREGISTERDETAILASS(ARS_ID, ARS_ARDID, ARS_DETNO, ARS_ASSTYPE, ARS_ASSCODE, ARS_ASSNAME, ARS_TYPE)" +
+                                "values(ACCOUNTREGISTERDETAILASS_seq.nextval,"+ard_id+","+accountRegisterDetail2.getDetno()+",'"+accountRegisterDetail2.getAsstype()+"','"+accountRegisterDetail2.getAsscode()+"','"+
+                                accountRegisterDetail2.getAssname()+"','AccountRegister!Bank')";
+                        sqls.add(Sql);
+                    }
                 }
             }
-        }
-        baseDao.execute(sqls);
-        String defaultCurr =  baseDao.getDBSetting(caller, "fyCurr");
-        if(defaultCurr != null){
-            baseDao.execute("update accountregisterdetail set ard_currency='"+defaultCurr+"' WHERE ard_arid in (select ar_id from accountregister where ar_id=" + ar_id +" and nvl(ar_currencytype,0)<>0 and ar_type='费用') and nvl(ard_currency,' ')=' '");
-        }
-        baseDao.execute("update accountregisterdetail set ard_rate=(select cm_crrate from CurrencysMonth,accountregister where ard_arid=ar_id and cm_crname=ard_currency "
-                + " and CM_YEARMONTH=to_char(ar_date,'yyyymm')) where ard_arid=" + ar_id + " and nvl(ard_currency,' ')<>' '");
-        baseDao.execute("update accountregisterdetail set ard_debit=round(ard_rate*ard_doubledebit,2) where nvl(ard_doubledebit,0)<>0 and nvl(ard_rate,0)<>0 and ard_arid="
-                + ar_id);
-        baseDao.execute("update accountregisterdetail set ard_credit=round(ard_rate*ard_doublecredit,2) where nvl(ard_doublecredit,0)<>0 and nvl(ard_rate,0)<>0 and ard_arid="
-                + ar_id);
-        baseDao.execute("update accountregisterdetail set ard_doubledebit=round(ard_debit/ard_rate,2) where nvl(ard_doubledebit,0)=0 and nvl(ard_rate,0)<>0 and ard_arid="
-                + ar_id);
-        baseDao.execute("update accountregisterdetail set ard_doublecredit=round(ard_credit/ard_rate,2) where nvl(ard_doublecredit,0)=0 and nvl(ard_rate,0)<>0 and ard_arid="
-                + ar_id);
-        String insertAssDetSql = "insert into accountregisterdetailass(ars_id,ars_ardid,ars_detno,ars_asstype,ars_asscode,ars_assname,ars_type) values (?,?,?,?,?,?,'AccountRegister!Bank')";
-        SqlRowList rs = baseDao
-                .queryForRowSet(
-                        "select * from accountregister left join accountregisterdetail on ard_arid=ar_id where ard_arid=? and nvl(ard_catecode,' ')<>' '",
-                        ar_id);
-        while (rs.next()) {
-            Object catecode = rs.getObject("ard_catecode");
-            int ardid = rs.getInt("ard_id");
-            SqlRowList ass = baseDao.queryForRowSet("select ca_assname from category where ca_code=? and nvl(ca_assname,' ')<>' '",
-                    catecode);
-            if (ass.next()) {
-                String assStr = ass.getString("ca_assname");
-                String[] codes = assStr.split("#");
-                for (String assname : codes) {
-                    int i = baseDao.getCount("select count(1) from accountregisterdetailass where ars_ardid=" + ardid
-                            + " and ARS_ASSTYPE='" + assname + "'");
-                    if (i == 0) {
-                        Object maxno = baseDao.getFieldDataByCondition("accountregisterdetailass", "max(nvl(ars_detno,0))", "ars_ardid="
-                                + ardid);
-                        maxno = maxno == null ? 0 : maxno;
-                        int detno = Integer.parseInt(maxno.toString()) + 1;
-                        int arsid = baseDao.getSeqId("ACCOUNTREGISTERDETAILASS_SEQ");
-                        baseDao.execute(insertAssDetSql, new Object[] { arsid, ardid, detno, assname, null, null });
-                    }
-                    int arsid = baseDao.getFieldValue("accountregisterdetailass", "ars_id", "ars_ardid=" + ardid + " and ARS_ASSTYPE='"
-                            + assname + "'", Integer.class);
-                    if ("部门".equals(assname) && StringUtil.hasText(rs.getObject("ar_departmentcode"))) {
-                        baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_departmentcode")
-                                + "', ars_assname='" + rs.getObject("ar_departmentname") + "' where ars_id=" + arsid
-                                + " and nvl(ars_asscode,' ')=' '");
-                    }
-                    if ("项目".equals(assname) && StringUtil.hasText(rs.getObject("ar_prjcode"))) {
-                        baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_prjcode")
-                                + "', ars_assname='" + rs.getObject("ar_prjname") + "' where ars_id=" + arsid
-                                + " and nvl(ars_asscode,' ')=' '");
-                    }
-                    if ("客户往来".equals(assname) && StringUtil.hasText(rs.getObject("ar_custcode"))) {
-                        baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_custcode")
-                                + "', ars_assname='" + rs.getObject("ar_custname") + "' where ars_id=" + arsid
-                                + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '");
-                    }
-                    if ("供应商往来".equals(assname) && StringUtil.hasText(rs.getObject("ar_vendcode"))) {
-                        baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_vendcode")
-                                + "', ars_assname='" + rs.getObject("ar_vendname") + "' where ars_id=" + arsid
-                                + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '");
-                    }
-                    if ("员工".equals(assname) && StringUtil.hasText(rs.getObject("ar_emcode"))) {
-                        baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_emcode")
-                                + "', ars_assname='" + rs.getObject("ar_emname") + "' where ars_id=" + arsid
-                                + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '");
+            baseDao.execute(sqls);
+            String defaultCurr =  baseDao.getDBSetting(caller, "fyCurr");
+            if(defaultCurr != null){
+                baseDao.execute("update accountregisterdetail set ard_currency='"+defaultCurr+"' WHERE ard_arid in (select ar_id from accountregister where ar_id=" + ar_id +" and nvl(ar_currencytype,0)<>0 and ar_type='费用') and nvl(ard_currency,' ')=' '");
+            }
+            baseDao.execute("update accountregisterdetail set ard_rate=(select cm_crrate from CurrencysMonth,accountregister where ard_arid=ar_id and cm_crname=ard_currency "
+                    + " and CM_YEARMONTH=to_char(ar_date,'yyyymm')) where ard_arid=" + ar_id + " and nvl(ard_currency,' ')<>' '");
+            baseDao.execute("update accountregisterdetail set ard_debit=round(ard_rate*ard_doubledebit,2) where nvl(ard_doubledebit,0)<>0 and nvl(ard_rate,0)<>0 and ard_arid="
+                    + ar_id);
+            baseDao.execute("update accountregisterdetail set ard_credit=round(ard_rate*ard_doublecredit,2) where nvl(ard_doublecredit,0)<>0 and nvl(ard_rate,0)<>0 and ard_arid="
+                    + ar_id);
+            baseDao.execute("update accountregisterdetail set ard_doubledebit=round(ard_debit/ard_rate,2) where nvl(ard_doubledebit,0)=0 and nvl(ard_rate,0)<>0 and ard_arid="
+                    + ar_id);
+            baseDao.execute("update accountregisterdetail set ard_doublecredit=round(ard_credit/ard_rate,2) where nvl(ard_doublecredit,0)=0 and nvl(ard_rate,0)<>0 and ard_arid="
+                    + ar_id);
+            String insertAssDetSql = "insert into accountregisterdetailass(ars_id,ars_ardid,ars_detno,ars_asstype,ars_asscode,ars_assname,ars_type) values (?,?,?,?,?,?,'AccountRegister!Bank')";
+            SqlRowList rs = baseDao
+                    .queryForRowSet(
+                            "select * from accountregister left join accountregisterdetail on ard_arid=ar_id where ard_arid=? and nvl(ard_catecode,' ')<>' '",
+                            ar_id);
+            while (rs.next()) {
+                Object catecode = rs.getObject("ard_catecode");
+                int ardid = rs.getInt("ard_id");
+                SqlRowList ass = baseDao.queryForRowSet("select ca_assname from category where ca_code=? and nvl(ca_assname,' ')<>' '",
+                        catecode);
+                if (ass.next()) {
+                    String assStr = ass.getString("ca_assname");
+                    String[] codes = assStr.split("#");
+                    for (String assname : codes) {
+                        int i = baseDao.getCount("select count(1) from accountregisterdetailass where ars_ardid=" + ardid
+                                + " and ARS_ASSTYPE='" + assname + "'");
+                        if (i == 0) {
+                            Object maxno = baseDao.getFieldDataByCondition("accountregisterdetailass", "max(nvl(ars_detno,0))", "ars_ardid="
+                                    + ardid);
+                            maxno = maxno == null ? 0 : maxno;
+                            int detno = Integer.parseInt(maxno.toString()) + 1;
+                            int arsid = baseDao.getSeqId("ACCOUNTREGISTERDETAILASS_SEQ");
+                            baseDao.execute(insertAssDetSql, new Object[] { arsid, ardid, detno, assname, null, null });
+                        }
+                        int arsid = baseDao.getFieldValue("accountregisterdetailass", "ars_id", "ars_ardid=" + ardid + " and ARS_ASSTYPE='"
+                                + assname + "'", Integer.class);
+                        if ("部门".equals(assname) && StringUtil.hasText(rs.getObject("ar_departmentcode"))) {
+                            baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_departmentcode")
+                                    + "', ars_assname='" + rs.getObject("ar_departmentname") + "' where ars_id=" + arsid
+                                    + " and nvl(ars_asscode,' ')=' '");
+                        }
+                        if ("项目".equals(assname) && StringUtil.hasText(rs.getObject("ar_prjcode"))) {
+                            baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_prjcode")
+                                    + "', ars_assname='" + rs.getObject("ar_prjname") + "' where ars_id=" + arsid
+                                    + " and nvl(ars_asscode,' ')=' '");
+                        }
+                        if ("客户往来".equals(assname) && StringUtil.hasText(rs.getObject("ar_custcode"))) {
+                            baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_custcode")
+                                    + "', ars_assname='" + rs.getObject("ar_custname") + "' where ars_id=" + arsid
+                                    + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '");
+                        }
+                        if ("供应商往来".equals(assname) && StringUtil.hasText(rs.getObject("ar_vendcode"))) {
+                            baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_vendcode")
+                                    + "', ars_assname='" + rs.getObject("ar_vendname") + "' where ars_id=" + arsid
+                                    + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '");
+                        }
+                        if ("员工".equals(assname) && StringUtil.hasText(rs.getObject("ar_emcode"))) {
+                            baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_emcode")
+                                    + "', ars_assname='" + rs.getObject("ar_emname") + "' where ars_id=" + arsid
+                                    + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '");
+                        }
                     }
                 }
             }
+            updateErrorString(ar_id);
+        }catch (Exception e){
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("message", e.getMessage());
+            return ApiResponse.failRsp("101",jsonObject.getString("message"));
         }
-        updateErrorString(ar_id);
+
+        return ApiResponse.successRsp("0","同步银行登记成功");
     }