فهرست منبع

Merge remote-tracking branch 'origin/temp-pre' into temp-pre

lixuesong 3 سال پیش
والد
کامیت
494aa90223
22فایلهای تغییر یافته به همراه734 افزوده شده و 102 حذف شده
  1. 7 0
      hnqz-common/hnqz-common-bom/pom.xml
  2. 8 0
      hnqz-common/hnqz-common-core/pom.xml
  3. 213 0
      hnqz-common/hnqz-common-core/src/main/java/com/qunzhixinxi/hnqz/common/core/util/Base64Utils.java
  4. 1 1
      hnqz-common/hnqz-common-taxhelper/src/main/java/com/logosdata/security/util/SignUtils.java
  5. 1 0
      hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/common/CommonConstants.java
  6. 8 3
      hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/model/TaxHelperUserAgreementAuthorizationModel.java
  7. 3 2
      hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/request/TaxHelperUserAgreementAuthorizationRequest.java
  8. 27 0
      hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/request/TaxHelperUserAgreementAuthorizationRequestV2.java
  9. 94 59
      hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/service/TaxHelperService.java
  10. 88 23
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/PartyAController.java
  11. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/MonitoringIndicator.java
  12. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/TaxHelperAgreementSignatureDTO.java
  13. 19 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/TaxHelperUserAgreementDTO.java
  14. 2 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysDeptSubMapper.java
  15. 21 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/PartyAService.java
  16. 2 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysDeptSubService.java
  17. 118 8
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/PartyAServiceImpl.java
  18. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysDeptSubServiceImpl.java
  19. 37 4
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java
  20. 30 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageSettleNoteServiceImpl.java
  21. 21 2
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskServiceImpl.java
  22. 19 0
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptSubMapper.xml

+ 7 - 0
hnqz-common/hnqz-common-bom/pom.xml

@@ -29,6 +29,7 @@
 		<security.oauth.version>2.3.6.RELEASE</security.oauth.version>
 		<fastjson.version>1.2.69</fastjson.version>
 		<aliyun.version>3.0.52.ALL</aliyun.version>
+		<commons-io.version>2.8.0</commons-io.version>
 	</properties>
 
 	<dependencyManagement>
@@ -174,6 +175,12 @@
 				<artifactId>swagger-annotations</artifactId>
 				<version>${swagger.core.version}</version>
 			</dependency>
+			<!-- io -->
+			<dependency>
+				<groupId>commons-io</groupId>
+				<artifactId>commons-io</artifactId>
+				<version>${commons-io.version}</version>
+			</dependency>
 			<!--微信依赖-->
 			<dependency>
 				<groupId>com.github.binarywang</groupId>

+ 8 - 0
hnqz-common/hnqz-common-core/pom.xml

@@ -76,5 +76,13 @@
 			<groupId>com.google.guava</groupId>
 			<artifactId>guava</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+		</dependency>
 	</dependencies>
 </project>

+ 213 - 0
hnqz-common/hnqz-common-core/src/main/java/com/qunzhixinxi/hnqz/common/core/util/Base64Utils.java

@@ -0,0 +1,213 @@
+package com.qunzhixinxi.hnqz.common.core.util;
+
+import lombok.experimental.UtilityClass;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+
+/**
+ * {@code Base64Utils}
+ * <p>
+ * base64工具类
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022/03/08 14:42
+ */
+@UtilityClass
+public class Base64Utils {
+
+    /**
+     * 把图片转换为 Base64 编码的字符串
+     * 图片的格式为 data:image/png;base64,iVBORw0KGgoAAAA...
+     *
+     * @param imagePath 图片的路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodeImage(String imagePath) throws IOException {
+
+        String suffix = FilenameUtils.getExtension(imagePath).toLowerCase();
+        byte[] content = FileUtils.readFileToByteArray(new File(imagePath));
+        return String.format("data:image/%s;base64,%s", suffix, Base64.encodeBase64String(content));
+    }
+
+    /**
+     * 把图片转换为 Base64 编码的字符串
+     * 图片的格式为 data:image/png;base64,iVBORw0KGgoAAAA...
+     *
+     * @param uri 图片的路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodeImageWithPrefix(URI uri) throws IOException {
+
+        String suffix = FilenameUtils.getExtension(uri.toString()).toLowerCase();
+        byte[] content = IOUtils.toByteArray(uri);
+        return String.format("data:image/%s;base64,%s", suffix, encodeImage(uri));
+    }
+
+    /**
+     * 把图片转换为 Base64 编码的字符串
+     * 图片的格式为 iVBORw0KGgoAAAA...
+     *
+     * @param uri 图片的路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodeImage(URI uri) throws IOException {
+
+        byte[] content = IOUtils.toByteArray(uri);
+        return  Base64.encodeBase64String(content);
+    }
+
+
+    /**
+     * 把视频转换为 Base64 编码的字符串
+     * 图片的格式为 data:video/mp4;base64,iVBORw0KGgoAAAA...
+     *
+     * @param videoPath 视频的路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodeVideo(String videoPath) throws IOException {
+
+        String suffix = FilenameUtils.getExtension(videoPath).toLowerCase();
+        byte[] content = FileUtils.readFileToByteArray(new File(videoPath));
+        return String.format("data:video/%s;base64,%s", suffix, Base64.encodeBase64String(content));
+    }
+
+    /**
+     * 把视频转换为 Base64 编码的字符串
+     * 图片的格式为 data:video/mp4;base64,iVBORw0KGgoAAAA...
+     *
+     * @param file 视频
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodeVideo(File file) throws IOException {
+
+        String suffix = FilenameUtils.getExtension(file.getAbsolutePath()).toLowerCase();
+        byte[] content = FileUtils.readFileToByteArray(file);
+        return String.format("data:video/%s;base64,%s", suffix, Base64.encodeBase64String(content));
+    }
+
+    /**
+     * 把视频转换为 Base64 编码的字符串
+     * 图片的格式含前缀为 data:video/mp4;base64,iVBORw0KGgoAAAA...
+     * 图片的格式不含前缀为 iVBORw0KGgoAAAA...
+     *
+     * @param file          视频
+     * @param containPrefix 是否包含前缀
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodeVideo(File file, Boolean containPrefix) throws IOException {
+        byte[] content = FileUtils.readFileToByteArray(file);
+
+        if (containPrefix) {
+            String suffix = FilenameUtils.getExtension(file.getAbsolutePath()).toLowerCase();
+            return String.format("data:video/%s;base64,%s", suffix, Base64.encodeBase64String(content));
+
+        }
+
+        return Base64.encodeBase64String(content);
+    }
+
+    /**
+     * 把视频转换为 Base64 编码的字符串
+     * 图片的格式为 data:video/mp4;base64,iVBORw0KGgoAAAA...
+     *
+     * @param uri 视频的路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodeVideo(URI uri) throws IOException {
+
+        String suffix = FilenameUtils.getExtension(uri.toString()).toLowerCase();
+        byte[] content = IOUtils.toByteArray(uri);
+        return String.format("data:video/%s;base64,%s", suffix, Base64.encodeBase64String(content));
+    }
+
+    /**
+     * 把视频转换为 Base64 编码的字符串
+     * 图片的格式包含前缀为 data:video/mp4;base64,iVBORw0KGgoAAAA...
+     * 图片的格式不含前缀为 iVBORw0KGgoAAAA...
+     *
+     * @param uri 视频的路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodeVideo(URI uri, Boolean containPrefix) throws IOException {
+
+        byte[] content = IOUtils.toByteArray(uri);
+
+        if (containPrefix) {
+            String suffix = FilenameUtils.getExtension(uri.toString()).toLowerCase();
+            return String.format("data:video/%s;base64,%s", suffix, Base64.encodeBase64String(content));
+        }
+
+        return Base64.encodeBase64String(content);
+    }
+
+    /**
+     * 把pdf转换为 Base64 编码的字符串
+     * 格式为 data:application/pdf;base64,iVBORw0KGgoAAAA...
+     *
+     * @param pdfPath pdf的路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodePDFWithPrefix(String pdfPath) throws IOException {
+
+        return String.format("data:application/pdf;base64,%s", encodePDF(pdfPath));
+    }
+
+    /**
+     * 把pdf转换为 Base64 编码的字符串
+     * 格式为 iVBORw0KGgoAAAA...
+     *
+     * @param pdfPath pdf的路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodePDF(String pdfPath) throws IOException {
+
+        byte[] content = FileUtils.readFileToByteArray(new File(pdfPath));
+        return Base64.encodeBase64String(content);
+    }
+
+    /**
+     * 把pdf转换为 Base64 编码的字符串
+     * 格式为 data:application/pdf;base64,iVBORw0KGgoAAAA...
+     *
+     * @param uri pdf路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodePDFWhithPrefix(URI uri) throws IOException {
+
+        return String.format("data:application/pdf;base64,%s", encodePDF(uri));
+    }
+
+    /**
+     * 把pdf转换为 Base64 编码的字符串
+     * 格式为 iVBORw0KGgoAAAA...
+     *
+     * @param uri pdf路径
+     * @return 返回图片的 Base64 编码的字符串
+     * @throws IOException 异常
+     */
+    public static String encodePDF(URI uri) throws IOException {
+
+        byte[] content = IOUtils.toByteArray(uri);
+        return Base64.encodeBase64String(content);
+    }
+
+
+}

