采购订单

This commit is contained in:
xiang2lin 2025-06-19 19:20:08 +08:00
parent b2bf806bb7
commit 7a749fc323
3 changed files with 217 additions and 24 deletions

View File

@ -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采购订单审批事件插件执行成功");
}
}

View File

@ -17,4 +17,11 @@ public interface IPoOrderService {
* @return
*/
JsonResultEntity buildOAParam(JSONObject reqJson);
/**
* OA审批事件
* @param reqJson
* @return
*/
JsonResultEntity approvedEvent(JSONObject reqJson)throws Exception;
}

View File

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