From 7a749fc323dd48de452379b46f612abebe33dc5f Mon Sep 17 00:00:00 2001 From: xiang2lin <251481237@qq.com> Date: Thu, 19 Jun 2025 19:20:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...PoOrderApprovalEventPluginInitializer.java | 107 +++++++++++++++ .../oa/poorder/service/IPoOrderService.java | 7 + .../service/impl/PoOrderServiceImpl.java | 127 ++++++++++++++---- 3 files changed, 217 insertions(+), 24 deletions(-) create mode 100644 base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/plugin/PoOrderApprovalEventPluginInitializer.java diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/plugin/PoOrderApprovalEventPluginInitializer.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/plugin/PoOrderApprovalEventPluginInitializer.java new file mode 100644 index 00000000..74dbfb88 --- /dev/null +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/plugin/PoOrderApprovalEventPluginInitializer.java @@ -0,0 +1,107 @@ +package com.hzya.frame.plugin.oa.poorder.plugin; + +import com.alibaba.fastjson.JSONObject; +import com.hzya.frame.base.PluginBaseEntity; +import com.hzya.frame.plugin.oa.poorder.service.IPoOrderService; +import com.hzya.frame.web.entity.BaseResult; +import com.hzya.frame.web.entity.JsonResultEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description OA采购订单审批事件, 把审批结果传到NCC + * @Author xiangerlin + * @Date 2025/6/15 13:25 + **/ +public class PoOrderApprovalEventPluginInitializer extends PluginBaseEntity { + Logger logger = LoggerFactory.getLogger(PoOrderApprovalEventPluginInitializer.class); + @Autowired + private IPoOrderService poOrderService; + /*** + * 插件初始化方法 + * @Author 👻👻👻👻👻👻👻👻 gjh + * @Date 2023-08-02 10:48 + * @Param [] + * @return void + **/ + @Override + public void initialize() { + logger.info(getPluginLabel() + "執行初始化方法initialize()"); + } + + /**** + * 插件销毁方法 + * @author 👻👻👻👻👻👻👻👻 gjh + * @date 2023-08-02 10:48 + * @return void + **/ + @Override + public void destroy() { + logger.info(getPluginLabel() + "執行銷毀方法destroy()"); + } + + /**** + * 插件的ID + * @author 👻👻👻👻👻👻👻👻 gjh + * @date 2023-08-02 10:48 + * @return void + **/ + @Override + public String getPluginId() { + return "PoOrderApprovalEventPlugin"; + } + + /**** + * 插件的名称 + * @author 👻👻👻👻👻👻👻👻 gjh + * @date 2023-08-02 10:48 + * @return void + **/ + @Override + public String getPluginName() { + return "OA采购订单审批事件插件"; + } + + /**** + * 插件的显示值 + * @author 👻👻👻👻👻👻👻👻 gjh + * @date 2023-08-02 10:48 + * @return void + **/ + @Override + public String getPluginLabel() { + return "OA采购订单审批事件插件"; + } + + /*** + * 插件类型 1、场景插件 + * @Author 👻👻👻👻👻👻👻👻 gjh + * @Date 2023-08-02 14:01 + * @Param [] + * @return java.lang.String + **/ + @Override + public String getPluginType() { + return "1"; + } + + /*** + * 执行业务代码 + * @Author 👻👻👻👻👻👻👻👻 gjh + * @Date 2023-08-07 11:20 + * @param requestJson 执行业务代码的参数 + * @return void + **/ + @Override + public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception { + logger.info("======OA采购订单审批事件插件传NCC插件======{}",JSONObject.toJSONString(requestJson)); + try { + poOrderService.approvedEvent(requestJson); + }catch (Exception e){ + logger.info("======OA采购订单审批事件插件传NCC插件======{}",e.getMessage()); + return BaseResult.getFailureMessageEntity("OA采购订单审批事件插件执行失败",e.getMessage()); + } + return BaseResult.getSuccessMessageEntity("OA采购订单审批事件插件执行成功"); + } +} diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/service/IPoOrderService.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/service/IPoOrderService.java index cb1644fd..b42815d1 100644 --- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/service/IPoOrderService.java +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/service/IPoOrderService.java @@ -17,4 +17,11 @@ public interface IPoOrderService { * @return */ JsonResultEntity buildOAParam(JSONObject reqJson); + + /** + * OA审批事件 + * @param reqJson + * @return + */ + JsonResultEntity approvedEvent(JSONObject reqJson)throws Exception; } diff --git a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/service/impl/PoOrderServiceImpl.java b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/service/impl/PoOrderServiceImpl.java index 77ab105e..0f066fff 100644 --- a/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/service/impl/PoOrderServiceImpl.java +++ b/base-buildpackage/src/main/java/com/hzya/frame/plugin/oa/poorder/service/impl/PoOrderServiceImpl.java @@ -3,16 +3,13 @@ package com.hzya.frame.plugin.oa.poorder.service.impl; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.TypeReference; -import com.alibaba.fastjson.serializer.SerializeConfig; -import com.alibaba.fastjson.serializer.SerializerFeature; -import com.alibaba.fastjson.serializer.SimplePropertyPreFilter; import com.hzya.frame.plugin.oa.poorder.service.IPoOrderService; +import com.hzya.frame.seeyon.enums.ColEventTypeEnum; +import com.hzya.frame.seeyon.org.member.entity.UserViewEntity; +import com.hzya.frame.seeyon.org.member.service.IUserViewService; import com.hzya.frame.seeyon.util.OARestUtil; -import com.hzya.frame.sysnew.application.entity.SysExtensionApiEntity; import com.hzya.frame.web.entity.BaseResult; import com.hzya.frame.web.entity.JsonResultEntity; import org.slf4j.Logger; @@ -20,11 +17,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; - -import java.util.HashMap; import java.util.LinkedList; import java.util.List; -import java.util.Map; /** * @Description 接收NCC采购订单的请求 @@ -36,9 +30,12 @@ public class PoOrderServiceImpl implements IPoOrderService { Logger logger = LoggerFactory.getLogger(PoOrderServiceImpl.class); @Autowired private OARestUtil oaRestUtil; - + @Autowired + private IUserViewService userViewService; @Value("${zt.url}") private String interfaceUrl; + @Value("${oa.po_order_template_code:}") + private String templateCode; /** * 接收NCC的请求,并转换成OA的参数 * @@ -55,28 +52,33 @@ public class PoOrderServiceImpl implements IPoOrderService { JSONArray detailList = nccObj.getJSONArray("body"); Assert.notNull(head,"参数不能为空"); Assert.notNull(detailList,"参数不能为空"); - head.put("user_code","seeyon"); + UserViewEntity userView = new UserViewEntity(); + userView.setStaffNumber(head.getString("user_code")); + userView.setDataSourceCode("JH-OA"); + UserViewEntity userViewEntity = userViewService.queryByStaffNumber(userView); //组装参数 JSONObject formmain_0256 = new JSONObject();//主表数据 List formson_0257_list = new LinkedList<>();//子表数据 - formmain_0256.put("采购组织",head.getString("org_name")); - formmain_0256.put("订单编号",head.getString("vbillcode")); + formmain_0256.put("采购组织名称",head.getString("org_name")); formmain_0256.put("订单日期",head.getString("dbilldate")); formmain_0256.put("供应商",head.getString("sup_name")); - formmain_0256.put("采购员",head.getString("cemployeename")); + formmain_0256.put("采购员姓名",head.getString("cemployeename")); + formmain_0256.put("供应商名称",head.getString("sup_name")); formmain_0256.put("开票供应商",head.getString("invc_sup_name")); formmain_0256.put("付款协议",head.getString("payterm_name")); formmain_0256.put("单据状态",head.getString("forderstatus")); formmain_0256.put("备注",head.getString("vmemo")); - formmain_0256.put("补货",head.getString("bisreplenish")); - formmain_0256.put("退货",head.getString("breturn")); + formmain_0256.put("补货",booleanToStr(head.getString("bisreplenish"))); + formmain_0256.put("退货",booleanToStr(head.getString("breturn"))); formmain_0256.put("总数量",head.getString("ntotalastnum")); formmain_0256.put("总价税合计",head.getString("ntotalorigmny")); formmain_0256.put("币种",head.getString("currtype_name")); - formmain_0256.put("退货退库基于原订单补货",head.getString("brefwhenreturn")); - formmain_0256.put("最终关闭",head.getString("bfinalclose")); + formmain_0256.put("退货退库基于原订单补货",booleanToStr(head.getString("brefwhenreturn"))); + formmain_0256.put("最终关闭",booleanToStr(head.getString("bfinalclose"))); formmain_0256.put("采购部门",head.getString("dept_name")); - formmain_0256.put("订单类型",head.getString("BILLTYPENAME")); + formmain_0256.put("订单类型",head.getString("billtypename")); + formmain_0256.put("NCC采购订单编号",head.getString("vbillcode")); + formmain_0256.put("NCC采购订单PK",head.getString("pk_order")); //子表 for (int i=0; i < detailList.size(); i++){ JSONObject detail = (JSONObject) detailList.get(i); @@ -85,20 +87,24 @@ public class PoOrderServiceImpl implements IPoOrderService { formson_0257.put("行号",detail.getString("crowno")); formson_0257.put("物料编码",detail.getString("material_code")); formson_0257.put("物料名称",detail.getString("material_name")); + formson_0257.put("规格",detail.getString("materialspec")); + formson_0257.put("型号",detail.getString("materialtype")); formson_0257.put("单位",detail.getString("cunitname")); formson_0257.put("数量",detail.getString("nnum")); formson_0257.put("换算率",detail.getString("vchangerate")); formson_0257.put("无税单价",detail.getString("nqtorigprice")); formson_0257.put("含税单价",detail.getString("nqtorigtaxprice")); + formson_0257.put("价税合计",detail.getString("norigtaxmny")); formson_0257.put("集团本币无税金额",detail.getString("norigmny")); formson_0257.put("集团本币价税合计",detail.getString("norigtaxmny")); formson_0257.put("计划收货日期",detail.getString("dplanarrvdate")); formson_0257.put("收货仓库",detail.getString("recvstordoc_name")); formson_0257.put("税率",detail.getString("ntaxrate")); + formson_0257.put("NCC采购订单表体PK",detail.getString("pk_order_b")); formson_0257_list.add(formson_0257); } - String param = oaRestUtil.processParamValueOf(formmain_0256, formson_0257_list, "formmain_0256_dev", "formmain_0256", "formson_0257"); - String token = oaRestUtil.getToken(head.getString("user_code"), "8000640001"); + String param = oaRestUtil.processParamValueOf(formmain_0256, formson_0257_list, templateCode, "formmain_0256", "formson_0257"); + String token = oaRestUtil.getToken(userViewEntity.getLoginName(), "8000640001"); logger.info("NCC发起OA采购订单请求参数{}",param); //调用OA接口 String result = HttpRequest.post(interfaceUrl) @@ -108,8 +114,6 @@ public class PoOrderServiceImpl implements IPoOrderService { .header("publicKey","ZJYAAr9TeFduBYu7uJeie2KYdQsnBaEYZHmOjPWMMVZmzelCe7eDIk+3zDUT+v578prj")//NCC应用key .header("secretKey","f4SSnYcDQmdkwwuGJd2+934q6lM1NnUm5dmOw/4Wvy2mo6PgkKsI/drXYyyLWQCaj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//NCC应用密钥 .body(param).execute().body(); - // JsonResultEntity resultEntity = (JsonResultEntity) oerDjmlService.handleOerDjml(paramJSON); - // logger.info("保存GRPU8响应参数:{}",JSONObject.toJSON(resultEntity)); logger.info("NCC发起OA采购订单响应参数:{}",result); JSONObject resultJson = JSONObject.parseObject(result); if (null == resultJson){ @@ -121,10 +125,85 @@ public class PoOrderServiceImpl implements IPoOrderService { return BaseResult.getSuccessMessageEntity(resultJson.getJSONObject("attribute")); } - private Object convertLowerCase(JSONObject jsonObject,String key){ + + /** + * OA审批事件 + * + * @param requestJson + * @return + */ + @Override + public JsonResultEntity approvedEvent(JSONObject requestJson)throws Exception { + //数据源编码 + String datasourceCode = requestJson.getString("sourceCode"); + String task_living_details_id = requestJson.getString("integration_task_living_details_id"); + String headersStr = requestJson.getString("headers");//请求头 + String eventType = requestJson.getString("eventType"); + String summaryId = requestJson.getString("summaryId"); + JSONObject headers = requestJson.getJSONObject("headers"); + Assert.notEmpty(eventType,"eventType不能为空"); + Assert.notEmpty(headersStr,"headers不能为空"); + String formmainTableName = headers.getString("formmainTableName"); + JSONObject jsonStrObj = requestJson.getJSONObject("jsonStr"); + JSONObject businessData = jsonStrObj.getJSONObject("businessDataStr"); + JSONObject formmainData = businessData.getJSONObject(formmainTableName); + if (null != formmainData){ + String pk_order = formmainData.getString("field0056");//采购订单pk + String vbillcode = formmainData.getString("field0055");//采购订单code + String userId = formmainData.getString("user_id");//审批人id + JSONObject json = new JSONObject(); + json.put("pk_order",pk_order); + json.put("vbillcode",vbillcode); + json.put("userId",userId); + String params = json.toString(); + //组装参数,调用NCC审批接口 + logger.info("OA采购订单审批后传到NCC请购参数。:{},{}",eventType,params); + String apiCode = ""; + if (ColEventTypeEnum.ONPROCESSFINISHED.getType().equals(eventType)){//审批完成 + apiCode = "8000650002"; + }else if (ColEventTypeEnum.ONSTOP.getType().equals(eventType) || ColEventTypeEnum.ONCANCEL.getType().equals(eventType)){//流程终止/撤销 + apiCode = "8000650003"; + } + String result = HttpRequest.post(interfaceUrl) + .header("appId", "800065")//NCC应用 + .header("apiCode", apiCode)//NCC采购订单审批接口 + .header("publicKey", "ZJYAbkr9+XjnDrlfQCRKXtpVvg/BjxqtxzcLgg5TIGagEKJCe7eDIk+3zDUT+v578prj")//OA公钥 + .header("secretKey", "2GR4+yrcx+Ev+pN0Q6V6wxCdvisPX7wzNKBgc5SsIYGxYI5GTISXT6GvTPfp1u2Rj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=")//OA密钥 + .body(params)//表单内容 + .timeout(30000)//超时,毫秒 + .execute().body(); + logger.info("======OA采购单审批后传到NCC响应参数:{}======",result); + JSONObject resultJson = JSONObject.parseObject(result); + if (null == resultJson){ + return BaseResult.getFailureMessageEntity("审批NCC采购订单失败"); + } + if (!resultJson.getBoolean("flag")){ + return BaseResult.getFailureMessageEntity("审批NCC采购订单失败"+resultJson.getString("msg")); + } + return BaseResult.getSuccessMessageEntity(resultJson.getJSONObject("attribute")); + } + return BaseResult.getSuccessMessageEntity("审批NCC采购订单"); + } + + private Object convertLowerCase(JSONObject jsonObject, String key){ if (null != jsonObject && StrUtil.isNotEmpty(key)){ return null == jsonObject.get(key.toUpperCase()) ? jsonObject.get(key.toLowerCase()) : jsonObject.get(key.toUpperCase()); } return null; } + + /** + * 把NCC的 boolean类型转成OA + * NCC Y/N + * OA 1/0 + * @param nccBoolean + * @return + */ + private String booleanToStr(String nccBoolean){ + if ("Y".equals(nccBoolean)){ + return "1"; + } + return "0"; + } + }