Browse Source

提交保存

ioioio 3 years ago
parent
commit
951fe3f79b
24 changed files with 1362 additions and 9 deletions
  1. 3 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/DeliveryItems.java
  2. 69 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/JdCorps.java
  3. 64 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/JdEmployee.java
  4. 70 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/JdModule.java
  5. 67 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/JdTenant.java
  6. 5 2
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/entity/JdCorps.java
  7. 6 0
      blade-service/blade-deliver-goods/pom.xml
  8. 65 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/TokenRequestQuery.java
  9. 35 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdCorpsMapper.java
  10. 7 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdCorpsMapper.xml
  11. 35 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdEmployeeMapper.java
  12. 7 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdEmployeeMapper.xml
  13. 35 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdModuleMapper.java
  14. 6 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdModuleMapper.xml
  15. 35 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdTenantMapper.java
  16. 7 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdTenantMapper.xml
  17. 472 7
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  18. 109 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/tool/JdyTool.java
  19. 6 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/vojo/JDYResult.java
  20. 19 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/vojo/JDYassist.java
  21. 29 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/vojo/JDYentries.java
  22. 19 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/vojo/JDYitems.java
  23. 190 0
      blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java
  24. 2 0
      blade-service/trade-finance/src/main/java/org/springblade/finance/tool/JdyTool.java

+ 3 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/DeliveryItems.java

@@ -314,5 +314,8 @@ public class DeliveryItems implements Serializable {
 	@ApiModelProperty(value = "到货数量")
 	private BigDecimal arrivalQuantity;
 
+	//采购总价
+	private BigDecimal purchaseTotalAmount;
+
 
 }

+ 69 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/JdCorps.java

@@ -0,0 +1,69 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.deliver.goods.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.ibatis.type.Alias;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author BladeX
+ * @since 2022-01-20
+ */
+@Data
+@Alias("JdCorps1")
+@ApiModel(value = "JdCorps对象", description = "JdCorps对象")
+public class JdCorps implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	* 供应商名称
+	*/
+		@ApiModelProperty(value = "供应商名称")
+		private String corpsName;
+	/**
+	* 供应商编号
+	*/
+		@ApiModelProperty(value = "供应商编号")
+		private String corpsCode;
+	/**
+	* 所属账套id
+	*/
+		@ApiModelProperty(value = "所属账套id")
+		private String accountId;
+	/**
+	* 所属账套
+	*/
+		@ApiModelProperty(value = "所属账套")
+		private String accountName;
+
+		@ApiModelProperty(value = "租户id")
+		private String tenantId;
+
+		@ApiModelProperty(value = "1.客户 2.供应商 3.业务员 4.仓库")
+		private Integer corpsType;
+
+
+}

+ 64 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/JdEmployee.java

@@ -0,0 +1,64 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.deliver.goods.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.ibatis.type.Alias;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author BladeX
+ * @since 2022-01-20
+ */
+@Data
+@Alias("JdEmployee1")
+@ApiModel(value = "JdEmployee对象", description = "JdEmployee对象")
+public class JdEmployee implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	* 业务员
+	*/
+		@ApiModelProperty(value = "业务员")
+		private String employeeName;
+	/**
+	* 业务员编码
+	*/
+		@ApiModelProperty(value = "业务员编码")
+		private String employeeCode;
+	/**
+	* 所属账套id
+	*/
+		@ApiModelProperty(value = "所属账套id")
+		private String accountId;
+	/**
+	* 所属账套
+	*/
+		@ApiModelProperty(value = "所属账套")
+		private String accountName;
+
+
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+}

+ 70 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/JdModule.java

@@ -0,0 +1,70 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.deliver.goods.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.ibatis.type.Alias;
+
+import java.io.Serializable;
+
+/**
+ * 租户jd模块表实体类
+ *
+ * @author BladeX
+ * @since 2022-01-20
+ */
+@Data
+@Alias("JdModule1")
+@ApiModel(value = "JdModule对象", description = "租户jd模块表")
+public class JdModule implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	* 模块名称
+	*/
+		@ApiModelProperty(value = "模块名称")
+		private String module;
+	/**
+	* d 或 c
+	*/
+		@ApiModelProperty(value = "d 或 c")
+		private String dc;
+	/**
+	* 科目编码
+	*/
+		@ApiModelProperty(value = "科目编码")
+		private String projectCode;
+	/**
+	* 所属账套id
+	*/
+		@ApiModelProperty(value = "所属账套id")
+		private String accountId;
+	/**
+	* 所属账套
+	*/
+		@ApiModelProperty(value = "所属账套")
+		private String accountName;
+
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
+
+}

+ 67 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/JdTenant.java

@@ -0,0 +1,67 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.deliver.goods.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.ibatis.type.Alias;
+
+import java.io.Serializable;
+
+/**
+ * 租户jd配置信息表实体类
+ *
+ * @author BladeX
+ * @since 2022-01-20
+ */
+@Data
+@Alias("JdTenant1")
+@ApiModel(value = "JdTenant对象", description = "租户jd配置信息表")
+public class JdTenant implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+
+		@ApiModelProperty(value = "租户id")
+		private String tenantId;
+		/**
+		* 租户名称
+		*/
+		@ApiModelProperty(value = "租户名称")
+		private String tenantName;
+		/**
+		* 0.未启动 1启动
+		*/
+		@ApiModelProperty(value = "0.未启动 1启动")
+		private Boolean isEnable;
+
+		private String accountId;
+		private String accountName;
+		private String groupName;
+
+		private String clientId;
+		private String clientSecret;
+		private String username;
+		private String password;
+
+
+
+
+
+}

