清账单代码调试修改

This commit is contained in:
yuxueliang0813 2025-03-05 18:36:37 +08:00
parent 2684976000
commit 193ac58f71
4 changed files with 53 additions and 25 deletions

View File

@ -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");

View File

@ -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");
}

View File

@ -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<String, Object> 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");
}
/**

View File

@ -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){