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 7b9ff1a..47ed0b9 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java @@ -138,7 +138,7 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im private void handleOAUpdate(String clearbillid) { DynamicObject[] ddos = BusinessDataServiceHelper.load(entityName, "id,billno,billstatus,shjh_clearbillid,shjh_clearbillno,createtime,creator,modifier", - new QFilter[]{new QFilter("shjh_clearbillid", "=", clearbillid)}); + new QFilter[]{new QFilter("shjh_clearbillid", QCP.equals, clearbillid)}); DynamicObject detailinfo; for (int j = 0; j < ddos.length; j++) { detailinfo = ddos[j]; @@ -167,6 +167,7 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im QFilter qFilter; DynamicObject[] pzbs; DynamicObject pzbinfo;//配置表 + DynamicObject userinfo;//用户 DynamicObjectCollection users;//配置表中的被通知人集合 for (int i = 0; i < dos.length; i++) { prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName()); @@ -182,28 +183,34 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im this.operationResult.setShowMessage(true);//前端界面 是否显示提示消息 continue; } - pzbinfo = BusinessDataServiceHelper.loadSingleFromCache(pzbs[0].getLong("id"), pzbName); + pzbinfo = BusinessDataServiceHelper.loadSingle(pzbs[0].getLong("id"), pzbName); users = pzbinfo.getDynamicObjectCollection("shjh_users"); for (DynamicObject user : users) { - user.getDynamicObject("fbasedataid");//fbasedataid + userinfo = user.getDynamicObject("fbasedataid");//fbasedataid //根据清账单id和创建人id判断清账明细单是否已生成 qFilter = new QFilter("shjh_clearbillid", QCP.equals, prinfo.getString("id")); - qFilter.and("creator", QCP.equals, user.getDynamicObject("fbasedataid").getLong("id")); + qFilter.and("creator", QCP.equals, userinfo.getLong("id")); if (!QueryServiceHelper.exists(entityName, qFilter.toArray())) { +// userinfo = BusinessDataServiceHelper.loadSingleFromCache(user.getDynamicObject("fbasedataid"), userName); //新增一个清账明细单 - detailinfo = newDetailBill(prinfo, user.getDynamicObject("fbasedataid")); + detailinfo = newDetailBill(prinfo, userinfo); //发送清账明细单的OA待办 JhzjUtils.handleOA(detailinfo, "0", "0"); -// JhzjUtils.sendEmail(users.get(j).getString("email"), "请登录资金系统操作清账明细单", -// detailinfo.getString("billno") + "\n 详情页面" + JhzjUtils.getBillPCURL(detailinfo), "清账明细单新增"); + JhzjUtils.sendEmail(userinfo.getString("email"), "请登录资金系统操作清账明细单", + detailinfo.getString("billno") + "\n 详情页面" + JhzjUtils.getBillPCURL(detailinfo), "清账明细单新增"); } } } + //处理完成提示 + this.operationResult.setSuccess(true); + this.operationResult.setMessage("清账明细单生成成功");//前端界面提示内容 + this.operationResult.setShowMessage(true);//前端界面 是否显示提示消息 } private DynamicObject newDetailBill(DynamicObject prinfo, DynamicObject userinfo) { //根据清账单和被通知人创建清账明细单 DynamicObject detailinfo = BusinessDataServiceHelper.newDynamicObject(entityName); + detailinfo.set("billno", prinfo.getString("billno"));//单据编号 detailinfo.set("org", prinfo.getDynamicObject("org"));//公司 detailinfo.set("shjh_currency", prinfo.getDynamicObject("shjh_currency"));//币别 detailinfo.set("shjh_bizdate", prinfo.getDate("shjh_bizdate"));//业务日期 @@ -293,7 +300,7 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im //若存在(暂存、驳回)的清账明细单,则系统自动处理:清账明细单【单据状态】全标记为作废,并消除被作废明细单的OA待办。 ddos = BusinessDataServiceHelper.load(entityName, "id,billno,billstatus,shjh_clearbillid,shjh_clearbillno,createtime,creator,modifier", - new QFilter[]{new QFilter("shjh_clearbillid", "=", prinfo.getString("id"))}); + new QFilter[]{new QFilter("shjh_clearbillid", QCP.equals, prinfo.getString("id"))}); for (int j = 0; j < ddos.length; j++) { detailinfo = ddos[j]; billstatus = detailinfo.getString("billstatus"); 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 e56cd2a..b6aa595 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearDetailBillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearDetailBillOperation.java @@ -25,6 +25,7 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp private static final String updateDetailReject = "update tk_shjh_clear_acctdetail set fbillstatus='E' where fid=?;"; private static final String updateClearBillSave = "update tk_shjh_clear_account set fbillstatus='A' where fbillstatus='B' and fid=?;"; private static final String clearBillName = "shjh_clear_account";//清账单 + private static final String userName = "bos_user";//用户 /** * 操作校验通过之后,开启事务之前,触发此事件; @@ -51,7 +52,7 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp } //清账明细单【未清金额】+【账扣金额】+【尾差金额】≥【本次核销金额合计】 if(!checkAmount(prinfo)){ - e.setCancelMessage(billno+"【未清金额】+【账扣金额】+【尾差金额】≥【本次核销金额合计】,才允许提交"); + e.setCancelMessage(billno+"【未清金额】+【账扣】+【尾差】≥【本次核销金额合计】,本次核销金额合计-账扣-尾差 >=0,才允许提交"); e.setCancel(true); } //判断对应的清账单是否已提交,如果是,则不允许提交此明细单 @@ -74,6 +75,7 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp e.setCancel(true); } }else if("reject".equals(eok)){ + JhzjUtils.sendWEIXINQY(null,null,null,null); //驳回校验 if(!"B".equals(prinfo.getString("billstatus"))){ //清账明细单【单据状态】=已提交,才允许点击驳回按钮 @@ -114,7 +116,8 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp entrytotal = entrytotal.add(doc.get(i).getBigDecimal("shjh_e_cursettle"));//累计分录本次核销金额 } } - if(billtotal.compareTo(entrytotal) >= 0){ + //本次核销金额合计-账扣-尾差 >=0 才允许提交 + if(billtotal.compareTo(entrytotal) >= 0 && entrytotal.compareTo(JhzjUtils.addTwoAmount(a2,a3)) >= 0){ //校验通过返回true return true; } @@ -221,6 +224,10 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp 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_unclaimamount", q3.subtract(clearBillInfo.getBigDecimal("shjh_claimamount"))); SaveServiceHelper.save(new DynamicObject[]{clearBillInfo}); //解除清账单互斥锁 JhzjUtils.unLockBill(clearBillInfo); @@ -252,10 +259,13 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp //清账单分录 DynamicObjectCollection cleardoc = clearBillInfo.getDynamicObjectCollection("shjh_details"); DynamicObject clearEntryInfo; + BigDecimal entrytotal = BigDecimal.ZERO; for (int i = cleardoc.size()-1; i >=0; i--) { clearEntryInfo = cleardoc.get(i); - if(idsets.contains(clearEntryInfo.getString("id"))){ + if(idsets.contains(clearEntryInfo.getString("shjh_e_detailentryid"))){ cleardoc.remove(clearEntryInfo); + }else{ + entrytotal = entrytotal.add(clearEntryInfo.getBigDecimal("shjh_e_cursettle"));//累计分录本次核销金额 } } //处理清账单账扣 @@ -266,7 +276,16 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp BigDecimal q2 = JhzjUtils.reduceTwoAmount(clearBillInfo.getBigDecimal("shjh_diffamount"), detailBillInfo.getBigDecimal("shjh_diffamount")); clearBillInfo.set("shjh_diffamount",q2); + //已认领收款金额=本次核销金额合计-账扣-尾差 + clearBillInfo.set("shjh_claimamount", entrytotal.subtract(q1).subtract(q2)); + //未认领收款金额=收款金额-已认领收款金额 + clearBillInfo.set("shjh_unclaimamount", JhzjUtils.reduceTwoAmount(clearBillInfo.getBigDecimal("shjh_receamount"), + clearBillInfo.getBigDecimal("shjh_claimamount"))); + if("B".equals(clearBillInfo.getString("billstatus"))){ + //若清账单【单据状态】=已提交,则更新清账单【单据状态】=暂存。 + clearBillInfo.set("billstatus","A"); + } SaveServiceHelper.save(new DynamicObject[]{clearBillInfo}); //解除清账单互斥锁 JhzjUtils.unLockBill(clearBillInfo); @@ -280,8 +299,7 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp DynamicObject prinfo; String result; for (int i = 0; i < dos.length; i++) { - prinfo = dos[i]; - + prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(),dos[i].getDataEntityType().getName()); //删除对应清账单中由明细单反写的表头和分录数据 result = reDeleteClearBill(prinfo); if(!"success".equals(result)){ @@ -299,6 +317,7 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp //驳回具体实现 DynamicObject[] dos = e.getDataEntities(); DynamicObject prinfo; + DynamicObject userinfo; String result; for (int i = 0; i < dos.length; i++) { prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(),dos[i].getDataEntityType().getName()); @@ -310,13 +329,12 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp this.operationResult.setShowMessage(true);//前端界面 是否显示提示消息 continue; } - //若清账单【单据状态】=已提交,则更新清账单【单据状态】=暂存。 - DB.update(DBRoute.of("fi"), updateClearBillSave, new Object[]{prinfo.getString("shjh_clearbillid")}); //清账明细单【单据状态】=驳回 DB.update(DBRoute.of("fi"), updateDetailReject, new Object[]{prinfo.getLong("id")}); - + userinfo = BusinessDataServiceHelper.loadSingle(prinfo.getDynamicObject("modifier").getLong("id"), + userName); //驳回时,对清账明细单修改人发送邮件通知,OA待办 业务员可修改后,再次提交。 - JhzjUtils.sendEmail(prinfo.getDynamicObject("modifier").getString("email"),"请登录资金系统操作清账明细单", + JhzjUtils.sendEmail(userinfo.getString("email"),"请登录资金系统操作清账明细单", prinfo.getString("billno")+"\n 详情页面"+JhzjUtils.getBillPCURL(prinfo),"清账明细单新增"); JhzjUtils.handleOA(prinfo,"0", "0"); } diff --git a/main/java/shjh/jhzj7/fi/fi/utils/JhzjUtils.java b/main/java/shjh/jhzj7/fi/fi/utils/JhzjUtils.java index 3bfa75e..01d02b0 100644 --- a/main/java/shjh/jhzj7/fi/fi/utils/JhzjUtils.java +++ b/main/java/shjh/jhzj7/fi/fi/utils/JhzjUtils.java @@ -76,7 +76,7 @@ public class JhzjUtils { /** * 组装入参,给指定人员发邮件 - * @param email 邮箱地址 + * @param email 邮箱地址 * @param title 邮件主题 * @param content 邮件内容 * @param operation 上游操作触发 @@ -86,7 +86,8 @@ public class JhzjUtils { emailInfo.setTitle(title); emailInfo.setContent(content); List receivers = new ArrayList<>(); - receivers.add(email);//接收人1 + receivers.add(email);//增加接收人 + emailInfo.setReceiver(receivers); Map sendResult = EmailHandler.sendEmail(emailInfo); //保存邮件发送日志 saveLog(email,"邮件",content,(String)sendResult.get("description"),(Boolean)sendResult.get("result"),operation); @@ -118,12 +119,13 @@ public class JhzjUtils { message.setMessageTag(tag); //信息发送人 message.setSenderId(RequestContext.get().getCurrUserId()); - message.setType(MessageInfo.TYPE_MESSAGE); + message.setType("notice_wx");//消息类型的编号 StringBuilder notifyType = new StringBuilder(); - notifyType.append(MessageChannels.WEIXINQY).append(","); - notifyType.append(MessageChannels.EMAIL); +// notifyType.append(MessageChannels.EMAIL).append(","); + notifyType.append(MessageChannels.WEIXINQY); message.setNotifyType(notifyType.toString()); - MessageCenterServiceHelper.sendMessage(message); + long result = MessageCenterServiceHelper.sendMessage(message); + logger.info("微信消息返回"+result);//2163947346411418624 } /** @@ -289,7 +291,7 @@ public class JhzjUtils { //https://ip:port/ierp/index.html?formId=er_tripreqbill&pkId=721810009540800512 String contextUrl = System.getProperty("domain.contextUrl"); String formId = prinfo.getDataEntityType().getName(); - return contextUrl+"?formId="+formId+"&pkId="+prinfo.getLong("id"); + return contextUrl+"/index.html?formId="+formId+"&pkId="+prinfo.getLong("id"); } /** diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/PersonControler.java b/main/java/shjh/jhzj7/fi/fi/webapi/PersonControler.java index 0a0c65a..eb83383 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/PersonControler.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/PersonControler.java @@ -260,8 +260,9 @@ public class PersonControler implements Serializable { 如果没有同步用户,即t_bas_immapping表中查不到数据,则会跳转到苍穹登陆界面;用户输入信息之后苍穹会自动在t_bas_immapping中获取openid并存储; * ( 此逻辑在kd.bos.login.thirdauth.app.tencent.WxgzhLoginAfter中,目前标准代码存在bug,多系统对接对于同一个fuserid会替换openid, * 导致单点登录到别的系统失败,多系统对接需要修改总部标准代码或者联系总部出私包解决 ) + * select fid,FIMTYPEID,FOPENID,FUSERID from t_bas_immapping * */ - + //insert into t_bas_immapping(fid,FIMTYPEID,FOPENID,FUSERID) values (1992929292121,3,'690',2116742421407602688) } private void handlePersonForCustomer(UserParam ups){