From 5dbe58c70caab43c9bc618404b06b813a94ae80e Mon Sep 17 00:00:00 2001 From: yxt_djz Date: Sat, 3 Sep 2022 09:19:47 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=91=E8=9D=B6=E6=8E=A5=E5=8F=A3=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E6=9C=BA=E6=9E=84=E7=9A=84=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fin/api/kingdee/FinKingDeeFeign.java | 10 ++-- .../api/kingdee/FinKingDeeFeignFallBack.java | 6 +++ .../fin/biz/kingdee/FinKingDeeFeignRest.java | 9 ++++ .../fin/biz/kingdee/FinKingDeeService.java | 38 +++++++++++++ .../anrui/fin/biz/kingdee/KingDeeSaveSKD.java | 51 +++++++++++++++++- .../kingdee/bdsupplier/BdSupplierService.java | 6 +-- .../OrgOrganizationsService.java | 17 +++++- .../组织机构的参数必填备注.xlsx | Bin 9925 -> 11968 bytes 8 files changed, 128 insertions(+), 9 deletions(-) diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeign.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeign.java index 9c8a06073e..e0e0a7418b 100644 --- a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeign.java +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeign.java @@ -15,10 +15,9 @@ import com.yxt.common.core.result.ResultBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; /** @@ -94,4 +93,9 @@ public interface FinKingDeeFeign { @PostMapping("/draftBdCustomer") @ResponseBody ResultBean> draftBdCustomer(@RequestBody BdCustomer bdCustomer); + + @ApiOperation("使用number查看数据表单") + @GetMapping("/getKingDataInfoByNumber/{formId}/{number}") + @ResponseBody + ResultBean getKingDataInfoByNumber(@PathVariable("formId") String formId, @PathVariable("number") String number); } diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeignFallBack.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeignFallBack.java index 2f5540e463..a6b93a5442 100644 --- a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeignFallBack.java +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeignFallBack.java @@ -13,6 +13,7 @@ import com.yxt.anrui.fin.api.kingdee.stkinstock.StkInStock; import com.yxt.anrui.fin.api.kingdee.stktransferdirect.StkTransferDirect; import com.yxt.common.core.result.ResultBean; +import java.util.HashMap; import java.util.List; public class FinKingDeeFeignFallBack @@ -77,4 +78,9 @@ implements FinKingDeeFeign{ return null; } + @Override + public ResultBean getKingDataInfoByNumber(String formId,String number) { + return null; + } + } diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeFeignRest.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeFeignRest.java index 14638490a4..fbd798fcdb 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeFeignRest.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeFeignRest.java @@ -30,6 +30,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; @Api(tags = "单据调用金蝶的保存接口") @@ -178,4 +179,12 @@ public class FinKingDeeFeignRest implements FinKingDeeFeign { public ResultBean> draftBdCustomer(@RequestBody BdCustomer bdCustomer) { return bdCustomerService.draftBdCustomer(bdCustomer); } + @ApiOperation("使用number查看数据表单") + @GetMapping("/getKingDataInfoByNumber/{formId}/{number}") + @ResponseBody + @Override + public ResultBean getKingDataInfoByNumber(@PathVariable("formId") String formId,@PathVariable("number") String number) { + return bdCustomerService.getKingDataInfoByNumber(formId,number); + } + } diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeService.java index 0fb508dd33..3b42014490 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeService.java @@ -1,11 +1,15 @@ package com.yxt.anrui.fin.biz.kingdee; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.json.JSONString; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.yxt.anrui.fin.api.kingdee.KingDeeBillId; import com.yxt.anrui.fin.api.kingdee.KingDeeResult; import com.yxt.common.core.result.ResultBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import java.lang.reflect.Field; @@ -32,6 +36,26 @@ public class FinKingDeeService { log.info("listResultBean:{}",JSONObject.toJSONString(listResultBean)); return listResultBean; } + /** + * 查看审核金蝶的数据接口 + * @param number + * @return + */ + public ResultBean getKingDeeBillDataByNumber(String formId,String number) { + /* String data="{\"formId\":\""+formId+"\"," + + "\"data\":\"{\\\"CreateOrgId\\\":\\\"0\\\",\\\"Number\\\":\\\""+number+"\\\",\\\"Id\\\":\\\"\\\"}\"}"; + KingDeeParams kdp = getKingDeeParams(formId, data); + log.info("kdp:{}", JSONObject.toJSONString(kdp)); + ResultBean> listResultBean = KingDeeSaveSKD.getKingDeeBillDataByNumber(kdp); + log.info("listResultBean:{}",JSONObject.toJSONString(listResultBean)); + return listResultBean;*/ + String data = getGetKDForNumbers(formId, number); + KingDeeParams kdp = getKingDeeParams(formId, data); + log.info("kdp:{}",JSONObject.toJSONString(kdp)); + ResultBean listResultBean = KingDeeSaveSKD.getKingDeeBillDataByNumber(kdp); + log.info("listResultBean:{}",JSONObject.toJSONString(listResultBean)); + return listResultBean; + } /** * 调用提交金蝶的数据接口 * @param formId @@ -161,6 +185,16 @@ public class FinKingDeeService { } return resultList; } + /** + * 构造查看接口的数据格式 + * @return + */ + public String getGetKDForNumbers(String formId, String Numbers) { + //2.1.CreateOrgId:创建者组织内码,字符串类型(非必录) + //2.2.Numbers:单据编码集合,数组类型,格式:[No1,No2,...](使用编码时必录) + //2.3.Ids:单据内码集合,字符串类型,格式:"Id1,Id2,..."(使用内码时必录) + return "{\"formId\":\""+formId+"\",\"data\":\"{\\\"CreateOrgId\\\":\\\"\\\",\\\"Number\\\":\\\""+Numbers+"\\\",\\\"Id\\\":\\\"\\\"}\"}"; + } /** * 构造提交接口的数据格式 * @param resultBean @@ -216,6 +250,10 @@ public class FinKingDeeService { /*{\"PkIds\":\"0\",\"TOrgIds\":\"\",\"IsAutoSubmitAndAudit\":\"false\"}*/ return "{\"formId\":\""+formId+"\",\"data\":\"{\\\"PkIds\\\":\\\""+s+"\\\",\\\"TOrgIds\\\":\\\""+tOrgIds+"\\\",\\\"IsAutoSubmitAndAudit\\\":\\\"true\\\"}\"}"; } + public ResultBean getKingDataInfoByNumber(String formId,String number) { + ResultBean kingDeeBillDataByNumber = getKingDeeBillDataByNumber(formId, number); + return kingDeeBillDataByNumber; + } /** * 调用金蝶接口的数据格式 */ diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/KingDeeSaveSKD.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/KingDeeSaveSKD.java index 235ae7406e..1ab3504c25 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/KingDeeSaveSKD.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/KingDeeSaveSKD.java @@ -66,6 +66,8 @@ public class KingDeeSaveSKD { private static String Audit_URL = url+"DynamicFormService.Audit.common.kdsvc"; //数据分配接口的地址 private static String Allocate_URL = url+"DynamicFormService.Allocate.common.kdsvc"; + //查看单据接口的地址 + private static String View_URL = url+"DynamicFormService.View.common.kdsvc"; //登录,校验用户的API接口地址 private static String Login_URL = url+"AuthService.ValidateUser.common.kdsvc"; @@ -269,6 +271,50 @@ public class KingDeeSaveSKD { return rb; } + /** + * 查看金蝶数据 + * @param jsonParam + * @return + */ + public static ResultBean getKingDeeBillDataByNumber(FinKingDeeService.KingDeeParams jsonParam) { + ResultBean rb= ResultBean.fireFail(); + // 定义httpClient的实例 + HttpClient httpclient = new DefaultHttpClient(); + /********** 用户登录Begin ************************/ + ResultBean> rb1 = loginKingDeeSystem(httpclient); + if (!rb1.getSuccess()) return rb; + try { + URI save_uri = new URI(View_URL); + HttpPost method = new HttpPost(save_uri); + //采购入库单保存参数 + log.info("jsonParam:{}",JSON.toJSON(jsonParam.getData())); + //StringEntity entity = new StringEntity(jsonParam.getData(), "utf-8"); + StringEntity entity = new StringEntity(jsonParam.getData(), "utf-8"); + log.info(JSON.toJSONString(entity)); + entity.setContentEncoding("UTF-8"); + entity.setContentType("application/json"); + //把成功登录的Session信息传进去,获取连接信息 + method.setHeader(sessionkey, sessionValue); + method.setHeader(aspnetsessionkey, aspnetsessionValue); + //方法参数 + method.setEntity(entity); + HttpResponse result = httpclient.execute(method); + // 请求发送成功,并得到响应 + if (result.getStatusLine().getStatusCode() == 200) { + log.info("请求成功"); + // 读取服务器返回过来的json字符串数据 + String str = EntityUtils.toString(result.getEntity()); + if(StringUtils.isBlank(str)){ + return rb.setMsg("操作失败"); + } + log.info(str); + return rb.success().setData(str); + } + } catch (Exception e) { + e.printStackTrace(); + } + return rb; + } public static ResultBean> loginKingDeeSystem( HttpClient httpclient) { ResultBean > rb= ResultBean.fireFail(); try { @@ -357,10 +403,11 @@ public class KingDeeSaveSKD { JSONObject jr=JSONObject.parseObject(JSON.toJSONString(f)); KingDeeResult kingDeeResult = new KingDeeResult(); kingDeeResult.setDIndex(jr.get("DIndex").toString()); - kingDeeResult.setId(jr.get("Id").toString()); - kingDeeResult.setNumber(jr.get("Number").toString()); + kingDeeResult.setId(jr.get("Id")!=null?jr.get("Id").toString():""); + kingDeeResult.setNumber(jr.get("Number")!=null?jr.get("Number").toString():""); list.add(kingDeeResult); }); return new ResultBean> (aBoolean,"操作成功!","200").setData(list); } + } diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/bdsupplier/BdSupplierService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/bdsupplier/BdSupplierService.java index c7946b3690..6ec3fdc2e5 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/bdsupplier/BdSupplierService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/bdsupplier/BdSupplierService.java @@ -46,7 +46,7 @@ public class BdSupplierService extends FinKingDeeService { String kingDeeData = BdSupplierCastToKingDeeBillFields.getKingDeeData(map_fEntityModel_); ResultBean> resultBean = saveBill(KingDeeBillId.BD_SUPPLIER.getID(), kingDeeData); - ResultBean> resultBean1 = submitKingDeeBillData(KingDeeBillId.BD_CUSTOMER.getID(), resultBean); + ResultBean> resultBean1 = submitKingDeeBillData(KingDeeBillId.BD_SUPPLIER.getID(), resultBean); if(!resultBean1.getSuccess()){ log.info("供应商提交失败!"); return rb.setMsg("供应商提交失败!"); @@ -54,7 +54,7 @@ public class BdSupplierService extends FinKingDeeService { log.info("供应商提交成功!"); //String auditKD = getAuditKD(resultBean,KingDeeBillId.BD_CUSTOMER.getID()); - ResultBean> resultBean2 = auditKingDeeBillData(KingDeeBillId.BD_CUSTOMER.getID(), resultBean); + ResultBean> resultBean2 = auditKingDeeBillData(KingDeeBillId.BD_SUPPLIER.getID(), resultBean); if(!resultBean2.getSuccess()){ log.info("供应商审核失败!"); return rb.setMsg("供应商审核失败!"); @@ -62,7 +62,7 @@ public class BdSupplierService extends FinKingDeeService { log.info("供应商审核成功!"); //String allocate = getAllocate(resultBean1,bdCustomer.getTOrgIds(),KingDeeBillId.BD_CUSTOMER.getID()); - ResultBean> resultBean3 = allocateKingDeeBillData(KingDeeBillId.BD_MATERIAL.getID(),bdSupplier.getTOrgIds(), resultBean1); + ResultBean> resultBean3 = allocateKingDeeBillData(KingDeeBillId.BD_SUPPLIER.getID(),bdSupplier.getTOrgIds(), resultBean1); if(!resultBean3.getSuccess()){ log.info("供应商分配失败!"); return rb.setMsg("供应商分配失败!"); diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/orgorganizations/OrgOrganizationsService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/orgorganizations/OrgOrganizationsService.java index 740c6df856..964801889d 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/orgorganizations/OrgOrganizationsService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/orgorganizations/OrgOrganizationsService.java @@ -1,6 +1,8 @@ package com.yxt.anrui.fin.biz.kingdee.orgorganizations; +import com.alibaba.fastjson.JSONObject; import com.yxt.anrui.fin.api.kingdee.KingDeeBillId; +import com.yxt.anrui.fin.api.kingdee.KingDeeResult; import com.yxt.anrui.fin.api.kingdee.orgorganizations.OrgOrganizations; import com.yxt.anrui.fin.api.kingdee.stktransferdirect.StkTransferDirect; import com.yxt.anrui.fin.biz.kingdee.FinKingDeeService; @@ -26,10 +28,23 @@ public class OrgOrganizationsService extends FinKingDeeService { Map map_fEntityModel_= object2Map(orgOrganizations); //准备 物料列表的数据 ForEntryBill String kingDeeData = OrgOrganizationsCastToKingDeeBillFields.getKingDeeData(map_fEntityModel_); - return saveBill(KingDeeBillId.ORG_ORGANIZATIONS.getID(),kingDeeData); + ResultBean> result = saveBill(KingDeeBillId.ORG_ORGANIZATIONS.getID(), kingDeeData); + if (!result.getSuccess()){ + return result; + } + String number = orgOrganizations.getFNumber(); + ResultBean kingDeeBillDataByNumber = getKingDeeBillDataByNumber(KingDeeBillId.ORG_ORGANIZATIONS.getID(), number); + String data = kingDeeBillDataByNumber.getData(); + JSONObject jsonObject = JSONObject.parseObject(data); + JSONObject result1 = (JSONObject) jsonObject.get("Result"); + JSONObject result2 = (JSONObject) result1.get("Result"); + int Id = (int) result2.get("Id"); + + return kingDeeBillDataByNumber.setData(Id+""); } catch (Exception e) { e.printStackTrace(); } return rb; } } + diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/orgorganizations/组织机构的参数必填备注.xlsx b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/orgorganizations/组织机构的参数必填备注.xlsx index 93ac5c1083774b7a91fc7f3b12a3308e5988b41c..cd8ab096adc3b832c66ce1c94ccfe8a60293b9bc 100644 GIT binary patch delta 4464 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 C`h*Yw delta 2391 zcmV-d38?nKUBykXlmP_*0MZgllbHc4e{^hYq3u9rCkKKP#al?eZN)YXNwnJwco@Ee z7jJv6;cJ+6U7aW%!~dUOe&3g5yef;}1&qxrl_DAu6o3+y%+(@Ace6=2M1gf&NnTV6 zQnUt(#@YE6A6x_P0U*$Xpd9luRoA=$v z_Vab~`L<2)?>v#BF=WC3cOV1*JtjLC9+Ugt<<)G0vY60*NCqM4&*+fR5hLU=!N*p6 zKkI;HEAcNejzcmE37wH1i${!}5|4na@&5Vm*%z|`1F``MlU6lArUL)~%nFme1S@}D zJ2+{RRB@^{RkcZ*RIU4XrZ!1XZQ}un+x_}oAU4oasSj=J%RT4Z3kUG(>ba?tBNdYI zwm>+YpoF$1uUNY)(666&XA6`_McRtgyrl(tp%PuKKYv>FTs+A=r78i2Ru*WlRCk$W zvfR^#$dq@qg^?{64N>qacA4x1C6#{xHFcIxCKp*lSc@#frT7R3-)>n+Z+UrWXsaxV zpfyoYzudD<4s6fWhxjT%dgyhi$1CyHj*NVG_NKmum4ZvYRcXna%$D}H%Vo9<`fSQK zM3KpAhczA>6hxKd>H9wIJDHa4sS0m`@I0exbC8NRw?uytv|gDN zxEI-aRWX=Fz4VEo+X7wV%T0ccV8EpOX0(^ybE3%O1FdPPXa!zDiT1!F=TAEED}*MR z+$3m9QYv<&8(P-|+Tbbp=&w=H&mfVF8vgU3cV~QaFOrIG$)Q#oUjJd0+81bvhS(3@ zf1zx*S5V9>g~AhlP&I4mH+p}hH6RLIC)Eas7WY?LAk#Wii=N8h@|3ez4wl$MtfYgA7lGIu`_0f^3CR>nU}WWrK&!QlJOeAX4H<3b6-l)hvv*_~m5*KGU_UH=EOp$G*L3eBOk zZ+!y*0R9P+uo)VE_5nFk*mb#-HrQL)i7hN>V_~2Vl!x)|sXfx} zj5{;yTu`KPsVI~*kx~kxrBDPS5^5>p(oh=Z$JAqoC;kFwFTN2f1eNkq$r{i3zL|5I zb7r=1VmS;*7o=i>7p)_9-Xg#~;WOSUTCcxWefpS1l&0K&r-9&5v{pb_C)_8WC@7@~ z?&YdzwYBcdIgaw$5K?7}4sc}73K>$3qHH;;BZ2y=4WProc_yDf>V%YWi+Cd9x@aA@ zNW|H>2WEz4dAT_Ah30 z{Q&XJ2mPOawx>}Uo58h%@9v}o0`aeogIXnB8lZpnG0Slao(O~_vehhF)oST@`GxtT zF)XWs>vSRdFBwR33YL-$Z7LOH+>vLWi!mqBtlhclDH;MHxktBZZeQx{ZvC4K7YTrvt@p~ zk8h!oprPELvMEv#Ruo#P1R)%oJ7B9YuXYa#9ZGdFXNNq z1K8!ohCMGN*maO0Q}M%NC)UUEOAvHG+KskY8iS{)d2wOA!C;AW zahN4#Ap)SBFjWcyvDAo~iQ-A(6^wD_j6B1C|G}$rq!`Bl?0OKjYTU-krJSu&jV`Jw zsp2zjFY+2^n$du*LT)^*bb;%VY$*Z{Gn9ls5yH^m1QbV=x>1*6dBv_W3IE^VX=vIL z%I#7!K50*97}CQ`+T%cS6FV01O|MglMWpfm?8LKKQp2Lg_s)X`$S(5$J?%0dc{MG6 zKP(NgS7jCi$q)y8$i_<@X2)@7?k8?wpx6R<;6t#o3|^#Rgy-TNBZ-L4ENN(obxC}x z>C99&EY!FU%URpy*WSvSB>zjwu4yTSbNQU|{T-`u|dvmhm{1p*Kulg}zY0(c&i5GyhQoF0=z zE0P5O0MZglliMp)0{;S&F)Tj;R+DioFapFMlcOv(0_z`>+AJ&^&7rh!eFFdh{s{m8 z6aWAK000000RSKX004HAAuT}-$_@Ykcx*3oba`xLbCcjIAd`