Sfoglia il codice sorgente

fix:微信公众号提醒 添加系统参数

sbtjtserver/gw-zhaojq01 1 settimana fa
parent
commit
5934a4635e

+ 94 - 0
nckd-fi/src/main/java/nckd/fi/er/formplugin/ResWeChatCodeFormPlugin.java

@@ -0,0 +1,94 @@
+package nckd.fi.er.formplugin;
+
+import com.alibaba.fastjson.JSONObject;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.IDataModel;
+import kd.bos.form.control.Control;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import org.apache.commons.lang3.ObjectUtils;
+
+import java.util.*;
+
+/**
+ * @description:微信公众号对应跳转信息
+ * @author: zhaojiaqi
+ * @create: 2025/12/31 16:35
+ */
+public class ResWeChatCodeFormPlugin extends AbstractFormPlugin {
+
+    // 确认按钮
+    private static final String CONTROL_KEY_NCKD_CONFIRM = "nckd_confirm";
+
+    // 自定义参数键常量
+    private static final String CUSTOM_PARAM_KEY_NCKD_RES = "nckd_res";
+
+    // 分录实体标识
+    private static final String ENTRY_ENTITY_KEY_NCKD_ENTRYENTITY = "nckd_entryentity";
+
+    // 字段名常量
+    private static final String FIELD_NCKD_RESCAPTION = "nckd_rescaption";
+    private static final String FIELD_NCKD_RESCODE = "nckd_rescode";
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        this.addClickListeners(CONTROL_KEY_NCKD_CONFIRM);
+    }
+
+    @Override
+    public void afterCreateNewData(EventObject e) {
+        super.afterCreateNewData(e);
+        setEntry();
+    }
+
+    @Override
+    public void click(EventObject evt) {
+        super.click(evt);
+        Control source = (Control) evt.getSource();
+        if (CONTROL_KEY_NCKD_CONFIRM.equals(source.getKey())) {
+            callParentEntry();
+        }
+    }
+
+    /**
+     * 将资源信息显示在单据体里面
+     */
+    private void setEntry() {
+        // 获取上级页面传递的资源信息
+        String resCode = this.getView().getFormShowParameter().getCustomParam(CUSTOM_PARAM_KEY_NCKD_RES);
+        if (ObjectUtils.isEmpty(resCode)) {
+            return;
+        }
+        List<Map<String, Object>> resCodeList = JSONObject.parseObject(resCode, List.class);
+        IDataModel model = this.getModel();
+        // 将资源信息显示在分录中
+        DynamicObjectCollection entryEntity = model.getEntryEntity(ENTRY_ENTITY_KEY_NCKD_ENTRYENTITY);
+        for (Map<String, Object> resCodeMap : resCodeList) {
+            DynamicObject entry = entryEntity.addNew();
+            entry.set(FIELD_NCKD_RESCAPTION, resCodeMap.get(FIELD_NCKD_RESCAPTION));
+            entry.set(FIELD_NCKD_RESCODE, resCodeMap.get(FIELD_NCKD_RESCODE));
+        }
+    }
+
+    /**
+     * 将分录信息传递至上级页面
+     */
+    private void callParentEntry() {
+        DynamicObjectCollection entryEntity = this.getModel().getEntryEntity(ENTRY_ENTITY_KEY_NCKD_ENTRYENTITY);
+        if (entryEntity.isEmpty()) {
+            this.getView().returnDataToParent("");
+            this.getView().close();
+            return;
+        }
+        List<Map<String, Object>> resCodeList = new ArrayList<>();
+        for (DynamicObject entry : entryEntity) {
+            Map<String, Object> resCode = new HashMap<>();
+            resCode.put(FIELD_NCKD_RESCAPTION, entry.getString(FIELD_NCKD_RESCAPTION));
+            resCode.put(FIELD_NCKD_RESCODE, entry.getString(FIELD_NCKD_RESCODE));
+            resCodeList.add(resCode);
+        }
+        this.getView().returnDataToParent(JSONObject.toJSONString(resCodeList));
+        this.getView().close();
+    }
+}

+ 53 - 0
nckd-fi/src/main/java/nckd/fi/er/formplugin/WeChatCheckFormPlugin.java

@@ -0,0 +1,53 @@
+package nckd.fi.er.formplugin;
+
+import kd.bos.form.control.Control;
+import kd.bos.form.events.ClosedCallBackEvent;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import nckd.base.common.utils.FormUtils;
+
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description:采购应用参数
+ * @author: zhaojiaqi
+ * @create: 2025/12/31 10:35
+ */
+public class WeChatCheckFormPlugin extends AbstractFormPlugin {
+
+    /**对应跳转信息*/
+    private static final String CONTROL_KEY_NCKD_RES = "nckd_res";
+
+    /**微信公众号详情跳转信息*/
+    private static final String FORM_ID_NCKD_EM_RESCODE = "nckd_pm_rescode";
+
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        this.addClickListeners(CONTROL_KEY_NCKD_RES);
+    }
+
+    @Override
+    public void click(EventObject evt) {
+        super.click(evt);
+        Control source = (Control) evt.getSource();
+        // 公众号详情
+        if (CONTROL_KEY_NCKD_RES.equals(source.getKey())) {
+            // 参数
+            Map<String, Object> map = new HashMap<>();
+            map.put(CONTROL_KEY_NCKD_RES, this.getModel().getValue(CONTROL_KEY_NCKD_RES));
+            FormUtils.formShowParameter(this.getView(), FORM_ID_NCKD_EM_RESCODE, map, this, CONTROL_KEY_NCKD_RES);
+        }
+    }
+
+    @Override
+    public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
+        super.closedCallBack(closedCallBackEvent);
+        String actionId = closedCallBackEvent.getActionId();
+        if (CONTROL_KEY_NCKD_RES.equals(actionId) && null != closedCallBackEvent.getReturnData()) {
+            this.getModel().setValue(CONTROL_KEY_NCKD_RES, closedCallBackEvent.getReturnData());
+        }
+    }
+}