+ 5 - 2
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/entity/JdCorps.java

@@ -56,8 +56,11 @@ public class JdCorps implements Serializable {
 		@ApiModelProperty(value = "所属账套")
 		private String accountName;
 
-	@ApiModelProperty(value = "租户id")
-	private String tenantId;
+		@ApiModelProperty(value = "租户id")
+		private String tenantId;
+
+		@ApiModelProperty(value = "1.客户 2.供应商 3.业务员 4.仓库")
+		private Integer corpsType;
 
 
 }

+ 6 - 0
blade-service/blade-deliver-goods/pom.xml

@@ -78,6 +78,12 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.github.kevinsawicki</groupId>
+            <artifactId>http-request</artifactId>
+            <version>5.6</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 65 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/TokenRequestQuery.java

@@ -0,0 +1,65 @@
+// This file is auto-generated, don't edit it. Thanks.
+package org.springblade.deliver.goods;
+
+import com.aliyun.tea.NameInMap;
+import com.aliyun.tea.TeaModel;
+import com.aliyun.tea.Validation;
+
+/**
+* 登录query
+**/
+public class TokenRequestQuery extends TeaModel {
+    @NameInMap("client_id")
+    @Validation(required = true)
+    public String clientId;
+
+    @NameInMap("client_secret")
+    @Validation(required = true)
+    public String clientSecret;
+
+    @NameInMap("username")
+    @Validation(required = true)
+    public String username;
+
+    @NameInMap("password")
+    @Validation(required = true)
+    public String password;
+
+    public static TokenRequestQuery build(java.util.Map<String, ?> map) throws Exception {
+        TokenRequestQuery self = new TokenRequestQuery();
+        return TeaModel.build(map, self);
+    }
+
+    public TokenRequestQuery setClientId(String clientId) {
+        this.clientId = clientId;
+        return this;
+    }
+    public String getClientId() {
+        return this.clientId;
+    }
+
+    public TokenRequestQuery setClientSecret(String clientSecret) {
+        this.clientSecret = clientSecret;
+        return this;
+    }
+    public String getClientSecret() {
+        return this.clientSecret;
+    }
+
+    public TokenRequestQuery setUsername(String username) {
+        this.username = username;
+        return this;
+    }
+    public String getUsername() {
+        return this.username;
+    }
+
+    public TokenRequestQuery setPassword(String password) {
+        this.password = password;
+        return this;
+    }
+    public String getPassword() {
+        return this.password;
+    }
+
+}

+ 35 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdCorpsMapper.java

@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.deliver.goods.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.deliver.goods.entity.JdCorps;
+
+
+import java.util.List;
+
+/**
+ *  Mapper 接口
+ *
+ * @author BladeX
+ * @since 2022-01-20
+ */
+public interface JdCorpsMapper extends BaseMapper<JdCorps> {
+
+
+
+}

+ 7 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdCorpsMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.deliver.goods.mapper.JdCorpsMapper">
+
+
+
+</mapper>

+ 35 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdEmployeeMapper.java

@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.deliver.goods.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.deliver.goods.entity.JdEmployee;
+
+
+import java.util.List;
+
+/**
+ *  Mapper 接口
+ *
+ * @author BladeX
+ * @since 2022-01-20
+ */
+public interface JdEmployeeMapper extends BaseMapper<JdEmployee> {
+
+
+
+}

+ 7 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdEmployeeMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.deliver.goods.mapper.JdEmployeeMapper">
+
+
+
+</mapper>

+ 35 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdModuleMapper.java

@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.deliver.goods.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.deliver.goods.entity.JdModule;
+
+
+import java.util.List;
+
+/**
+ * 租户jd模块表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2022-01-20
+ */
+public interface JdModuleMapper extends BaseMapper<JdModule> {
+
+
+
+}

+ 6 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdModuleMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.deliver.goods.mapper.JdModuleMapper">
+
+
+</mapper>

+ 35 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdTenantMapper.java

@@ -0,0 +1,35 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.deliver.goods.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.deliver.goods.entity.JdTenant;
+
+
+import java.util.List;
+
+/**
+ * 租户jd配置信息表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2022-01-20
+ */
+public interface JdTenantMapper extends BaseMapper<JdTenant> {
+
+
+
+}

+ 7 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/mapper/JdTenantMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.deliver.goods.mapper.JdTenantMapper">
+
+
+
+</mapper>

+ 472 - 7
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -16,12 +16,16 @@
  */
 package org.springblade.deliver.goods.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.apache.poi.ss.formula.functions.T;
 import org.springblade.client.entity.BasicCorpsProfitChange;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.StorageDesc;
@@ -31,18 +35,20 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.deliver.goods.entity.Delivery;
-import org.springblade.deliver.goods.entity.DeliveryFees;
-import org.springblade.deliver.goods.entity.DeliveryFiles;
-import org.springblade.deliver.goods.entity.DeliveryItems;
+import org.springblade.deliver.goods.entity.*;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
 import org.springblade.deliver.goods.enums.DeliveryStatusEnum;
-import org.springblade.deliver.goods.mapper.DeliveryItemsMapper;
+import org.springblade.deliver.goods.mapper.*;
 import org.springblade.deliver.goods.service.IDeliveryItemsService;
+import org.springblade.deliver.goods.tool.JdyTool;
 import org.springblade.deliver.goods.vo.DeliveryVO;
-import org.springblade.deliver.goods.mapper.DeliveryMapper;
 import org.springblade.deliver.goods.service.IDeliveryService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.deliver.goods.vojo.JDYassist;
