diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/ClearBillListPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/ClearBillListPlugin.java index 1cce021..8261333 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/ClearBillListPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/ClearBillListPlugin.java @@ -31,20 +31,20 @@ public class ClearBillListPlugin extends AbstractListPlugin implements Plugin { @Override public void itemClick(ItemClickEvent evt) { super.itemClick(evt); - try { - if ("shjh_unclearacctount".equals(evt.getItemKey())) { - //点击反清账按钮 - FormShowParameter showParameter = createParam(evt.getItemKey(),unClearFormID); - this.getView().showForm(showParameter); - }else if("shjh_changestatus".equals(evt.getItemKey())){ - //点击修改清账单状态按钮 +// try { +// if ("shjh_unclearacctount".equals(evt.getItemKey())) { +// //点击反清账按钮 +// FormShowParameter showParameter = createParam(evt.getItemKey(),unClearFormID); +// this.getView().showForm(showParameter); +// }else if("shjh_changestatus".equals(evt.getItemKey())){ +// //点击修改清账单状态按钮 // FormShowParameter showParameter = createParam(evt.getItemKey(),updateStatusFormID); // this.getView().showForm(showParameter); - } - } catch (Exception e) { - logger.error("按钮处理异常:"+e.getMessage()); - this.getView().showMessage("按钮处理异常"+e.getMessage()); - } +// } +// } catch (Exception e) { +// logger.error("按钮处理异常:"+e.getMessage()); +// this.getView().showMessage("按钮处理异常"+e.getMessage()); +// } } @Override @@ -57,7 +57,7 @@ public class ClearBillListPlugin extends AbstractListPlugin implements Plugin { super.afterDoOperation(e); String okey = e.getOperateKey(); if("unclearacctount_check".equals(okey) && e.getOperationResult().isSuccess()){ - //点击反清账按钮 + //点击反清账按钮-先进行反清账的校验,校验通过后,才弹框 FormShowParameter showParameter = createParam(okey,unClearFormID); this.getView().showForm(showParameter); }else if("updatestatus_check".equals(okey) && e.getOperationResult().isSuccess()){ diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java index c670ae8..8a124f5 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java @@ -35,7 +35,10 @@ import java.util.*; */ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn implements Plugin { - private static final String updateClearStatus = "update tk_shjh_clear_account set fbillstatus='D' where fid=?;"; + //更新单据状态为作废 + private static final String updateInvalidStatus = "update tk_shjh_clear_account set fbillstatus='D' where fid=?;"; + //更新单据状态为已提交 + private static final String updateSubmitStatus = "update tk_shjh_clear_account set fbillstatus='B' where fid=?;"; //手动修改清账状态 private static final String hadleClearStatusByID = "update tk_shjh_clear_account set fk_shjh_changereason='手工清账',fk_shjh_clearstatus='A',fbillstatus='C' where fid=?;"; private static final String updateSap = "update tk_shjh_clear_account set fk_shjh_clearstatus='A',fk_shjh_pzh=?,fk_shjh_year=? where fid=?;"; @@ -326,8 +329,11 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im detailinfo = newDetailBill(prinfo, userinfo); //发送清账明细单的OA待办 JhzjUtils.handleOA(detailinfo, "0", "0"); - JhzjUtils.sendEmail(userinfo.getString("email"), "请登录资金系统操作清账明细单", - detailinfo.getString("billno") + "\n 详情页面" + JhzjUtils.getBillPCURL(detailinfo), "清账明细单新增"); + receivers.clear(); + receivers.add(userinfo.getLong("id")); + String pcurl = JhzjUtils.getBillPCURL(detailinfo); + JhzjUtils.sendEmail("请登录资金系统操作清账明细单", detailinfo.getString("billno") + + "
详情页面 "+pcurl+"", receivers, detailinfo); } }else{ //根据客户、公司、是否可用找到对应的被通知人员(可能多个) @@ -619,7 +625,7 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im private void handleAudit(AfterOperationArgs e) { //审核具体实现 DynamicObject[] dos = e.getDataEntities(); - DynamicObject prinfo;//清账单 + DynamicObject prinfo = null;//清账单 DynamicObject detailinfo;//清账明细单 DynamicObject[] ddos; String billstatus; @@ -632,12 +638,16 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im resultData = sapTransactionVoucher(prinfo); if(resultData == null){ addErrorInfo(prinfo,"调用SAP清账接口失败,详见接口日志"); + //审核后续操作失败,需要更新清账单的单据状态为已提交 + DB.update(DBRoute.of("fi"), updateSubmitStatus, new Object[]{prinfo.getPkValue()}); continue; }else{ //解析sap凭证接口返回值 respdata = ApiUtils.getResponseData(resultData); if(respdata == null){ addErrorInfo(prinfo,"SAP清账接口返回值为空,详见接口日志"); + //审核后续操作失败,需要更新清账单的单据状态为已提交 + DB.update(DBRoute.of("fi"), updateSubmitStatus, new Object[]{prinfo.getPkValue()}); continue; } //反写清账状态、清账凭证号、会计年度字段至清账单中 @@ -664,25 +674,28 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im } //如果清账明细单【单据状态】=已审核,发送审核通过的邮件通知。 if (!detailList.isEmpty()) { - Map userBill = new HashMap<>(); + Map userBill = new HashMap<>(); String billno; - String useremail; + Long userid; DynamicObject userinfo; for (int i = 0; i < detailList.size(); i++) { detailinfo = detailList.get(i); userinfo = BusinessDataServiceHelper.loadSingleFromCache( detailinfo.getDynamicObject("modifier").getLong("id"), userName); - useremail = userinfo.getString("email"); - if (userBill.containsKey(useremail)) { - billno = userBill.get(useremail); - userBill.put(useremail, billno + "," + detailinfo.getString("billno")); + userid = userinfo.getLong("id"); + if (userBill.containsKey(userid)) { + billno = userBill.get(userid); + userBill.put(userid, billno + "," + detailinfo.getString("billno")); } else { - userBill.put(useremail, detailinfo.getString("billno")); + userBill.put(userid, detailinfo.getString("billno")); } } //遍历map,给每个人发邮件 - for (Map.Entry entry : userBill.entrySet()) { - JhzjUtils.sendEmail(entry.getKey(), "清账完成通知:", entry.getValue() + "已清账完成", "清账单审核"); + List receivers = new ArrayList<>(1); + for (Map.Entry entry : userBill.entrySet()) { + receivers.clear(); + receivers.add(entry.getKey()); + JhzjUtils.sendEmail("清账完成通知", entry.getValue() + "上述清账明细单已完成清账", receivers, prinfo); } } } @@ -694,7 +707,7 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im DynamicObject prinfo; for (int i = 0; i < dos.length; i++) { prinfo = dos[i]; - DB.update(DBRoute.of("fi"), updateClearStatus, new Object[]{prinfo.getLong("id")}); + DB.update(DBRoute.of("fi"), updateInvalidStatus, new Object[]{prinfo.getLong("id")}); DB.update(DBRoute.of("fi"), updateDetailStatusByBill, new Object[]{prinfo.getString("id")}); //处理完成提示 this.operationResult.addSuccessPkId(prinfo.getPkValue()); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearDetailBillOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearDetailBillOperation.java index 39bc87e..c5beedf 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearDetailBillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearDetailBillOperation.java @@ -15,7 +15,9 @@ import kd.sdk.plugin.Plugin; import shjh.jhzj7.fi.fi.utils.JhzjUtils; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; /** @@ -253,18 +255,28 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp BigDecimal q3 =clearBillInfo.getBigDecimal("shjh_receamount"); //获取清账单的本次核销金额合计 BigDecimal entrytotal = BigDecimal.ZERO; + BigDecimal entrynegatetotal = BigDecimal.ZERO;//获取清账单中对应的已认领收款金额 for (int i = 0; i < cleardoc.size(); i++) { clearEntryInfo = cleardoc.get(i); entrytotal = entrytotal.add(clearEntryInfo.getBigDecimal("shjh_e_cursettle")); + if(clearEntryInfo.getBigDecimal("shjh_e_cursettle").signum() == -1){ + entrynegatetotal = entrynegatetotal.add(clearEntryInfo.getBigDecimal("shjh_e_cursettle")); + } } - //清账单的收款金额+账扣+尾差=本次核销金额合计,即可提交 - if(entrytotal.compareTo(q1.add(q2).add(q3)) == 0){ - clearBillInfo.set("billstatus","B"); - } - //已认领收款金额=本次核销金额合计-账扣-尾差 - clearBillInfo.set("shjh_claimamount", entrytotal.subtract(q1).subtract(q2)); +// //清账单的收款金额+账扣+尾差=本次核销金额合计,即可提交 +// if(entrytotal.compareTo(q1.add(q2).add(q3)) == 0){ +// clearBillInfo.set("billstatus","B"); +// } +// //已认领收款金额=本次核销金额合计-账扣-尾差 +// clearBillInfo.set("shjh_claimamount", entrytotal.subtract(q1).subtract(q2)); + //已认领收款金额 + clearBillInfo.set("shjh_claimamount", entrynegatetotal.abs()); //未认领收款金额=收款金额-已认领收款金额 clearBillInfo.set("shjh_unclaimamount", q3.subtract(clearBillInfo.getBigDecimal("shjh_claimamount"))); + //未认领收款金额为0,即清账单可以提交 + if(clearBillInfo.getBigDecimal("shjh_unclaimamount").signum() == 0){ + clearBillInfo.set("billstatus","B"); + } SaveServiceHelper.save(new DynamicObject[]{clearBillInfo}); //解除清账单互斥锁 JhzjUtils.unLockBill(clearBillInfo); @@ -353,9 +365,10 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp private void handleReject(AfterOperationArgs e){ //驳回具体实现 DynamicObject[] dos = e.getDataEntities(); - DynamicObject prinfo; + DynamicObject prinfo;//清账明细单 DynamicObject userinfo; - String result; + String result;//反写清账单结果 + List receivers = new ArrayList<>(1); for (int i = 0; i < dos.length; i++) { prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(),dos[i].getDataEntityType().getName()); //驳回时,删除对应清账单中由明细单反写的表头和分录数据 @@ -369,8 +382,13 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp userinfo = BusinessDataServiceHelper.loadSingle(prinfo.getDynamicObject("modifier").getLong("id"), userName); //驳回时,对清账明细单修改人发送邮件通知,OA待办 业务员可修改后,再次提交。 - JhzjUtils.sendEmail(userinfo.getString("email"),"请登录资金系统操作清账明细单", - prinfo.getString("billno")+"\n 详情页面 请点击此次","清账明细单新增"); +// JhzjUtils.sendEmail(userinfo.getString("email"),"请登录资金系统操作清账明细单", +// prinfo.getString("billno")+"\n 详情页面 请点击此次","清账明细单新增"); + receivers.clear(); + receivers.add(userinfo.getLong("id")); + String pcurl = JhzjUtils.getBillPCURL(prinfo); + JhzjUtils.sendEmail("请登录资金系统操作清账明细单", prinfo.getString("billno") + + "
详情页面 "+pcurl+"", receivers, prinfo); JhzjUtils.handleOA(prinfo,"0", "0"); //处理完成提示 this.operationResult.addSuccessPkId(prinfo.getPkValue());