+ 42 - 10
nckd-fi/src/main/java/nckd/fi/er/message/SendMsgToWeChatOA.java

@@ -70,7 +70,7 @@ public class SendMsgToWeChatOA extends AbstractMessageServiceHandler {
         Long id = message.getId();
 
         //从系统参数中获取以下参数值
-        Map<String, Object> sysCtrlParamMap = sysCtrlParam();
+        Map<String, Object> sysCtrlParamMap = sysCtrlParam(entityNumber);
         //微信获取token地址
         String url = (String) sysCtrlParamMap.get("nckd_tokenurl");
         //公众号appid
@@ -107,17 +107,17 @@ public class SendMsgToWeChatOA extends AbstractMessageServiceHandler {
 
         if(!StringUtils.isEmpty(accessToken)){
             //微信公众号模板消息接口url 配置成参数
-            url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
+            url = (String) sysCtrlParamMap.get("nckd_msgurl");
             url = url+accessToken;
             //模板消息接口请求参数
             Map<String,Object> requestJson = new HashMap<>();
             requestJson.put("template_id",templateid);
-            //采购订单 跳转路径
-//            String testUrl = "http://erp-test.jxctly.com/ierp/mobile.html?form=mobsp_purorderview&accountId="+ RequestContext.get().getAccountId()+"&pkId="+message.getBizDataId();
-            //对账单 跳转路径
-            String testUrl = "http://erp-test.jxctly.com/ierp/mobile.html?form=mobsp_checkaccountview&accountId="+ RequestContext.get().getAccountId()+"&pkId="+message.getBizDataId();
-//            String testUrl = "http://erp-test.jxctly.com/ierp/mobile.html?form=mobsp_checkaccountlist&accountId="+ RequestContext.get().getAccountId()+"&pkId="+message.getBizDataId();
-            requestJson.put("url",testUrl);
+            //微信公众号对应跳转信息
+            Map<String, String> nckdRes = getResMap(entityNumber, (String) sysCtrlParamMap.get("nckd_res"));
+            nckdRes.get("nckd_rescode");
+            //拼接跳转路径
+            String msgUrl = "http://erp-test.jxctly.com/ierp/mobile.html?form="+nckdRes.get("nckd_rescode")+"&accountId="+ RequestContext.get().getAccountId()+"&pkId="+bizDataId;
+            requestJson.put("url",msgUrl);
             requestJson.put("client_msg_id",id);
             //组装data参数
             JSONObject dataJson = madeJsonObject(entityNumber,bizDataId);
@@ -161,6 +161,7 @@ public class SendMsgToWeChatOA extends AbstractMessageServiceHandler {
 
 
     }
+
     /**
      * 组装Json
      * @param entityNumber
@@ -191,6 +192,12 @@ public class SendMsgToWeChatOA extends AbstractMessageServiceHandler {
         dataJson.put("orderNumber", orderNumberObj);
         return dataJson;
     }
+    /**
+     * 查询表单对象
+     * @param entityNumber
+     * @param bizDataId
+     * @return
+     */
 
     private Map<String, String> queryEntityObject(String entityNumber, Long bizDataId) {
         Map<String, String> map = new HashMap<>();
@@ -222,8 +229,10 @@ public class SendMsgToWeChatOA extends AbstractMessageServiceHandler {
         return openid;
     }
 
-    //获取公共参数
-    private Map<String, Object> sysCtrlParam() {
+    /**
+     * 获取公共参数
+     */
+    private Map<String, Object> sysCtrlParam(String entityNumber) {
         //获取采购应用参数
         Map<String, Object> sysCtrlParamMap = ParamUtils.getSysCtrlParameter(ParamUtils.PM);
         //微信获取token地址
@@ -234,6 +243,29 @@ public class SendMsgToWeChatOA extends AbstractMessageServiceHandler {
         sysCtrlParamMap.get("nckd_appsecret");
         //公众号模板消息 模板id
         sysCtrlParamMap.get("nckd_textfield");
+        //模板消息接口url
+        sysCtrlParamMap.get("nckd_msgurl");
+        //对应跳转信息
+        sysCtrlParamMap.get("nckd_res");
         return sysCtrlParamMap;
     }
+
+   /**
+     * 获取采购应用参数
+     * @param entityNumber
+     * @param resStr
+     * @return
+     */
+    public static Map<String, String> getResMap(String entityNumber, String resStr) {
+        if (StringUtils.isEmpty(resStr)) {
+            throw new KDBizException("请前往系统参数-应用-供应链云-采购应用参数 对应跳转信息");
+        }
+        //资源代号信息
+        Map<String, String> res = ((List<Map<String, String>>) JSONObject.parseObject(resStr, List.class))
+                .stream().filter(it -> it.get("nckd_rescaption").equals(entityNumber)).findAny().orElse(null);
+        if (null == res) {
+            throw new KDBizException("请前往系统参数-应用-供应链云-采购应用参数 对应跳转信息,配置供应商协同页面标识");
+        }
+        return res;
+    }
 }