+import org.springblade.deliver.goods.vojo.JDYentries;
+import org.springblade.deliver.goods.vojo.JDYitems;
+
+
 import org.springblade.mocha.entity.BusinessOverpaymentItem;
 import org.springblade.mocha.entity.Overpayment;
 import org.springblade.mocha.feign.IBusinessOverpaymentClient;
@@ -58,8 +64,17 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.net.ssl.*;
+import java.io.*;
 import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 发货通知单 服务实现类
@@ -82,6 +97,19 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	private ICorpsProfitChangeClient corpsProfitChangeClient;
 	private IOrderDescClient orderDescClient;
 	private IBusinessOverpaymentClient iBusinessOverpaymentClient;
+	private static final String DEFAULT_CHARSET = "UTF-8";
+
+	private static final String METHOD_POST = "POST";
+
+	private JdTenantMapper jdTenantMapper;
+
+	private JdModuleMapper moduleMapper;
+
+	private JdCorpsMapper corpsMapper;
+
+	private DeliveryItemsMapper deliveryItemsMapper;
+
+
 
 	private final DeliveryItemsServiceImpl iDeliveryItemsService;
 
@@ -340,13 +368,57 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		{
 			throw new SecurityException("未查到相关数据,操作失败");
 		}
+
+		Long corpId = select.getCorpId();
+
+        LambdaQueryWrapper<DeliveryItems> deliveryItemsLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		deliveryItemsLambdaQueryWrapper
+			.eq(DeliveryItems::getPid,deliveryId)
+			.eq(DeliveryItems::getIsDeleted,0);
+		List<DeliveryItems> deliveryItems = deliveryItemsMapper.selectList(deliveryItemsLambdaQueryWrapper);
+		BigDecimal pricetotal = deliveryItems.stream().filter(e -> e.getPrice() != null).map(DeliveryItems::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+		String acoount=CollectionUtils.isEmpty(deliveryItems)?"0":pricetotal.toString();
+		String corpName=null;
+		String orderNo=select.getOrderNo();
+		String wareHouse=null;
+		R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(corpId);
+		if(corpMessage.isSuccess()&&corpMessage.getData()!=null)
+		{
+			corpName=corpMessage.getData().getCname();
+		}
+		//仓库信息
+		StorageDesc storageDesc = iStorageClient.findById(select.getStorageId());
+		if(storageDesc!=null)
+		{
+			wareHouse=storageDesc.getCname();
+		}
+
+
+		Long storageId = select.getStorageId();
+        //收货凭证
+		if (select.getTenantId().equals("681169"))
+		{
+			//todo
+			try
+			{
+				String accountName="金蝶开发者测试账套";
+				//测试账套-收货生成凭证
+				this.testTakeGoodsSaveVoucher(accountName,corpName,wareHouse,acoount,orderNo);
+			}
+			catch (Exception exception)
+			{
+				throw new SecurityException(exception.getMessage());
+			}
+		}
+
+
 		if(select.getDeliveryStatus()==null||select.getDeliveryStatus().equals("已收货"))
 		{
 			throw new SecurityException("此单据已收货或者不存在,禁止重复操作");
 		}
 
 
-		Long corpId = select.getCorpId();
+
 
 		    //保存收货单主表 和 收货单明细
 	       	this.submitDelivery(delivery);
@@ -657,4 +729,397 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		}
 	}
 