+ 1 - 1
hnqz-common/hnqz-common-taxhelper/src/main/java/com/logosdata/security/util/SignUtils.java

@@ -146,7 +146,7 @@ public final class SignUtils {
 			map.put("privateKey", "/excel/privatekey.pem");
 		}
 		if (osName.indexOf("mac") != -1){
-			map.put("publicKey", "/Users/jimmy/Develops/publickey.pem");
+			map.put("publicKey", "/Users/jimmy/Developer/repos/cert/taxhelpor/publickey.pem");
 			map.put("privateKey", "/Users/xuqiqi/IdeaProjects/logos/dzdk-api-gateway/privatekey.pem");
 		}
 		if (osName.indexOf("windows") != -1) {

+ 1 - 0
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/common/CommonConstants.java

@@ -57,5 +57,6 @@ public interface CommonConstants {
 	String H5_TOKEN_METHOD = "税邦云H5TOKEN方法";
 	String BINDING_CARD_CODE_METHOD = "税邦云绑卡验证码";
 	String ACK_BINDING_CARD_METHOD = "税邦云绑卡确认";
+	String USER_AGREEMENT_TEXT_METHOD = "用户协议文本方法";
 	String USER_AGREEMENT_SIGNATURE_METHOD = "用户签约方法";
 }

+ 8 - 3
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/model/TaxHelperUserAgreementAuthorizationModel.java

@@ -10,12 +10,12 @@ import lombok.EqualsAndHashCode;
  * 回传用户协议授权信息
  *
  * @author Hengchen.Sun
- * @version 1.0.0
+ * @version 1.0.1 增加手签
  * @date 2021/08/09 17:30:49
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class TaxHelperUserAgreementAuthorizationModel extends TaxHelperModel{
+public class TaxHelperUserAgreementAuthorizationModel extends TaxHelperModel {
 
 
 	private static final long serialVersionUID = 3089361332652564285L;
@@ -35,8 +35,13 @@ public class TaxHelperUserAgreementAuthorizationModel extends TaxHelperModel{
 	 */
 	private String authorizationTime;
 
+	/**
+	 * 手签
+	 */
+	private String signatureHandwriting;
+
 
-	public TaxHelperUserAgreementAuthorizationModel(TaxHelperConfig config){
+	public TaxHelperUserAgreementAuthorizationModel(TaxHelperConfig config) {
 		this.appId = config.getAppId();
 		this.appSecrete = config.getAppSecrete();
 		this.queryUrl = config.getQueryUrl();

+ 3 - 2
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/request/TaxHelperUserAgreementAuthorizationRequest.java

@@ -8,15 +8,16 @@ import lombok.EqualsAndHashCode;
 /**
  * {@code TaxHelperUserAgreementAuthorizationRequest}
  * <p>
- * TODO
+ * 税邦云用户签约
  *
  * @author Hengchen.Sun
  * @version 1.0.0
  * @date 2021/08/09 17:43:49
  */
+@Deprecated
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class TaxHelperUserAgreementAuthorizationRequest extends TaxHelperRequest{
+public class TaxHelperUserAgreementAuthorizationRequest extends TaxHelperRequest {
 
 	private final static String PATH = "/lgsby/api/userAgreementAuthorization";
 

+ 27 - 0
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/entity/request/TaxHelperUserAgreementAuthorizationRequestV2.java

@@ -0,0 +1,27 @@
+package com.qunzhixinxi.hnqz.common.taxhelper.entity.request;
+
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperUserAgreementAuthorizationModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * {@code TaxHelperUserAgreementAuthorizationRequestV2}
+ * <p>
+ * 税邦云用户签约
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/09 17:43:49
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TaxHelperUserAgreementAuthorizationRequestV2 extends TaxHelperRequest {
+
+	private final static String PATH = "/lgsby/api/v2/userAgreementAuthorization";
+
+
+	public TaxHelperUserAgreementAuthorizationRequestV2(TaxHelperUserAgreementAuthorizationModel bizModel) {
+		this.bizModel = bizModel;
+		this.queryUrl = String.format("%s%s", bizModel.getQueryUrl(), PATH);
+	}
+}

+ 94 - 59
hnqz-common/hnqz-common-taxhelper/src/main/java/com/qunzhixinxi/hnqz/common/taxhelper/service/TaxHelperService.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.logosdata.security.SM2;
+import com.qunzhixinxi.hnqz.common.core.util.Base64Utils;
 import com.qunzhixinxi.hnqz.common.taxhelper.annotation.TaxHelper;
 import com.qunzhixinxi.hnqz.common.taxhelper.common.CommonConstants;
 import com.qunzhixinxi.hnqz.common.taxhelper.config.TaxHelperConfig;
@@ -35,6 +36,7 @@ import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperLoginModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperSettlementRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperUserAgreementAuthorizationRequest;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperUserAgreementAuthorizationRequestV2;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.response.TaxHelperResponse;
 import com.logosdata.security.util.SignUtils;
 import com.qunzhixinxi.hnqz.common.taxhelper.util.HttpUtils;
@@ -289,6 +291,25 @@ public class TaxHelperService {
 		return response;
 	}
 
+	/**
+	 * 回传用户协议授权信息接口(含手签)
+	 *
+	 * @param request 请求
+	 * @return 结果字符串
+	 * @throws Exception
+	 */
+	@TaxHelper(value = "userAgreementAuthorization")
+	public TaxHelperResponse userAgreementAuthorizationV2(TaxHelperUserAgreementAuthorizationRequestV2 request) {
+		TaxHelperResponse response = null;
+		try {
+			response = process(request);
+		} catch (Exception e) {
+			log.error("税邦云用户协议内容获取失败:{}", e.getMessage());
+			response = customResponse(e.getMessage());
+		}
+		return response;
+	}
+
 	/**
 	 * 自定义响应结果
 	 *
@@ -462,17 +483,17 @@ public class TaxHelperService {
 	// 	taxHelperConfig.setQueryUrl("https://test.taxhelpor.com:8883");
 	// 	// taxHelperConfig.setQueryUrl("http://114.248.76.210:8883/");
 	//
-	// 	TaxHelperLoginModel taxHelperLoginModel = new TaxHelperLoginModel(taxHelperConfig);
-	// 	TaxHelperLoginRequest loginRequest = new TaxHelperLoginRequest(taxHelperLoginModel);
+	// 	// TaxHelperLoginModel taxHelperLoginModel = new TaxHelperLoginModel(taxHelperConfig);
+	// 	// TaxHelperLoginRequest loginRequest = new TaxHelperLoginRequest(taxHelperLoginModel);
 	// 	String randomKey = "UVKVZfHcTRYgTZpV";
-	// 	// String randomKey = RandomStringUtils.randomAlphabetic(16);
-	// 	System.out.println(randomKey);
-	// 	loginRequest.setKey(randomKey);
-	//
-	// 	TaxHelperResponse s1 = service.login(loginRequest);
-	// 	System.out.println(s1.success());
-	// 	System.out.println(s1);
-	// 	System.out.println("7d301043970be6b51fd6a89cc245c936d72ea4ac3560585136d5dd8af10e06cb".length());
+	// 	// // String randomKey = RandomStringUtils.randomAlphabetic(16);
+	// 	// System.out.println(randomKey);
+	// 	// loginRequest.setKey(randomKey);
+	// 	//
+	// 	// TaxHelperResponse s1 = service.login(loginRequest);
+	// 	// System.out.println(s1.success());
+	// 	// System.out.println(s1);
+	// 	// System.out.println("7d301043970be6b51fd6a89cc245c936d72ea4ac3560585136d5dd8af10e06cb".length());
 	//
 	//
 	// 	// System.out.println("====================================================");
@@ -485,59 +506,73 @@ public class TaxHelperService {
 	// 	// System.out.println(userAgreement.getData());
 	//
 	//
-	// 	System.out.println("====================================================");
-	// 	TaxHelperUserAgreementAuthorizationModel model1 = new TaxHelperUserAgreementAuthorizationModel(taxHelperConfig);
-	// 	model1.setEnterpriseCode("91430181MA4RJ12345");
-	// 	model1.setIdCard("110227200001010570");
+	// 	// System.out.println("====================================================");
+	// 	// TaxHelperUserAgreementAuthorizationModel model1 = new TaxHelperUserAgreementAuthorizationModel(taxHelperConfig);
+	// 	// model1.setEnterpriseCode("91430181MA4RJ12345");
+	// 	// model1.setIdCard("110227200001010570");
+	// 	//
+	// 	// model1.setAuthorizationTime("2021-08-09 12:56:12");
+	// 	//
+	// 	// TaxHelperUserAgreementAuthorizationRequest rq1 = new TaxHelperUserAgreementAuthorizationRequest(model1);
+	// 	// rq1.setKey(randomKey);
+	// 	// TaxHelperResponse response1 = service.userAgreementAuthorization(rq1);
+	// 	// System.out.println(response1);
 	//
-	// 	model1.setAuthorizationTime("2021-08-09 12:56:12");
 	//
-	// 	TaxHelperUserAgreementAuthorizationRequest rq1 = new TaxHelperUserAgreementAuthorizationRequest(model1);
-	// 	rq1.setKey(randomKey);
-	// 	TaxHelperResponse response1 = service.userAgreementAuthorization(rq1);
-	// 	System.out.println(response1);
+	// 	// System.out.println("====================================================");
+	// 	// TaxHelperUserAgreementAuthorizationModel model1 = new TaxHelperUserAgreementAuthorizationModel(taxHelperConfig);
+	// 	// model1.setEnterpriseCode("91430181MA4RJ12345");
+	// 	// model1.setIdCard("110227200001010570");
+	// 	// model1.setAuthorizationTime("2021-08-09 12:56:12");
+	// 	// String encodeImage = Base64Utils.encodeImage("/Users/jimmy/Downloads/BigBangTheory-Howard.jpg");
+	// 	// model1.setSignatureHandwriting(encodeImage);
+	// 	//
+	// 	// TaxHelperUserAgreementAuthorizationRequestV2 rq1 = new TaxHelperUserAgreementAuthorizationRequestV2(model1);
+	// 	// rq1.setKey(randomKey);
+	// 	// TaxHelperResponse response1 = service.userAgreementAuthorizationV2(rq1);
+	// 	// System.out.println(response1);
 	//
 	// }
 
-	// 	System.out.println("================================================================================================================");
-	// 	TaxHelperAddMemberModel addMemberModel = new TaxHelperAddMemberModel(taxHelperConfig);
-	// 	addMemberModel.setEnterpriseCode("91430181MA4RJ12345");
-	// 	addMemberModel.setName("张大三");
-	// 	addMemberModel.setIdCard("110227200001010570");
-	// 	addMemberModel.setPhone("13388889999");
-	// 	addMemberModel.setNotifyUrl("https://localhost:8080/notify");
-	// 	TaxHelperAddMemberRequest addMemberRequest = new TaxHelperAddMemberRequest(addMemberModel);
-	// 	addMemberRequest.setKey(loginRequest.getKey());
-	// 	TaxHelperResponse s3 = service.addMembers(addMemberRequest);
-	// 	System.out.println(s3.success());
-	// 	System.out.println(s3);
-	// 	System.out.println("================================================================================================================");
-	//
-	// 	log.warn(">>>>>>>>>>>>>>获取eid token");
-	//
-	// 	TaxHelperEidTokenModel eidTokenModel = new TaxHelperEidTokenModel(taxHelperConfig);
-	// 	eidTokenModel.setIdCard("110227200001010570");
-	// 	TaxHelperEidTokenRequest eidTokenRequest = new TaxHelperEidTokenRequest(eidTokenModel);
-	// 	eidTokenRequest.setKey(loginRequest.getKey());
-	// 	TaxHelperResponse eRes = service.getEidToken(eidTokenRequest);
-	// 	System.out.println(eRes.success());
-	// 	System.out.println(JSONUtil.toJsonStr(eRes));
-	// 	System.out.println("================================================================================================================");
-	//
-	// 	log.warn(">>>>>>>>>>>>>>echeck token");
-	//
-	// 	TaxHelperECheckModel eCheckModel = new TaxHelperECheckModel(taxHelperConfig);
-	// 	eCheckModel.setToken(eRes.getMessage());
-	// 	TaxHelperECheckRequest eCheckRequest = new TaxHelperECheckRequest(eCheckModel);
-	// 	eCheckRequest.setKey(loginRequest.getKey());
-	// 	TaxHelperResponse echeck = service.ECheckFace(eCheckRequest);
-	// 	System.out.println(echeck.success());
-	// 	System.out.println(JSONUtil.toJsonStr(echeck));
-	//
-	//
-	// 	System.out.println("================================================================================================================");
-	// }
-	//
+		// System.out.println("================================================================================================================");
+		// TaxHelperAddMemberModel addMemberModel = new TaxHelperAddMemberModel(taxHelperConfig);
+		// addMemberModel.setEnterpriseCode("91430181MA4RJ12345");
+		// addMemberModel.setName("张大三");
+		// addMemberModel.setIdCard("110227200001010570");
+		// addMemberModel.setPhone("13388889999");
+		// addMemberModel.setNotifyUrl("https://localhost:8080/notify");
+		// TaxHelperAddMemberRequest addMemberRequest = new TaxHelperAddMemberRequest(addMemberModel);
+		// addMemberRequest.setKey(loginRequest.getKey());
+		// TaxHelperResponse s3 = service.addMembers(addMemberRequest);
+		// System.out.println(s3.success());
+		// System.out.println(s3);
+		// System.out.println("================================================================================================================");
+		//
+		// log.warn(">>>>>>>>>>>>>>获取eid token");
+		//
+		// TaxHelperEidTokenModel eidTokenModel = new TaxHelperEidTokenModel(taxHelperConfig);
+		// eidTokenModel.setIdCard("110227200001010570");
+		// TaxHelperEidTokenRequest eidTokenRequest = new TaxHelperEidTokenRequest(eidTokenModel);
+		// eidTokenRequest.setKey(loginRequest.getKey());
+		// TaxHelperResponse eRes = service.getEidToken(eidTokenRequest);
+		// System.out.println(eRes.success());
+		// System.out.println(JSONUtil.toJsonStr(eRes));
+		// System.out.println("================================================================================================================");
+		//
+		// log.warn(">>>>>>>>>>>>>>echeck token");
+		//
+		// TaxHelperECheckModel eCheckModel = new TaxHelperECheckModel(taxHelperConfig);
+		// eCheckModel.setToken(eRes.getMessage());
+		// TaxHelperECheckRequest eCheckRequest = new TaxHelperECheckRequest(eCheckModel);
+		// eCheckRequest.setKey(loginRequest.getKey());
+		// TaxHelperResponse echeck = service.ECheckFace(eCheckRequest);
+		// System.out.println(echeck.success());
+		// System.out.println(JSONUtil.toJsonStr(echeck));
+		//
+		//
+		// System.out.println("================================================================================================================");
+	}
+
 	// 	// log.warn(">>>>>>>>>>>>>>>>>>>获取token");
 	//
 	// 	TaxHelperAppletBizTokenModel taxHelperAppletBizTokenModel = new TaxHelperAppletBizTokenModel(taxHelperConfig);
@@ -604,4 +639,4 @@ public class TaxHelperService {
 	// 	TaxHelperResponse s6 = service.settlement(taxHelperSettlementRequest);
 	// 	System.out.println(s6);
 	// }
-}
+// }

+ 88 - 23
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/PartyAController.java

@@ -1,7 +1,12 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
+import com.google.common.collect.ImmutableMap;
 import com.qunzhixinxi.hnqz.admin.entity.dto.CancellationScorePackageDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.EncryptedInput;
 import com.qunzhixinxi.hnqz.admin.entity.dto.ExecSettlementDTO;
@@ -14,12 +19,16 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAddMemberDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAgreementSignatureDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperBindingCardCodeDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperTokenDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperUserAgreementDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.TaskSettleBatch;
 import com.qunzhixinxi.hnqz.admin.service.PartyAService;
+import com.qunzhixinxi.hnqz.admin.util.Base64Util;
+import com.qunzhixinxi.hnqz.common.core.util.Base64Utils;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
 import org.openqa.selenium.json.Json;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.DeleteMapping;
@@ -29,6 +38,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -82,27 +92,81 @@ public class PartyAController {
 		}
 	}
 
-	// /**
-	//  * 用户协议签署
-	//  * @param input 加密信息
-	//  * @return 签署结果
-	//  */
-	// @PostMapping(value = "/tax-helper/agreement-signature")
-	// public R<?> taxHelperAgreementSignature(@RequestBody EncryptedInput input){
-	//
-	// 	// 获取解密的文档
-	// 	String decodeStr = input.getEncryptedInfo();
-	//
-	// 	// 实际业务处理
-	// 	TaxHelperAgreementSignatureDTO taxHelperAgreementSignatureDTO = JSONUtil.toBean(decodeStr, TaxHelperAgreementSignatureDTO.class);
-	// 	Map<String, String> result = partyAService.userAgreementAuthorization(taxHelperAgreementSignatureDTO);
-	//
-	// 	if ("2000".equals(result.get("code"))) {
-	// 		return R.ok(result);
-	// 	} else {
-	// 		return R.failed(result);
-	// 	}
-	// }
+	/**
+	 * 用户协议签署
+	 *
+	 * @param input 加密信息
+	 * @return 签署结果
+	 */
+	@PostMapping(value = "/tax-helper/user-agreement")
+	public R<?> taxHelperUserAgreement(@RequestBody EncryptedInput input) {
+
+		// 获取解密的文档
+		String decodeStr = input.getEncryptedInfo();
+
+		// 实际业务处理
+		TaxHelperUserAgreementDTO userAgreementDTO = JSONUtil.toBean(decodeStr, TaxHelperUserAgreementDTO.class);
+		Map<String, String> result = partyAService.userAgreementText(userAgreementDTO);
+
+		if ("2000".equals(result.get("code"))) {
+			return R.ok(result);
+		} else {
+			return R.failed(result);
+		}
+	}
+
+	/**
+	 * 用户协议签署
+	 *
+	 * @param input 加密信息
+	 * @return 签署结果
+	 */
+	@PostMapping(value = "/tax-helper/agreement-signature")
+	public R<?> taxHelperAgreementSignature(@RequestBody EncryptedInput input) {
+
+		Map<String, String> result;
+
+		// 获取解密的文档
+		String decodeStr = input.getEncryptedInfo();
+
+		// 实际业务处理
+		TaxHelperAgreementSignatureDTO taxHelperAgreementSignatureDTO = JSONUtil.toBean(decodeStr, TaxHelperAgreementSignatureDTO.class);
+
+		// 校验base64
+		if (StrUtil.isBlank(taxHelperAgreementSignatureDTO.getSignatureHandwriting())) {
+			result = partyAService.getResultMap("4000", "手签信息必填");
+			return R.failed(result);
+		} else {
+			List<String> split = StrUtil.split(taxHelperAgreementSignatureDTO.getSignatureHandwriting(), ";");
+			if (CollUtil.isEmpty(split) || split.size() > 2) {
+				result = partyAService.getResultMap("4000", "手签信息有误");
+				return R.failed(result);
+			} else {
+				String info = split.get(0);
+				List<String> suffix = StrUtil.split(info, StrUtil.SLASH);
+				if (CollUtil.isEmpty(suffix) || suffix.size() > 2 ||  !StrUtil.equalsAnyIgnoreCase(suffix.get(1), "png", "jpg", "jpeg")){
+					result = partyAService.getResultMap("4000", "手签格式错误");
+					return R.failed(result);
+				}
+				File file = Base64.decodeToFile(taxHelperAgreementSignatureDTO.getSignatureHandwriting(), new File("/tmp/" + IdUtil.fastSimpleUUID() + "." + suffix.get(1)));
+				long sizeOf = FileUtils.sizeOf(file);
+				long sizeOfInKB = sizeOf / 1024;
+
+				if (sizeOfInKB > 300 || sizeOfInKB <= 0){
+					result = partyAService.getResultMap("4000", "手签信息大小不符合要求");
+					return R.failed(result);
+				}
+			}
+		}
+
+		result = partyAService.userAgreementAuthorization(taxHelperAgreementSignatureDTO);
+
+		if ("2000".equals(result.get("code"))) {
+			return R.ok(result);
+		} else {
+			return R.failed(result);
+		}
+	}
 
 	/**
 	 * 获取税邦云h5认证token
@@ -285,18 +349,19 @@ public class PartyAController {
 
 	/**
 	 * 结算
+	 *
 	 * @param input 加密信息输入
 	 * @return 结果
 	 */
 	@PostMapping(value = "/settlement")
-	public R<?> doSettlement(@RequestBody EncryptedInput input){
+	public R<?> doSettlement(@RequestBody EncryptedInput input) {
 		// 获取解密文档
 		String decodeStr = input.getEncryptedInfo();
 
 		// 实际业务处理
 		JSONArray jsonArray = JSONUtil.parseArray(decodeStr);
 		List<ExecSettlementDTO> execSettlementDTOList =
-				jsonArray.stream().map(json -> JSONUtil.toBean(JSONUtil.parseObj(json),ExecSettlementDTO.class))
+				jsonArray.stream().map(json -> JSONUtil.toBean(JSONUtil.parseObj(json), ExecSettlementDTO.class))
 						.collect(Collectors.toList());
 		Map<String, String> result = partyAService.doSettlement(execSettlementDTOList);
 

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/MonitoringIndicator.java

@@ -60,5 +60,10 @@ public class MonitoringIndicator extends Model<MonitoringIndicator> {
 	@ApiModelProperty(value = "限制金额")
 	private BigDecimal limitAmount;
 
+	/**
+	 * 平台限额
+	 */
+	private BigDecimal yaoyiLimitAmount;
+
 	private String subType;
 }

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/TaxHelperAgreementSignatureDTO.java

@@ -15,5 +15,10 @@ import lombok.Data;
 public class TaxHelperAgreementSignatureDTO  extends BaseTaxHelperDTO{
 	private static final long serialVersionUID = -3051890641975938436L;
 
+	/**
+	 * 手签图片base64
+	 */
+	private String signatureHandwriting;
+
 
 }

+ 19 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/dto/TaxHelperUserAgreementDTO.java

@@ -0,0 +1,19 @@
+package com.qunzhixinxi.hnqz.admin.entity.dto;
+
+import lombok.Data;
+
+/**
+ * {@code TaxHelperUserAgreementDTO}
+ * <p>
+ * 税邦云用户协议dto
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/08/30 16:22:06
+ */
+@Data
+public class TaxHelperUserAgreementDTO extends BaseTaxHelperDTO{
+	private static final long serialVersionUID = -3051890641975938436L;
+
+
+}

+ 2 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysDeptSubMapper.java

@@ -38,4 +38,6 @@ public interface SysDeptSubMapper extends BaseMapper<SysDeptSub> {
 	List<SettleAmountMonitorOutput> getSettleAmountMonitor(@Param("query") SettleAmountMonitorInput input);
 
 	List<SettleAmountMonitorOutput> getDeptAmountMonitor(@Param("query") SettleAmountMonitorInput input);
+
+	List<SettleAmountMonitorOutput> getYaoyiAmountMonitor(@Param("query") SettleAmountMonitorInput yaoyiMonitorInput);
 }

+ 21 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/PartyAService.java

@@ -11,6 +11,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAddMemberDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAgreementSignatureDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperBindingCardCodeDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperTokenDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperUserAgreementDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.TaskSettleBatch;
 
 import java.util.List;
@@ -100,6 +101,7 @@ public interface PartyAService {
 
 	/**
 	 * 结算
+	 *
 	 * @param execSettlementDTOList 结算DTO
 	 * @return 提交结算结果
 	 */
@@ -107,7 +109,26 @@ public interface PartyAService {
 
 	/**
 	 * 签署用户信息
+	 *
 	 * @return 签署结果
 	 */
 	Map<String, String> userAgreementAuthorization(TaxHelperAgreementSignatureDTO taxHelperAgreementSignatureDTO);
+
+	/**
+	 * 获取用户协议
+	 *
+	 * @param userAgreementDTO 用户协议dto
+	 * @return 结果
+	 */
+	Map<String, String> userAgreementText(TaxHelperUserAgreementDTO userAgreementDTO);
+
+
+	/**
+	 * 获取
+	 *
+	 * @param code 状态码
+	 * @param data 结果数据
+	 * @return 结果map
+	 */
+	Map<String, String> getResultMap(String code, String data);
 }

+ 2 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysDeptSubService.java

@@ -46,4 +46,6 @@ public interface SysDeptSubService extends IService<SysDeptSub> {
 	 * @param input
 	 */
 	void saveSettleConfig(DeptSubLimitAmountInput input);
+
+	List<SettleAmountMonitorOutput> getYaoyiAmountMonitor(SettleAmountMonitorInput yaoyiMonitorInput);
 }

+ 118 - 8
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/PartyAServiceImpl.java

@@ -33,6 +33,7 @@ import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAddMemberDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperAgreementSignatureDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperBindingCardCodeDTO;
 import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperTokenDTO;
+import com.qunzhixinxi.hnqz.admin.entity.dto.TaxHelperUserAgreementDTO;
 import com.qunzhixinxi.hnqz.admin.entity.input.Record;
 import com.qunzhixinxi.hnqz.admin.entity.input.SettleAmountMonitorInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.TaskSettleBatch;
@@ -76,6 +77,7 @@ import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperGetUserAgre
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperH5BizTokenRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperSettlementRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperUserAgreementAuthorizationRequest;
+import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperUserAgreementAuthorizationRequestV2;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.response.TaxHelperResponse;
 import com.qunzhixinxi.hnqz.common.taxhelper.enums.TaxHelperCertStatus;
 import com.qunzhixinxi.hnqz.common.taxhelper.service.TaxHelperService;
@@ -341,9 +343,10 @@ public class PartyAServiceImpl implements PartyAService {
 		LocalDateTime signTime = LocalDateTime.now();
 		model.setAuthorizationTime(LocalDateTimeUtil.format(signTime, CommonConstants.DEFAULT_DATE_TIME_FORMAT_PATTERN));
 		model.setIdCard(member.getIdCardNumber());
+		model.setSignatureHandwriting(taxHelperAgreementSignatureDTO.getSignatureHandwriting());
 
-		TaxHelperUserAgreementAuthorizationRequest request = new TaxHelperUserAgreementAuthorizationRequest(model);
-		TaxHelperResponse response = taxHelperService.userAgreementAuthorization(request);
+		TaxHelperUserAgreementAuthorizationRequestV2 request = new TaxHelperUserAgreementAuthorizationRequestV2(model);
+		TaxHelperResponse response = taxHelperService.userAgreementAuthorizationV2(request);
 
 		// 记录认证结果
 		record.setCode(response.getCode());
@@ -378,6 +381,77 @@ public class PartyAServiceImpl implements PartyAService {
 		return getResultMap("4000", response.getMessage());
 	}
 
+	/**
+	 * 获取用户协议
+	 *
+	 * @param userAgreementDTO 用户协议dto
+	 * @return 结果
+	 */
+	@Override
+	public Map<String, String> userAgreementText(TaxHelperUserAgreementDTO userAgreementDTO) {
+		// 获取用户并校验
+		SysUser member = userService.getOne(Wrappers.<SysUser>query()
+				.eq("username", userAgreementDTO.getUsername())
+				.eq("dept_id", userAgreementDTO.getDeptId()));
+		String info = checkoutMemberInfo(member, CommonConstants.USER_AGREEMENT_TEXT_METHOD);
+		if (StringUtils.isNotEmpty(info)) {
+			return getResultMap("4000", info);
+		}
+
+		// 校验用户是否已经签署了信息
+		if (member.getTaxHelperAgreementSignature() == 1) {
+			return getResultMap("2000", "协议已签署");
+		}
+
+		// 获取部门并校验
+		SysDept dept = deptService.getById(userAgreementDTO.getDeptId());
+		info = checkoutDeptInfo(dept);
+		if (StringUtils.isNotEmpty(info)) {
+			return getResultMap("4000", info);
+		}
+
+		// 校验结算信息
+		SysDeptSub query = new SysDeptSub();
+		query.setDeptId(dept.getDeptId());
+		query.setSubjectType(SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
+		query.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
+		SysDeptSub deptSub = sysDeptSubService.getOne(Wrappers.query(query));
+		info = checkoutDeptSubInfo(deptSub, ChannelEnum.TAX_HELPER, null);
+		if (StringUtils.isNotEmpty(info)) {
+			return getResultMap("4000", info);
+		}
+
+		// 获取协议开始
+		log.info("【{}({})】,获取协议信息", member.getRealname(), member.getUsername());
+		TaxHelperConfig config = new TaxHelperConfig();
+		config.setAppId(deptSub.getAppId());
+		config.setAppSecrete(deptSub.getAppSecret());
+		config.setQueryUrl(deptSub.getQueryUrl());
+
+		// 获取
+		TaxHelperGetUserAgreementModel getUserAgreementModel = new TaxHelperGetUserAgreementModel(config);
+		getUserAgreementModel.setEnterpriseCode(dept.getTaxCode());
+		TaxHelperGetUserAgreementRequest getUserAgreementRequest = new TaxHelperGetUserAgreementRequest(getUserAgreementModel);
+		TaxHelperResponse userAgreement = taxHelperService.getUserAgreement(getUserAgreementRequest);
+
+		// 记录认证结果
+		SysCertResultRecord record = new SysCertResultRecord();
+		record.setCode(userAgreement.getCode());
+		record.setCreateTime(LocalDateTime.now());
+		record.setDeptId(dept.getDeptId());
+		record.setMessage(StringUtils.isNotEmpty(userAgreement.getMessage()) ? userAgreement.getMessage() : "无");
+		record.setStatus(null);
+		record.setSubjectType(1);
+		record.setMethod("税邦云用户协议");
+		record.setUserId(member.getUserId());
+		sysCertResultRecordMapper.insert(record);
+
+		if (userAgreement.success()) {
+			return getResultMap("2000", userAgreement.getData());
+		}
+		return getResultMap("4000", userAgreement.getMessage());
+	}
+
 
 	/**
 	 * 获取税邦云H5 token
@@ -1081,6 +1155,10 @@ public class PartyAServiceImpl implements PartyAService {
 				.val());
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 
+		SettleAmountMonitorInput yaoyiMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, scorePackageSettleNoteDTO
+				.getChannel()
+				.val());
+		List<SettleAmountMonitorOutput> yaoyiAmountMonitor = sysDeptSubService.getYaoyiAmountMonitor(yaoyiMonitorInput);
 
 		SettleAmountMonitorOutput monitorOutput = monitorOutputList.stream().filter(item -> item.getIdCardNumber()
 				.equals(member.getIdCardNumber())).findFirst().orElse(null);
@@ -1088,6 +1166,9 @@ public class PartyAServiceImpl implements PartyAService {
 		SettleAmountMonitorOutput deptMonitorOutput = deptAmountMonitor.stream().filter(item -> item.getUserId()
 				.equals(member.getUserId())).findFirst().orElse(null);
 
+		SettleAmountMonitorOutput yaoyiMonitorOutput = yaoyiAmountMonitor.stream().filter(item -> item.getUserId()
+				.equals(member.getUserId())).findFirst().orElse(null);
+
 		MonitoringIndicator monitoringIndicator = monitoringIndicatorService.getBySubType(note.getSubType());
 		SysDeptSub sysDeptSub = sysDeptSubService.getOne(Wrappers.<SysDeptSub>lambdaQuery()
 				.eq(SysDeptSub::getDeptId, dept.getDeptId())
@@ -1095,14 +1176,19 @@ public class PartyAServiceImpl implements PartyAService {
 		);
 		BigDecimal deptLimit = sysDeptSub.getLimitAmount();
 		BigDecimal monitoringLimit = monitoringIndicator.getLimitAmount();
+		BigDecimal yaoyiMonitoringLimit = monitoringIndicator.getYaoyiLimitAmount();
 		BigDecimal monitorAmount = note.getSettleAmount();
 		BigDecimal deptMonitorAmount = note.getSettleAmount();
+		BigDecimal yaoyiMonitorAmount = note.getSettleAmount();
 		if (null != monitorOutput) {
 			monitorAmount = monitorAmount.add(monitorOutput.getTotalAmount());
 		}
 		if (null != deptMonitorOutput) {
 			deptMonitorAmount = deptMonitorAmount.add(deptMonitorOutput.getTotalAmount());
 		}
+		if (null != yaoyiMonitorOutput) {
+			yaoyiMonitorAmount = yaoyiMonitorAmount.add(yaoyiMonitorOutput.getTotalAmount());
+		}
 		if (null != deptLimit) {
 			if (deptMonitorAmount.compareTo(deptLimit) > 0) {
 				return getResultMap("4000", note.getRealName() + ":超过当月限额");
@@ -1113,6 +1199,11 @@ public class PartyAServiceImpl implements PartyAService {
 				return getResultMap("4000", note.getRealName() + ":超过结算渠道限额");
 			}
 		}
+		if (null != yaoyiMonitorAmount) {
+			if (yaoyiMonitorAmount.compareTo(yaoyiMonitoringLimit) > 0) {
+				return getResultMap("4000", note.getRealName() + ":超过平台限额");
+			}
+		}
 
 		WmScorePackageSettleNote updateEntity;
 		LocalDateTime localDateTime = LocalDateTime.now();
@@ -1294,23 +1385,35 @@ public class PartyAServiceImpl implements PartyAService {
 				.valueOf(user.getUserId())), noteIds, SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 
+		SettleAmountMonitorInput yaoyiMonitorInput = SettleAmountMonitorInput.fromUserId(Collections.singletonList(String
+				.valueOf(user.getUserId())), null, SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
+		List<SettleAmountMonitorOutput> yaoyiAmountMonitor = sysDeptSubService.getYaoyiAmountMonitor(yaoyiMonitorInput);
+
 		SettleAmountMonitorOutput monitorOutput = monitorOutputList.stream().filter(item -> item.getIdCardNumber()
 				.equals(user.getIdCardNumber())).findFirst().orElse(null);
 
 		SettleAmountMonitorOutput deptMonitorOutput = deptAmountMonitor.stream().filter(item -> item.getUserId()
 				.equals(String.valueOf(user.getUserId()))).findFirst().orElse(null);
 
-		MonitoringIndicator monitoringIndicator = monitoringIndicatorService.getBySubType(SubjectTypeEnum.TYPE_SHUIBANGYUN
-				.getCode());
+		SettleAmountMonitorOutput yaoyiMonitorOutput = yaoyiAmountMonitor.stream().filter(item -> item.getUserId()
+				.equals(String.valueOf(user.getUserId()))).findFirst().orElse(null);
+
+		MonitoringIndicator monitoringIndicator =
+				monitoringIndicatorService.getBySubType(SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
 		BigDecimal monitoringLimit = monitoringIndicator.getLimitAmount();
+		BigDecimal yaoyiMonitoringLimit = monitoringIndicator.getYaoyiLimitAmount();
 		BigDecimal monitorAmount = settleAmount;
 		BigDecimal deptMonitorAmount = settleAmount;
+		BigDecimal yaoyiMonitorAmount = settleAmount;
 		if (null != monitorOutput) {
 			monitorAmount = monitorAmount.add(monitorOutput.getTotalAmount());
 		}
 		if (null != deptMonitorOutput) {
 			deptMonitorAmount = deptMonitorAmount.add(deptMonitorOutput.getTotalAmount());
 		}
+		if (null != yaoyiMonitorOutput) {
+			yaoyiMonitorAmount = yaoyiMonitorAmount.add(yaoyiMonitorOutput.getTotalAmount());
+		}
 		if (null != limitAmount) {
 			if (deptMonitorAmount.compareTo(limitAmount) > 0) {
 				info = "超过当月限额";
@@ -1321,6 +1424,11 @@ public class PartyAServiceImpl implements PartyAService {
 				info = "超过结算渠道限额";
 			}
 		}
+		if (null != yaoyiMonitoringLimit) {
+			if (yaoyiMonitorAmount.compareTo(yaoyiMonitoringLimit) > 0) {
+				info = "超过平台限额";
+			}
+		}
 		return info;
 	}
 
@@ -1507,7 +1615,8 @@ public class PartyAServiceImpl implements PartyAService {
 		List<Integer> taxHelperCertStatusList = new ArrayList<>();
 		if (CommonConstants.ADD_MEMBER_METHOD.equals(methodName)) {
 			taxHelperCertStatusList.add(TaxHelperCertStatus.UN_CERT.getCode());
-		} else if (CommonConstants.USER_AGREEMENT_SIGNATURE_METHOD.equals(methodName)){
+		} else if (CommonConstants.USER_AGREEMENT_SIGNATURE_METHOD.equals(methodName)
+				|| CommonConstants.USER_AGREEMENT_TEXT_METHOD.equals(methodName)) {
 			taxHelperCertStatusList.add(TaxHelperCertStatus.ADD_MEMBER.getCode());
 		} else if (CommonConstants.H5_TOKEN_METHOD.equals(methodName)) {
 			taxHelperCertStatusList.add(TaxHelperCertStatus.ADD_MEMBER.getCode());
@@ -1515,8 +1624,8 @@ public class PartyAServiceImpl implements PartyAService {
 			taxHelperCertStatusList.add(TaxHelperCertStatus.CHECKING_UNBIND.getCode());
 			taxHelperCertStatusList.add(TaxHelperCertStatus.CHECKING_BIND.getCode());
 			taxHelperCertStatusList.add(TaxHelperCertStatus.UNCHECKED_BIND.getCode());
-		} else if (CommonConstants.BINDING_CARD_CODE_METHOD.equals(methodName) || CommonConstants.ACK_BINDING_CARD_METHOD
-				.equals(methodName)) {
+		} else if (CommonConstants.BINDING_CARD_CODE_METHOD.equals(methodName)
+				|| CommonConstants.ACK_BINDING_CARD_METHOD.equals(methodName)) {
 			taxHelperCertStatusList.add(TaxHelperCertStatus.ADD_MEMBER.getCode());
 			taxHelperCertStatusList.add(TaxHelperCertStatus.CHECKED_UNBIND.getCode());
 			taxHelperCertStatusList.add(TaxHelperCertStatus.CHECKING_UNBIND.getCode());
@@ -1672,7 +1781,8 @@ public class PartyAServiceImpl implements PartyAService {
 	 * @param data 结果数据
 	 * @return 结果map
 	 */
-	private Map<String, String> getResultMap(String code, String data) {
+	@Override
+	public Map<String, String> getResultMap(String code, String data) {
 		Map<String, String> resMap = new HashMap<>(4);
 		resMap.put("code", code);
 		resMap.put("data", data);

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysDeptSubServiceImpl.java

@@ -82,6 +82,11 @@ public class SysDeptSubServiceImpl extends ServiceImpl<SysDeptSubMapper, SysDept
 		return sysDeptSubMapper.getDeptAmountMonitor(input);
 	}
 
+	@Override
+	public List<SettleAmountMonitorOutput> getYaoyiAmountMonitor(SettleAmountMonitorInput yaoyiMonitorInput) {
+		return sysDeptSubMapper.getYaoyiAmountMonitor(yaoyiMonitorInput);
+	}
+
 	/**
 	 * 结算管理配置
 	 *

+ 37 - 4
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java

@@ -330,6 +330,9 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		SettleAmountMonitorInput deptMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, input.getSubType());
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 
+		SettleAmountMonitorInput yaoyiMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, input.getSubType());
+		List<SettleAmountMonitorOutput> yaoyiAmountMonitor = sysDeptSubService.getYaoyiAmountMonitor(yaoyiMonitorInput);
+
 		// 结算渠道
 		SysDeptSub condition = new SysDeptSub();
 		condition.setDeptId(SecurityUtils.getUser().getDeptId());
@@ -345,6 +348,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 		BigDecimal deptLimit = sysDeptSub.getLimitAmount();
 		BigDecimal monitoringLimit = monitoringIndicator.getLimitAmount();
+		BigDecimal yaoyiLimitAmount = monitoringIndicator.getYaoyiLimitAmount();
 
 		BigDecimal total = new BigDecimal(0);
 		LocalDateTime now = LocalDateTime.now();
@@ -352,18 +356,25 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 			total = total.add(note.getSettleAmount());
 			BigDecimal monitorAmount = note.getSettleAmount();
 			BigDecimal deptMonitorAmount = note.getSettleAmount();
+			BigDecimal yaoyiMonitorAmount = note.getSettleAmount();
 			SettleAmountMonitorOutput monitorOutput = monitorOutputList.stream().filter(item -> item.getIdCardNumber()
 					.equals(note.getIdCardNumber())).findFirst().orElse(null);
 
 			SettleAmountMonitorOutput deptMonitorOutput = deptAmountMonitor.stream().filter(item -> item.getUserId()
 					.equals(note.getUserId())).findFirst().orElse(null);
 
+			SettleAmountMonitorOutput yaoyiMonitorOutput = yaoyiAmountMonitor.stream().filter(item -> item.getUserId()
+					.equals(note.getUserId())).findFirst().orElse(null);
+
 			if (null != monitorOutput) {
 				monitorAmount = monitorAmount.add(monitorOutput.getTotalAmount());
 			}
 			if (null != deptMonitorOutput) {
 				deptMonitorAmount = deptMonitorAmount.add(deptMonitorOutput.getTotalAmount());
 			}
+			if (null != yaoyiMonitorOutput) {
+				yaoyiMonitorAmount = yaoyiMonitorAmount.add(yaoyiMonitorOutput.getTotalAmount());
+			}
 			if (null != deptLimit) {
 				if (deptMonitorAmount.compareTo(deptLimit) > 0) {
 					return R.failed(note.getRealName() + ":超过当月限额");
@@ -374,6 +385,11 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 					return R.failed(note.getRealName() + ":超过结算渠道限额");
 				}
 			}
+			if (null != yaoyiLimitAmount) {
+				if (yaoyiMonitorAmount.compareTo(yaoyiLimitAmount) > 0) {
+					return R.failed(note.getRealName() + ":超过平台限额");
+				}
+			}
 
 			note.setUpdateTime(now);
 			note.setSubTime(now);
@@ -466,38 +482,51 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		SettleAmountMonitorInput deptMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, input.getSubType());
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 
+		SettleAmountMonitorInput yaoyiMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, input.getSubType());
+		List<SettleAmountMonitorOutput> yaoyiAmountMonitor = sysDeptSubService.getYaoyiAmountMonitor(yaoyiMonitorInput);
+
+		// 结算渠道
 		SysDeptSub condition = new SysDeptSub();
 		condition.setDeptId(SecurityUtils.getUser().getDeptId());
 		condition.setSubjectType(input.getSubType());
 		condition.setEnableFlag(SubjectTypeEnum.ENABLE_FLAG_TRUE.getCode());
 		SysDeptSub sysDeptSub = sysDeptSubService.getOne(Wrappers.query(condition));
-
 		if (null == sysDeptSub || StringUtils.isBlank(sysDeptSub.getAppId())) {
 			return R.failed("人员所在机构未配置结算信息");
 		}
 
+		// 限额
 		MonitoringIndicator monitoringIndicator = monitoringIndicatorService.getBySubType(input.getSubType());
 
 		BigDecimal deptLimit = sysDeptSub.getLimitAmount();
 		BigDecimal monitoringLimit = monitoringIndicator.getLimitAmount();
+		BigDecimal yaoyiLimitAmount = monitoringIndicator.getYaoyiLimitAmount();
 
 		BigDecimal total = new BigDecimal(0);
+		LocalDateTime now = LocalDateTime.now();
 		for (WmScorePackageSettleNote note : notes) {
 			total = total.add(note.getSettleAmount());
 			BigDecimal monitorAmount = note.getSettleAmount();
 			BigDecimal deptMonitorAmount = note.getSettleAmount();
+			BigDecimal yaoyiMonitorAmount = note.getSettleAmount();
 			SettleAmountMonitorOutput monitorOutput = monitorOutputList.stream().filter(item -> item.getIdCardNumber()
 					.equals(note.getIdCardNumber())).findFirst().orElse(null);
 
 			SettleAmountMonitorOutput deptMonitorOutput = deptAmountMonitor.stream().filter(item -> item.getUserId()
 					.equals(note.getUserId())).findFirst().orElse(null);
 
+			SettleAmountMonitorOutput yaoyiMonitorOutput = yaoyiAmountMonitor.stream().filter(item -> item.getUserId()
+					.equals(note.getUserId())).findFirst().orElse(null);
+
 			if (null != monitorOutput) {
 				monitorAmount = monitorAmount.add(monitorOutput.getTotalAmount());
 			}
 			if (null != deptMonitorOutput) {
 				deptMonitorAmount = deptMonitorAmount.add(deptMonitorOutput.getTotalAmount());
 			}
+			if (null != yaoyiMonitorOutput) {
+				yaoyiMonitorAmount = yaoyiMonitorAmount.add(yaoyiMonitorOutput.getTotalAmount());
+			}
 			if (null != deptLimit) {
 				if (deptMonitorAmount.compareTo(deptLimit) > 0) {
 					return R.failed(note.getRealName() + ":超过当月限额");
@@ -508,16 +537,20 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 					return R.failed(note.getRealName() + ":超过结算渠道限额");
 				}
 			}
+			if (null != yaoyiLimitAmount) {
+				if (yaoyiMonitorAmount.compareTo(yaoyiLimitAmount) > 0) {
+					return R.failed(note.getRealName() + ":超过平台限额");
+				}
+			}
 
-			note.setInvoiceType(input.getInvoiceCategory());
-			note.setUpdateTime(LocalDateTime.now());
+			note.setUpdateTime(now);
+			note.setSubTime(now);
 			note.setSubType(input.getSubType());
 			note.setInvoiceType(input.getInvoiceCategory());
 			note.setCategoryName(input.toCategoryName());
 			if (null == note.getId()) {
 				note.setCreateTime(LocalDateTime.now());
 			}
-
 		}
 		WmScorePackage updateEntity = new WmScorePackage();
 		updateEntity.setInvoiceCategory(input.getInvoiceCategory());

+ 30 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmScorePackageSettleNoteServiceImpl.java

@@ -217,6 +217,8 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 		SettleAmountMonitorInput deptMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, note.getSubType());
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 
+		SettleAmountMonitorInput yaoyiMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, note.getSubType());
+		List<SettleAmountMonitorOutput> yaoyiAmountMonitor = sysDeptSubService.getYaoyiAmountMonitor(yaoyiMonitorInput);
 
 		SettleAmountMonitorOutput monitorOutput = monitorOutputList.stream().filter(item -> item.getIdCardNumber()
 				.equals(user.getIdCardNumber())).findFirst().orElse(null);
@@ -224,17 +226,25 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 		SettleAmountMonitorOutput deptMonitorOutput = deptAmountMonitor.stream().filter(item -> item.getUserId()
 				.equals(note.getUserId())).findFirst().orElse(null);
 
+		SettleAmountMonitorOutput yaoyiMonitorOutput = yaoyiAmountMonitor.stream().filter(item -> item.getUserId()
+				.equals(note.getUserId())).findFirst().orElse(null);
+
 		MonitoringIndicator monitoringIndicator = monitoringIndicatorService.getBySubType(note.getSubType());
 		BigDecimal deptLimit = sysDeptSub.getLimitAmount();
+		BigDecimal yaoyiLimit = monitoringIndicator.getYaoyiLimitAmount();
 		BigDecimal monitoringLimit = monitoringIndicator.getLimitAmount();
 		BigDecimal monitorAmount = note.getSettleAmount();
 		BigDecimal deptMonitorAmount = note.getSettleAmount();
+		BigDecimal yaoyiMonitorAmount = note.getSettleAmount();
 		if (null != monitorOutput) {
 			monitorAmount = monitorAmount.add(monitorOutput.getTotalAmount());
 		}
 		if (null != deptMonitorOutput) {
 			deptMonitorAmount = deptMonitorAmount.add(deptMonitorOutput.getTotalAmount());
 		}
+		if (null != yaoyiMonitorOutput) {
+			yaoyiMonitorAmount = yaoyiMonitorAmount.add(yaoyiMonitorOutput.getTotalAmount());
+		}
 		if (null != deptLimit) {
 			if (deptMonitorAmount.compareTo(deptLimit) > 0) {
 				return R.failed(note.getRealName() + ":超过当月限额");
@@ -245,6 +255,11 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 				return R.failed(note.getRealName() + ":超过结算渠道限额");
 			}
 		}
+		if (null != yaoyiLimit) {
+			if (yaoyiMonitorAmount.compareTo(yaoyiLimit) > 0) {
+				return R.failed(note.getRealName() + ":超过平台限额");
+			}
+		}
 
 		LocalDateTime localDateTime = LocalDateTime.now();
 		if (null == note.getId()) {
@@ -329,6 +344,8 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 		SettleAmountMonitorInput deptMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, note.getSubType());
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 
+		SettleAmountMonitorInput yaoyiMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, note.getSubType());
+		List<SettleAmountMonitorOutput> yaoyiAmountMonitor = sysDeptSubService.getYaoyiAmountMonitor(yaoyiMonitorInput);
 
 		SettleAmountMonitorOutput monitorOutput = monitorOutputList.stream().filter(item -> item.getIdCardNumber()
 				.equals(user.getIdCardNumber())).findFirst().orElse(null);
@@ -336,17 +353,25 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 		SettleAmountMonitorOutput deptMonitorOutput = deptAmountMonitor.stream().filter(item -> item.getUserId()
 				.equals(note.getUserId())).findFirst().orElse(null);
 
+		SettleAmountMonitorOutput yaoyiMonitorOutput = yaoyiAmountMonitor.stream().filter(item -> item.getUserId()
+				.equals(note.getUserId())).findFirst().orElse(null);
+
 		MonitoringIndicator monitoringIndicator = monitoringIndicatorService.getBySubType(note.getSubType());
 		BigDecimal deptLimit = sysDeptSub.getLimitAmount();
+		BigDecimal yaoyiLimit = monitoringIndicator.getYaoyiLimitAmount();
 		BigDecimal monitoringLimit = monitoringIndicator.getLimitAmount();
 		BigDecimal monitorAmount = note.getSettleAmount();
 		BigDecimal deptMonitorAmount = note.getSettleAmount();
+		BigDecimal yaoyiMonitorAmount = note.getSettleAmount();
 		if (null != monitorOutput) {
 			monitorAmount = monitorAmount.add(monitorOutput.getTotalAmount());
 		}
 		if (null != deptMonitorOutput) {
 			deptMonitorAmount = deptMonitorAmount.add(deptMonitorOutput.getTotalAmount());
 		}
+		if (null != yaoyiMonitorOutput) {
+			yaoyiMonitorAmount = yaoyiMonitorAmount.add(yaoyiMonitorOutput.getTotalAmount());
+		}
 		if (null != deptLimit) {
 			if (deptMonitorAmount.compareTo(deptLimit) > 0) {
 				return R.failed(note.getRealName() + ":超过当月限额");
@@ -357,6 +382,11 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 				return R.failed(note.getRealName() + ":超过结算渠道限额");
 			}
 		}
+		if (null != yaoyiLimit) {
+			if (yaoyiMonitorAmount.compareTo(yaoyiLimit) > 0) {
+				return R.failed(note.getRealName() + ":超过平台限额");
+			}
+		}
 
 		WmScorePackageSettleNote updateEntity;
 		LocalDateTime localDateTime = LocalDateTime.now();

+ 21 - 2
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskServiceImpl.java

@@ -2229,23 +2229,37 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 				.valueOf(user.getUserId())), null, SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 
+		SettleAmountMonitorInput yaoyiMonitorInput = SettleAmountMonitorInput.fromUserId(Collections.singletonList(String
+				.valueOf(user.getUserId())), null, SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
+		List<SettleAmountMonitorOutput> yaoyiAmountMonitor = sysDeptSubService.getYaoyiAmountMonitor(yaoyiMonitorInput);
+
 		SettleAmountMonitorOutput monitorOutput = monitorOutputList.stream().filter(item -> item.getIdCardNumber()
 				.equals(user.getIdCardNumber())).findFirst().orElse(null);
 
 		SettleAmountMonitorOutput deptMonitorOutput = deptAmountMonitor.stream().filter(item -> item.getUserId()
 				.equals(String.valueOf(user.getUserId()))).findFirst().orElse(null);
 
-		MonitoringIndicator monitoringIndicator = monitoringIndicatorService.getBySubType(SubjectTypeEnum.TYPE_SHUIBANGYUN
-				.getCode());
+		SettleAmountMonitorOutput yaoyiMonitorOutput = yaoyiAmountMonitor.stream().filter(item -> item.getUserId()
+				.equals(String.valueOf(user.getUserId()))).findFirst().orElse(null);
+
+
+		MonitoringIndicator monitoringIndicator =
+				monitoringIndicatorService.getBySubType(SubjectTypeEnum.TYPE_SHUIBANGYUN.getCode());
 		BigDecimal monitoringLimit = monitoringIndicator.getLimitAmount();
+		BigDecimal yaoyiMonitoringLimit = monitoringIndicator.getYaoyiLimitAmount();
 		BigDecimal monitorAmount = settleAmount;
 		BigDecimal deptMonitorAmount = settleAmount;
+		BigDecimal yaoyiMonitorAmount = settleAmount;
+
 		if (null != monitorOutput) {
 			monitorAmount = monitorAmount.add(monitorOutput.getTotalAmount());
 		}
 		if (null != deptMonitorOutput) {
 			deptMonitorAmount = deptMonitorAmount.add(deptMonitorOutput.getTotalAmount());
 		}
+		if (null != yaoyiMonitorOutput) {
+			yaoyiMonitorAmount = yaoyiMonitorAmount.add(yaoyiMonitorOutput.getTotalAmount());
+		}
 		if (null != limitAmount) {
 			if (deptMonitorAmount.compareTo(limitAmount) > 0) {
 				info = "超过当月限额";
@@ -2256,6 +2270,11 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 				info = "超过结算渠道限额";
 			}
 		}
+		if (null != yaoyiMonitoringLimit) {
+			if (yaoyiMonitorAmount.compareTo(yaoyiMonitoringLimit) > 0) {
+				info = "超过平台限额";
+			}
+		}
 		return info;
 	}
 

+ 19 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysDeptSubMapper.xml

@@ -56,4 +56,23 @@
 		</if>
 		GROUP BY t.user_id
 	</select>
+	<select id="getYaoyiAmountMonitor" resultType="com.qunzhixinxi.hnqz.admin.entity.output.SettleAmountMonitorOutput">
+		SELECT
+		t.user_id,
+		sum(t.settle_amount) AS totalAmount
+		FROM wm_score_package_settle_note t
+		WHERE t.create_time &gt; #{query.startTime,jdbcType=TIMESTAMP}
+		AND t.create_time &lt; #{query.endTime,jdbcType=TIMESTAMP}
+		AND t.user_id IN
+		<foreach item="item" index="index" collection="query.userIds" open="(" separator="," close=")">
+			#{item}
+		</foreach>
+		<if test="query.ids != null and query.ids.size()>0">
+			AND t.id NOT IN
+			<foreach item="item" index="index" collection="query.ids" open="(" separator="," close=")">
+				#{item}
+			</foreach>
+		</if>
+		GROUP BY t.user_id
+	</select>
 </mapper>