+
+	//收货生成凭证
+	public void testTakeGoodsSaveVoucher(String accountName,String copsName,String warehouse ,String acoount,String orderNo) throws Exception
+	{
+
+		//非达沃特用户直接返回
+		if(!AuthUtil.getTenantId().equals("681169"))
+		{
+			return;
+		}
+		//获取token
+		String token = this.getAccountGroupRequest();
+		//获取套账url
+		String getAccountUrl="https://api.kingdee.com/jdy/sys/accountGroup?access_token="+token;
+		Map<String, String> urlParams=new HashMap<>();
+		String result = this.doPost(getAccountUrl, urlParams);
+		JdyTool.getAccountGroup getAccountGroup = JSONObject.parseObject(result, JdyTool.getAccountGroup.class);
+
+		List<JdyTool.AccountGroup> list=new ArrayList<>();
+		if(!CollectionUtils.isNotEmpty(getAccountGroup.getData()))
+		{
+			throw new SecurityException("操作失败,暂无账套信息");
+		}
+		//获取此账号下,全部账套
+		getAccountGroup.getData().forEach(e->{
+			list.addAll(e.getAccountGroups());
+		});
+		//匹配账套
+		List<JdyTool.AccountGroup> groupList = list.stream().filter(e -> e.getAccountName().equals(accountName)).collect(Collectors.toList());
+		if(!CollectionUtils.isNotEmpty(groupList))
+		{
+			throw new SecurityException("未找到: "+accountName+" 的套账信息");
+		}
+		JdyTool.AccountGroup group = groupList.get(0);
+
+
+		//1.获取套账信息
+		LambdaQueryWrapper<JdTenant> jdTenantLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		jdTenantLambdaQueryWrapper
+			.eq(JdTenant::getIsEnable,1)
+			.eq(JdTenant::getTenantId,AuthUtil.getTenantId())
+			.eq(JdTenant::getAccountName,accountName);
+		JdTenant jdTenant = jdTenantMapper.selectOne(jdTenantLambdaQueryWrapper);
+		if(jdTenant==null)
+		{
+
+			return;
+		}
+		//2.收货,组装model,保存凭证
+		toTakeJinDie(orderNo,acoount,copsName,warehouse,jdTenant.getAccountId(),group.getGroupName(),jdTenant);
+	}
+
+
+	//金蝶保存凭证测试-销售生成凭证
+	public void toTakeJinDie(String orderNo,String acoount,String copsName,String warehouse,String accountId,String groupName,JdTenant jdTenant) {
+		//不是某一家 直接返回
+        if (!AuthUtil.getTenantId().equals("681169"))
+        {
+			return;
+		}
+
+		JDYitems item = new JDYitems();
+		item.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+		List<JDYentries> entriesList = new ArrayList<>();
+		List<JDYitems> jdYitems = new ArrayList<>();
+
+		//财务借方
+		JDYentries d = new JDYentries();
+		d.setDc("1");
+
+		LambdaQueryWrapper<JdModule> dLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		dLambdaQueryWrapper
+			.eq(JdModule::getAccountId,accountId)
+			.eq(JdModule::getModule,"收货")
+			.eq(JdModule::getDc,"1")
+			.last("limit 1")
+			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
+		JdModule dModule = moduleMapper.selectOne(dLambdaQueryWrapper);
+		if(dModule==null)
+		{
+			throw new SecurityException("获取销售订单科目号失败");
+		}
+
+	    d.setExplanation(orderNo + "采购入库");
+		d.setAccount_number(dModule.getProjectCode());
+		d.setDebitamount(acoount);
+
+
+		//===========辅助核算=================
+		List<JDYassist> dList=new ArrayList<>();
+
+
+		warehouse="测试仓库";//具体到时候用哪个,需要关联查询传参,今天先用测试的
+		LambdaQueryWrapper<JdCorps> corpsQueryWrapper=new LambdaQueryWrapper<>();
+		corpsQueryWrapper
+			.eq(JdCorps::getCorpsType,4)
+			.eq(JdCorps::getAccountId,accountId)
+			.eq(JdCorps::getTenantId,AuthUtil.getTenantId())
+			.last("limit 1")
+			.eq(JdCorps::getCorpsName,warehouse);
+		JdCorps jdCorps = corpsMapper.selectOne(corpsQueryWrapper);
+
+		JDYassist jdYassist=new JDYassist();
+		jdYassist.setType("bd_store");
+		if(jdCorps!=null)
+		{
+			jdYassist.setNumber(jdCorps.getCorpsCode());
+		}
+		dList.add(jdYassist);
+		d.setAssist(dList);
+		//===========辅助核算=================
+		entriesList.add(d);
+
+
+
+		//财务贷方
+		JDYentries c = new JDYentries();
+		c.setDc("-1");
+
+		LambdaQueryWrapper<JdModule> cLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		cLambdaQueryWrapper
+			.eq(JdModule::getAccountId,accountId)
+			.eq(JdModule::getModule,"收货")
+			.eq(JdModule::getDc,"-1")
+			.last("limit 1")
+			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
+		JdModule cModule = moduleMapper.selectOne(cLambdaQueryWrapper);
+		if(cModule==null)
+		{
+			throw new SecurityException("获取销售订单科目号失败");
+		}
+
+		c.setExplanation(orderNo +"采购入库");
+		c.setAccount_number(cModule.getProjectCode());
+		c.setCreditamount(acoount);
+
+
+		//===========辅助核算=================
+		List<JDYassist> cList=new ArrayList<>();
+
+
+		copsName="测试供应商";//具体到时候用哪个,需要关联查询传参,今天先用测试的
+		LambdaQueryWrapper<JdCorps> corpsQueryWrapper2=new LambdaQueryWrapper<>();
+		corpsQueryWrapper2
+			.eq(JdCorps::getCorpsType,2)
+			.eq(JdCorps::getAccountId,accountId)
+			.eq(JdCorps::getTenantId,AuthUtil.getTenantId())
+			.last("limit 1")
+			.eq(JdCorps::getCorpsName,copsName);
+		JdCorps jdCorps2 = corpsMapper.selectOne(corpsQueryWrapper2);
+
+		JDYassist jdYassist2=new JDYassist();
+		jdYassist2.setType("bd_supplier");
+		if(jdCorps!=null)
+		{
+			jdYassist2.setNumber(jdCorps2.getCorpsCode());
+		}
+		cList.add(jdYassist2);
+		c.setAssist(cList);
+		//===========辅助核算=================
+		entriesList.add(c);
+
+
+		//组装数据
+		item.setEntries(entriesList);
+		jdYitems.add(item);
+		try {
+			String token = this.getAccountGroupRequest();
+			String saveUrl="http://api.kingdee.com/jdy/gl/voucher_save?access_token="+token;
+			JdyTool.testSaveVoucher(saveUrl,accountId,groupName,jdYitems);
+		} catch (Exception exception) {
+			throw new SecurityException("操作失败,保存金蝶错误:"+exception.getMessage());
+		}
+
+	}
+
+
+
+
+	//测试获取AccountGroupRequest
+	public String  getAccountGroupRequest() throws Exception
+	{
+		//校验当前租户配置,如果存在配置,返回token
+		LambdaQueryWrapper<JdTenant> jdTenantLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		jdTenantLambdaQueryWrapper
+			.eq(JdTenant::getTenantId,AuthUtil.getTenantId())
+			.eq(JdTenant::getIsEnable,1);
+		JdTenant jdTenant = jdTenantMapper.selectOne(jdTenantLambdaQueryWrapper);
+		if(jdTenant==null)
+		{
+			throw new SecurityException("当前租户未配置凭证信息");
+		}
+		//获取测试账套token的url
+		//String getTokenUrl="https://api.kingdee.com/auth/user/access_token";
+		String getTokenUrl="https://api.kingdee.com/auth/user/access_token?client_id=" +jdTenant.getClientId()+
+			"&client_secret=" +jdTenant.getClientSecret()+
+			"&username=" +jdTenant.getUsername()+
+			"&password="+jdTenant.getPassword();
+		Map<String, String> urlParams=new HashMap<>();
+      /*  urlParams.put("clientId",jdTenant.getClientId());
+		urlParams.put("client_secret",jdTenant.getClientSecret());
+		urlParams.put("username",jdTenant.getUsername());
+		urlParams.put("password",jdTenant.getPassword());*/
+
+		String result = this.doGet(getTokenUrl, urlParams);
+		tokenDTO tokenDTO = JSONObject.parseObject(result, tokenDTO.class);
+		if(tokenDTO.errcode==1006)
+		{
+			throw new SecurityException("当前密码错误次数超过限定值");
+		}
+		String accessToken = tokenDTO.getData().getAccess_token();
+		return accessToken;
+	}
+
+	public  String doGet(String url, Map<String, String> urlParams)
+		throws IOException {
+		if (isEmpty(url)) {
+			throw new IllegalArgumentException("The parameter 'url' can not be null or blank.");
+		}
+		url += buildQuery(urlParams, "UTF-8");
+		HttpURLConnection conn = getConnection(new URL(url), "GET");
+		String s = getResponseAsString(conn);
+		return s;
+	}
+
+	public  String doPost(String url, Map<String, String> urlParams) throws IOException {
+		if (isEmpty(url)) {
+			throw new IllegalArgumentException("The parameter 'url' can not be null or blank.");
+		}
+		url += buildQuery(urlParams, DEFAULT_CHARSET);
+		HttpURLConnection conn = getConnection(new URL(url), METHOD_POST);
+	/*	conn.setConnectTimeout(connectTimeOut);
+		conn.setReadTimeout(readTimeOut);
+		conn.getOutputStream().write(requestJson.getBytes(DEFAULT_CHARSET));*/
+
+		String s = getResponseAsString(conn);
+		return s;
+	}
+
+
+
+	private  boolean isEmpty(String str) {
+		return str == null || str.trim().length() == 0;
+	}
+
+
+
+
+	public  String buildQuery(Map<String, String> params, String charset) throws UnsupportedEncodingException {
+		if (params == null || params.isEmpty()) {
+			return "";
+		}
+		StringBuilder sb = new StringBuilder();
+		boolean first = true;
+		for (Map.Entry<String, String> entry : params.entrySet()) {
+			if (first) {
+				sb.append("?");
+				first = false;
+			} else {
+				sb.append("&");
+			}
+			String key = entry.getKey();
+			String value = entry.getValue();
+			if (areNotEmpty(key, value)) {
+				sb.append(key).append("=").append(URLEncoder.encode(value, charset));
+			}
+		}
+		return sb.toString();
+
+	}
+
+
+
+
+	public  boolean areNotEmpty(String... values) {
+		if (values == null || values.length == 0) {
+			return false;
+		}
+
+		for (String value : values) {
+			if (isEmpty(value)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private  HttpURLConnection getConnection(URL url, String method)
+		throws IOException {
+
+		HttpURLConnection conn;
+		if ("https".equals(url.getProtocol())) {
+			SSLContext ctx;
+			try {
+				ctx = SSLContext.getInstance("TLS");
+				ctx.init(new KeyManager[0], new TrustManager[] { new DefaultTrustManager() },
+					new SecureRandom());
+			} catch (Exception e) {
+				throw new IOException(e);
+			}
+			HttpsURLConnection connHttps = (HttpsURLConnection) url.openConnection();
+			connHttps.setSSLSocketFactory(ctx.getSocketFactory());
+			connHttps.setHostnameVerifier(new HostnameVerifier() {
+
+				public boolean verify(String hostname, SSLSession session) {
+					return true;// 默认都认证通过
+				}
+			});
+			conn = connHttps;
+		} else {
+			conn = (HttpURLConnection) url.openConnection();
+		}
+		conn.setRequestMethod(method);
+		conn.setDoInput(true);
+		conn.setDoOutput(true);
+		conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+		conn.setRequestProperty("Connection", "Keep-Alive");
+		return conn;
+
+	}
+
+	private static class DefaultTrustManager implements X509TrustManager {
+
+		public X509Certificate[] getAcceptedIssuers() {
+			return null;
+		}
+
+		public void checkClientTrusted(X509Certificate[] cert, String oauthType)
+			throws java.security.cert.CertificateException {
+		}
+
+		public void checkServerTrusted(X509Certificate[] cert, String oauthType)
+			throws java.security.cert.CertificateException {
+		}
+	}
+
+
+	private  String getResponseAsString(HttpURLConnection conn) throws IOException {
+		InputStream es = conn.getErrorStream();
+		if (es == null) {
+			return getStreamAsString(conn.getInputStream(), "UTF-8");
+		} else {
+			String msg = getStreamAsString(es, "UTF-8");
+			if (isEmpty(msg)) {
+				throw new IOException(conn.getResponseCode() + " : " + conn.getResponseMessage());
+			} else {
+				throw new IOException(msg);
+			}
+		}
+
+	}
+
+	private  String getStreamAsString(InputStream input, String charset) throws IOException {
+		StringBuilder sb = new StringBuilder();
+		BufferedReader bf = null;
+		try {
+			bf = new BufferedReader(new InputStreamReader(input, charset));
+			String str;
+			while ((str = bf.readLine()) != null) {
+				sb.append(str);
+			}
+			return sb.toString();
+		} finally {
+			if (bf != null) {
+				bf.close();
+			}
+		}
+
+	}
+	@Data
+	public static class tokenDTO
+	{
+		private Long errcode;
+
+		private String description;
+
+		private tokenData data;
+	}
+
+	@Data
+	public static class tokenData
+	{
+		private String access_token;
+		private String avatar;
+		private String expires;
+		private String expires_in;
+		private String gender;
+		private String nickname;
+		private String uid;
+
+
+	}
+
 }

+ 109 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/tool/JdyTool.java

@@ -0,0 +1,109 @@
+package org.springblade.deliver.goods.tool;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import com.github.kevinsawicki.http.HttpRequest;
+import org.springblade.deliver.goods.vojo.JDYitems;
+
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 金蝶测试demo, 如果需要正式的,则需要替换
+ * */
+@Slf4j
+public class JdyTool
+{
+
+	//测试-调用金蝶云官方账号的保存
+	public static String testSaveVoucher (String url, String accountId, String groupName, List<JDYitems> jdYitems) throws Exception
+	{
+		HttpRequest httpRequest = new HttpRequest(url,"POST");
+		httpRequest.header("accountId",accountId);
+		httpRequest.header("charset","utf-8");
+		httpRequest.header("groupName",groupName);
+		httpRequest.header("Content-Type","application/json");
+		JSONObject data=new JSONObject();
+		data.put("items",jdYitems);
+		String jsonString = JSON.toJSONString(jdYitems);
+		httpRequest.send(data.toJSONString());
+
+
+		String body = httpRequest.body().toString();
+		log.info("请求结果:"+body);
+		//获取返回对象
+		JDYSaveResponse  saveResponse = JSONObject.parseObject(body, JDYSaveResponse.class);
+		log.info("请求结果结果:"+saveResponse.getSuccess());
+		log.info("请求结果状态码:"+saveResponse.getErrorCode());
+		/*log.info("请求返回体:"+saveResponse.toString());*/
+		//获取主表id
+		List<String> successPkIds = saveResponse.getData().get(0).getSuccessPkIds();
+		/*System.out.println("请求body===="+httpRequest.body().toString());
+		JSONObject result = JSONObject.parseObject(httpRequest.body());
+		return result.toJSONString();*/
+		return successPkIds.toString().replace("[","").replace("]","");
+	}
+
+    @Data
+	public static class JDYSaveResponse implements Serializable
+	{
+		private Boolean success;
+		private Boolean reachPlugin;
+		private List<SaveResponseData> data;
+		private String errorCode;
+	}
+
+
+	@Data
+	public static class SaveResponseData implements Serializable
+	{
+
+		public List<String> successPkIds;
+
+		public Boolean success;
+
+		public List<com.jdy.v7sdk.business.models.errorInfo> errorInfo;
+
+		public String message;
+
+		public String errorLevel;
+	}
+
+	@Data
+	public static  class  getAccountGroup implements Serializable
+	{
+		private Boolean success;
+		private String errorCode;
+		private String message;
+		private List<AccountGroups> Data;
+	}
+
+	@Data
+	public static class AccountGroups implements Serializable
+	{
+		private String serviceId;
+		private String serviceName;
+		private String serviceAddr;
+		private List<AccountGroup> accountGroups;
+	}
+
+	@Data
+	public static class AccountGroup implements Serializable
+	{
+		private String accountName;
+		private String accountId;
+		private String enable;
+		private String groupId;
+		private String groupName;
+	}
+
+
+
+
+
+
+}
+

+ 6 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/vojo/JDYResult.java

@@ -0,0 +1,6 @@
+package org.springblade.deliver.goods.vojo;
+
+public class JDYResult
+{
+
+}

+ 19 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/vojo/JDYassist.java

@@ -0,0 +1,19 @@
+package org.springblade.deliver.goods.vojo;
+
+import lombok.Data;
+
+/**
+ * 金蝶测试类-辅助核算列表对象
+ * */
+@Data
+public class JDYassist
+{
+	private  String type;
+
+	private  String bd_auxinfo_type_id;
+
+	private  String  id;
+
+	private String number;
+
+}

+ 29 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/vojo/JDYentries.java

@@ -0,0 +1,29 @@
+package org.springblade.deliver.goods.vojo;
+
+import lombok.Data;
+
+import java.util.List;
+
+//分录列表
+
+/**
+ * 金蝶测试类-分录列表
+ * */
+@Data
+public class JDYentries
+{
+	//借贷方向 (1:借 ,-1:贷)
+	private String dc;
+	//摘要: 类似于备注
+	private String explanation;
+	//借方金额(本位币)
+	private String debitamount;
+	//贷方金额(本位币)
+	private String creditamount;
+	//科目id(必填)
+	private String account_id;
+	//科目编码
+	private String account_number;
+	//辅助核算列表
+	private List<JDYassist> assist;
+}

+ 19 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/vojo/JDYitems.java

@@ -0,0 +1,19 @@
+package org.springblade.deliver.goods.vojo;
+
+import lombok.Data;
+
+import java.util.List;
+
+//凭证列表对象
+
+/**
+ * 金蝶测试类-凭证列表
+ * */
+@Data
+public class JDYitems
+{
+	//凭证日期 YYYY-MM-DD形式
+	private  String date;
+	//分录列表
+	private List<JDYentries> entries;
+}

+ 190 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -262,6 +262,16 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 						//采购付款-保存凭证
 						if(settlement.getSettlementType()==1 && settlement.getBillType().equals("付费"))
 						{
+							try
+							{
+								String accountName="金蝶开发者测试账套";
+								//测试账套-销售保存凭证
+								this.testPurchaseSaveVoucher(accountName,corpsName,settlement.getAmount().toString());
+							}
+							catch (Exception exception)
+							{
+								throw new SecurityException(exception.getMessage());
+							}
 
 						}
 					}
@@ -1244,6 +1254,113 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		invoiceItem.setCreateUser(AuthUtil.getUserId());
 		invoiceItemMapper.updateById(invoiceItem);
 	}
+	//金蝶保存凭证测试-采购付款生成凭证
+	public void toPurchaseJinDie(String Account,String corpName,String accountId,String groupName,JdTenant jdTenant)
+	{
+		JDYitems item = new JDYitems();
+		item.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+		List<JDYentries> entriesList = new ArrayList<>();
+		List<JDYitems> jdYitems = new ArrayList<>();
+
+		//财务借方
+		JDYentries d = new JDYentries();
+		d.setDc("1");
+		LambdaQueryWrapper<JdModule> dLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		dLambdaQueryWrapper
+			.eq(JdModule::getAccountId,accountId)
+			.eq(JdModule::getModule,"采购付款")
+			.eq(JdModule::getDc,"1")
+			.last("limit 1")
+			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
+		JdModule dModule = moduleMapper.selectOne(dLambdaQueryWrapper);
+		if(dModule==null)
+		{
+			throw new SecurityException("获取采购订单科目号失败");
+		}
+		d.setExplanation("供应商付款-"+ corpName);
+		d.setAccount_number(dModule.getProjectCode());
+		d.setDebitamount(Account);
+		entriesList.add(d);
+
+		//财务贷方
+		JDYentries c = new JDYentries();
+		c.setDc("-1");
+
+		LambdaQueryWrapper<JdModule> cLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		cLambdaQueryWrapper
+			.eq(JdModule::getAccountId,accountId)
+			.eq(JdModule::getModule,"采购付款")
+			.eq(JdModule::getDc,"-1")
+			.last("limit 1")
+			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
+		JdModule cModule = moduleMapper.selectOne(cLambdaQueryWrapper);
+		if(cModule==null)
+		{
+			throw new SecurityException("获取采购订单科目号失败");
+		}
+		c.setExplanation("供应商付款-"+ corpName);
+		c.setAccount_number(cModule.getProjectCode());
+		c.setCreditamount(Account);
+
+
+		//===========辅助核算=================
+		List<JDYassist> cList=new ArrayList<>();
+
+		//查询业务员
+		String jdCorpName="测试业务员";//具体到时候用哪个客户,需要关联查询传参,今天先用测试的
+		LambdaQueryWrapper<JdCorps> corpsQueryWrapper=new LambdaQueryWrapper<>();
+		corpsQueryWrapper
+			.eq(JdCorps::getCorpsType,3)
+			.eq(JdCorps::getAccountId,accountId)
+			.eq(JdCorps::getTenantId,AuthUtil.getTenantId())
+			.last("limit 1")
+			.eq(JdCorps::getCorpsName,jdCorpName);
+		JdCorps jdCorps = corpsMapper.selectOne(corpsQueryWrapper);
+
+		JDYassist jdYassist=new JDYassist();
+		jdYassist.setType("bd_employee");
+		if(jdCorps!=null)
+		{
+			jdYassist.setNumber(jdCorps.getCorpsCode());
+		}
+		cList.add(jdYassist);
+
+
+		//查询供应商
+		String jdCorpName2="测试供应商";//具体到时候用哪个客户,需要关联查询传参,今天先用测试的
+		LambdaQueryWrapper<JdCorps> corpsQueryWrapper2=new LambdaQueryWrapper<>();
+		corpsQueryWrapper2
+			.eq(JdCorps::getCorpsType,2)
+			.eq(JdCorps::getAccountId,accountId)
+			.eq(JdCorps::getTenantId,AuthUtil.getTenantId())
+			.last("limit 1")
+			.eq(JdCorps::getCorpsName,jdCorpName2);
+		JdCorps jdCorps2 = corpsMapper.selectOne(corpsQueryWrapper2);
+
+		JDYassist jdYassist2=new JDYassist();
+		jdYassist2.setType("bd_supplier");
+		if(jdCorps2!=null)
+		{
+			jdYassist2.setNumber(jdCorps2.getCorpsCode());
+		}
+		cList.add(jdYassist2);
+		c.setAssist(cList);
+		//===========辅助核算=================
+		entriesList.add(c);
+
+		//组装数据
+		item.setEntries(entriesList);
+		jdYitems.add(item);
+		try {
+			String token = this.getAccountGroupRequest();
+			String saveUrl="http://api.kingdee.com/jdy/gl/voucher_save?access_token="+token;
+			JdyTool.testSaveVoucher(saveUrl,accountId,groupName,jdYitems);
+		} catch (Exception exception) {
+			throw new SecurityException("操作失败,保存金蝶错误:"+exception.getMessage());
+		}
+	}
+
+
 
 	//金蝶保存凭证测试-销售收款生成凭证
 	public void toSaleCollectionJinDie(String Account,String corpName,String accountId,String groupName,JdTenant jdTenant)
@@ -1261,6 +1378,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			.eq(JdModule::getAccountId,accountId)
 			.eq(JdModule::getModule,"销售收款")
 			.eq(JdModule::getDc,"1")
+			.last("limit 1")
 			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
 		JdModule dModule = moduleMapper.selectOne(dLambdaQueryWrapper);
 		if(dModule==null)
@@ -1283,6 +1401,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			.eq(JdModule::getAccountId,accountId)
 			.eq(JdModule::getModule,"销售收款")
 			.eq(JdModule::getDc,"-1")
+			.last("limit 1")
 			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
 		JdModule cModule = moduleMapper.selectOne(cLambdaQueryWrapper);
 		if(cModule==null)
@@ -1301,8 +1420,10 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		String jdCorpName="测试客户";//具体到时候用哪个客户,需要关联查询传参,今天先用测试的
 		LambdaQueryWrapper<JdCorps> corpsQueryWrapper=new LambdaQueryWrapper<>();
 		corpsQueryWrapper
+			.eq(JdCorps::getCorpsType,1)
 			.eq(JdCorps::getAccountId,accountId)
 			.eq(JdCorps::getTenantId,AuthUtil.getTenantId())
+			.last("limit 1")
 			.eq(JdCorps::getCorpsName,jdCorpName);
 		JdCorps jdCorps = corpsMapper.selectOne(corpsQueryWrapper);
 
@@ -1354,6 +1475,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			.eq(JdModule::getAccountId,accountId)
 			.eq(JdModule::getModule,"销售订单")
 			.eq(JdModule::getDc,"1")
+			.last("limit 1")
 			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
 		JdModule dModule = moduleMapper.selectOne(dLambdaQueryWrapper);
 		if(dModule==null)
@@ -1374,6 +1496,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			.eq(JdModule::getAccountId,accountId)
 			.eq(JdModule::getModule,"销售订单")
 			.eq(JdModule::getDc,"-1")
+			.last("limit 1")
 			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
 		JdModule cModule = moduleMapper.selectOne(cLambdaQueryWrapper);
 		if(cModule==null)
@@ -1432,6 +1555,67 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		return businessOverpaymentClient.updateOverpayment(overpayment);
 	}
 
+	//采购付款生成凭证
+	public void testPurchaseSaveVoucher(String accountName,String corpName,String account)throws Exception
+	{
+
+		//非达沃特用户直接返回
+		if(!AuthUtil.getTenantId().equals("681169"))
+		{
+			return;
+		}
+		//如果金额大于0,才生成凭证
+		if(new BigDecimal(account).compareTo(BigDecimal.ZERO)<1)
+		{
+			return;
+		}
+
+		//获取token
+		String token = this.getAccountGroupRequest();
+		//获取套账url
+		String getAccountUrl="https://api.kingdee.com/jdy/sys/accountGroup?access_token="+token;
+		Map<String, String> urlParams=new HashMap<>();
+		/*urlParams.put("clientId",jdTenant.getClientId());
+		urlParams.put("client_secret",jdTenant.getClientSecret());
+		urlParams.put("username",jdTenant.getUsername());
+		urlParams.put("password",jdTenant.getPassword());*/
+		String result = this.doPost(getAccountUrl, urlParams);
+		JdyTool.getAccountGroup getAccountGroup = JSONObject.parseObject(result, JdyTool.getAccountGroup.class);
+
+		List<JdyTool.AccountGroup> list=new ArrayList<>();
+		if(!CollectionUtils.isNotEmpty(getAccountGroup.getData()))
+		{
+			throw new SecurityException("操作失败,暂无账套信息");
+		}
+		//获取此账号下,全部账套
+		getAccountGroup.getData().forEach(e->{
+			list.addAll(e.getAccountGroups());
+		});
+		//匹配账套
+		List<JdyTool.AccountGroup> groupList = list.stream().filter(e -> e.getAccountName().equals(accountName)).collect(Collectors.toList());
+		if(!CollectionUtils.isNotEmpty(groupList))
+		{
+			throw new SecurityException("未找到: "+accountName+" 的套账信息");
+		}
+		JdyTool.AccountGroup group = groupList.get(0);
+
+		//1.获取租户信息
+		LambdaQueryWrapper<JdTenant> jdTenantLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		jdTenantLambdaQueryWrapper
+			.eq(JdTenant::getIsEnable,1)
+			.eq(JdTenant::getTenantId,AuthUtil.getTenantId())
+			.eq(JdTenant::getAccountName,accountName);
+		JdTenant jdTenant = jdTenantMapper.selectOne(jdTenantLambdaQueryWrapper);
+		if(jdTenant==null)
+		{
+			return;
+		}
+		//2.销售收款-保存凭证
+		toPurchaseJinDie(account,corpName,jdTenant.getAccountId(),group.getGroupName(),jdTenant);
+	}
+
+
+
     //销售收款生成账单
 	public void testSaleCollectionSaveVoucher(String accountName,String corpName,String account)throws Exception
 	{
@@ -1440,6 +1624,12 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		{
 			return;
 		}
+        //如果金额大于0,才生成凭证
+		if(new BigDecimal(account).compareTo(BigDecimal.ZERO)<1)
+		{
+          return;
+		}
+
 		//获取token
 		String token = this.getAccountGroupRequest();
         //获取套账url

+ 2 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/tool/JdyTool.java

@@ -1,5 +1,6 @@
 package org.springblade.finance.tool;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.tea.NameInMap;
 import com.aliyun.tea.TeaConverter;
@@ -91,6 +92,7 @@ public class JdyTool
 		httpRequest.header("Content-Type","application/json");
 		JSONObject data=new JSONObject();
 		data.put("items",jdYitems);
+		String jsonString = JSON.toJSONString(jdYitems);
 		httpRequest.send(data.toJSONString());