Pārlūkot izejas kodu

feat: 财务 v1

shc 3 gadi atpakaļ
vecāks
revīzija
b1a04f7c3e
27 mainītis faili ar 1677 papildinājumiem un 38 dzēšanām
  1. 29 0
      db/v2022/3upm_sequence.sql
  2. 5 5
      hnqz-common/hnqz-common-bom/pom.xml
  3. 1 1
      hnqz-common/pom.xml
  4. 36 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/bo/OmsOrderBO.java
  5. 34 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/bo/OmsOrderBatchBO.java
  6. 136 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/bo/OmsOrderItemBO.java
  7. 18 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/constant/CheckoutCaches.java
  8. 30 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/constant/CheckoutConstants.java
  9. 33 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/constant/enums/CheckoutState.java
  10. 94 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/constant/enums/CheckoutType.java
  11. 47 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/dto/OmsOrderItemRequest.java
  12. 235 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/dto/OmsOrderRequest.java
  13. 260 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/entity/OmsOrder.java
  14. 96 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/entity/OmsOrderBatch.java
  15. 136 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/entity/OmsOrderItem.java
  16. 22 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/feign/RemoteCheckoutService.java
  17. 38 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/vo/OmsOrderBatchSubmitRespVO.java
  18. 67 0
      hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/vo/OrderConditionQueryResponseVO.java
  19. 4 0
      hnqz-upms/hnqz-upms-biz/pom.xml
  20. 35 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/config/SequenceConfig.java
  21. 5 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java
  22. 2 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleInput.java
  23. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectTypeEnum.java
  24. 8 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserMapper.java
  25. 25 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPayOffService.java
  26. 254 30
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmPayOffServiceImpl.java
  27. 26 0
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysUserMapper.xml

+ 29 - 0
db/v2022/3upm_sequence.sql

@@ -0,0 +1,29 @@
+USE `hnqzx`;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for upms_sequence
+-- ----------------------------
+DROP TABLE IF EXISTS `upms_sequence`;
+CREATE TABLE `upms_sequence`
+(
+    `id`           BIGINT                            NOT NULL AUTO_INCREMENT,
+    `value`        BIGINT                            NOT NULL,
+    `name`         VARCHAR(32) CHARACTER SET utf8mb4 NOT NULL,
+    `gmt_create`   DATETIME                          NOT NULL,
+    `gmt_modified` DATETIME                          NOT NULL,
+    PRIMARY KEY (`id`) USING BTREE,
+    UNIQUE KEY `uk_name` (`name`) USING BTREE
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_general_ci;
+
+-- ----------------------------
+-- Records of upms_sequence
+-- ----------------------------
+BEGIN;
+COMMIT;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 5 - 5
hnqz-common/hnqz-common-bom/pom.xml

@@ -98,11 +98,11 @@
 				<artifactId>hnqz-common-feign</artifactId>
 				<artifactId>hnqz-common-feign</artifactId>
 				<version>${hnqz.version}</version>
 				<version>${hnqz.version}</version>
 			</dependency>
 			</dependency>
-			<!--<dependency>-->
-			<!--	<groupId>com.qunzhixinxi</groupId>-->
-			<!--	<artifactId>hnqz-common-sequence</artifactId>-->
-			<!--	<version>${hnqz.version}</version>-->
-			<!--</dependency>-->
+			<dependency>
+				<groupId>com.qunzhixinxi</groupId>
+				<artifactId>hnqz-common-sequence</artifactId>
+				<version>${hnqz.version}</version>
+			</dependency>
 			<dependency>
 			<dependency>
 				<groupId>com.qunzhixinxi</groupId>
 				<groupId>com.qunzhixinxi</groupId>
 				<artifactId>hnqz-common-swagger</artifactId>
 				<artifactId>hnqz-common-swagger</artifactId>

+ 1 - 1
hnqz-common/pom.xml

@@ -45,7 +45,7 @@
 		<module>hnqz-common-oss</module>
 		<module>hnqz-common-oss</module>
 		<module>hnqz-common-security</module>
 		<module>hnqz-common-security</module>
 		<module>hnqz-common-sentinel</module>
 		<module>hnqz-common-sentinel</module>
-		<!--<module>hnqz-common-sequence</module>-->
+		<module>hnqz-common-sequence</module>
 		<module>hnqz-common-swagger</module>
 		<module>hnqz-common-swagger</module>
 		<!--<module>hnqz-common-transaction</module>-->
 		<!--<module>hnqz-common-transaction</module>-->
 		<module>hnqz-common-ding</module>
 		<module>hnqz-common-ding</module>

+ 36 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/bo/OmsOrderBO.java

@@ -0,0 +1,36 @@
+package net.yaoyi.gulop.checkout.api.bo;
+
+import lombok.Data;
+import lombok.ToString;
+import net.yaoyi.gulop.checkout.api.entity.OmsOrder;
+import net.yaoyi.gulop.checkout.api.entity.OmsOrderItem;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * {@code OmsOrderBO} 类
+ * <p>
+ * 订单实体类
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+@Data
+@ToString(callSuper = true)
+public class OmsOrderBO implements Serializable {
+    private static final long serialVersionUID = 449607309854199453L;
+
+    /**
+     * 订单信息
+     */
+    private OmsOrder omsOrder;
+
+    /**
+     * 订单详情
+     */
+    private List<OmsOrderItem> orderItems;
+
+}

+ 34 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/bo/OmsOrderBatchBO.java

@@ -0,0 +1,34 @@
+package net.yaoyi.gulop.checkout.api.bo;
+
+import lombok.Data;
+import lombok.ToString;
+import net.yaoyi.gulop.checkout.api.entity.OmsOrderBatch;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * {@code OmsOrderBatchBO} 类
+ * 订单批次实体
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+@Data
+@ToString(callSuper = true)
+public class OmsOrderBatchBO implements Serializable {
+    private static final long serialVersionUID = -4299137853046041445L;
+
+    /**
+     * 订单批次
+     */
+    private OmsOrderBatch orderBatch;
+
+    /**
+     * 订单批次中的订单内容
+     */
+    private List<OmsOrderBO> orders;
+
+}

+ 136 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/bo/OmsOrderItemBO.java

@@ -0,0 +1,136 @@
+package net.yaoyi.gulop.checkout.api.bo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * {@code OrderItem} 类
+ * 订单详情实体
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+@Data
+@ToString(callSuper = true)
+@TableName(value = "oms_order_item", autoResultMap = true)
+public class OmsOrderItemBO implements Serializable {
+    private static final long serialVersionUID = 1477996887601731764L;
+
+    // ~======================================================================================================  order
+    /**
+     * id
+     */
+    @TableId(value = "item_id", type = IdType.AUTO)
+    public Long id;
+
+    /**
+     * 订单id
+     */
+    public Long orderId;
+
+    /**
+     * 订单号
+     */
+    private String orderNo;
+
+    // ~====================================================================================================== task
+
+    /**
+     * 任务id
+     */
+    private Long taskId;
+
+    /**
+     * 任务类型
+     */
+    @TableField(value = "task_type_name")
+    private String taskType;
+
+    /**
+     * 任务积分
+     */
+    private Long taskScore;
+
+    /**
+     * 任务内容
+     */
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String, Object> taskContent;
+
+    /**
+     * 任务数量
+     */
+    private Integer quantity;
+
+    /**
+     * 实际获得金额
+     */
+    private Long amount;
+
+    // ~====================================================================================================== project
+
+    /**
+     * 项目id
+     */
+    private Long projectId;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+
+    // ~====================================================================================================== extra
+
+    /**
+     * 赠送积分
+     */
+    private Long credit;
+
+    /**
+     * 赠送成长值
+     */
+    private Long growth;
+
+    // ~====================================================================================================== 创建信息
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createdTime;
+
+    /**
+     * 修改时间
+     */
+    @ApiModelProperty(value = "修改时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime modifiedTime;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createdBy;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String modifiedBy;
+}

+ 18 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/constant/CheckoutCaches.java

@@ -0,0 +1,18 @@
+package net.yaoyi.gulop.checkout.api.constant;
+
+/**
+ * 支付中心缓存常量类
+ *
+ * @author jimmy
+ * @date 2022/05/11 13:35
+ */
+public final class CheckoutCaches {
+
+    private CheckoutCaches() {
+    }
+
+    /**
+     * 批量订单缓存模板
+     */
+    public static final String ORDER_BATCH_TOKEN_PATTERN = "%d:order_batch:%d:token";
+}

+ 30 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/constant/CheckoutConstants.java

@@ -0,0 +1,30 @@
+package net.yaoyi.gulop.checkout.api.constant;
+
+/**
+ * {@code CheckoutConstants}  类
+ *  支付中心常用常量
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+public final class CheckoutConstants {
+
+    private CheckoutConstants(){}
+
+    /**
+     * 随机token长度
+     */
+    public static final int RANDOM_TOKEN_LENGTH = 6;
+
+    /**
+     * 订单token过期时间
+     */
+    public static final int ORDER_TOKEN_TTL = 3;
+
+    /**
+     * 订单结算精度,默认1分钱(RMB)
+     */
+    public static final double ORDER_AMOUNT_PRECISION = 0.01;
+}

+ 33 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/constant/enums/CheckoutState.java

@@ -0,0 +1,33 @@
+package net.yaoyi.gulop.checkout.api.constant.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * {@code CheckoutState} 类
+ * 支付中心状态
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+public final class CheckoutState {
+
+    // 订单状态
+    @Getter
+    @AllArgsConstructor
+    public enum OrderState {
+
+        NEW_ONE("NEW", "待支付"),
+        IN_TRANSIT("IN_TRANSIT", "在途支付"),
+        FAILED("FAILED", "支付失败"),
+        OK("OK", "支付成功");
+
+        @EnumValue
+        private final String state;
+
+        private final String message;
+    }
+}

+ 94 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/constant/enums/CheckoutType.java

@@ -0,0 +1,94 @@
+package net.yaoyi.gulop.checkout.api.constant.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * {@code CheckoutType} 类
+ * 支付类型常量枚举
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+public final class CheckoutType {
+
+    // 订单类型
+    @Getter
+    @AllArgsConstructor
+    public enum OrderType {
+
+        NORMAL("NORMAL", "普通订单");
+
+        @EnumValue
+        private final String type;
+
+        private final String message;
+
+    }
+
+    // 订单支付方式类型
+    @Getter
+    @AllArgsConstructor
+    public enum OrderPaymentType {
+
+        GULOP("GULOP", "GULOP"),
+        DING("DING", "人力家"),
+        TAX_HELPOR("TAX_HELPOR", "税邦云"),
+        OLADING("OLADING", "自由职家"),
+        YEE("YEE", "易联数科");
+
+        @EnumValue
+        private final String type;
+
+        private final String message;
+
+    }
+
+    // 订单来源类型
+    @Getter
+    @AllArgsConstructor
+    public enum OrderSourceType {
+
+        PC("PC", "PC端"),
+        APP("APP", "移动端"),
+        MP("MP", "小程序");
+
+        @EnumValue
+        private final String type;
+
+        private final String message;
+    }
+
+
+    // 打款方式
+    @Getter
+    @AllArgsConstructor
+    public enum TransferType {
+
+        BALANCE("BALANCE", "账户余额"),
+        BANK_CARD("BANK_CARD", "银行卡");
+
+        @EnumValue
+        private final String type;
+
+        private final String message;
+
+    }
+
+    // 提交端类型
+    @Getter
+    @AllArgsConstructor
+    public enum SubmitEndType {
+
+        CSO("CSO", "CSO"),
+        HCP("HCP", "HCP");
+
+        @EnumValue
+        private final String type;
+
+        private final String message;
+    }
+}

+ 47 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/dto/OmsOrderItemRequest.java

@@ -0,0 +1,47 @@
+package net.yaoyi.gulop.checkout.api.dto;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * 订单详情请求相关
+ *
+ * @author jimmy
+ * @date 2022/04/26 15/47
+ */
+public class OmsOrderItemRequest implements Serializable {
+    private static final long serialVersionUID = -9017827574652806694L;
+
+    /**
+     * {@code OrderItemDTO} 类
+     * <p>
+     * 订单项dto
+     *
+     * @author Hengchen.Sun
+     * @version 1.0.0
+     * @date 2022-02-27
+     * @since ver.1.0.0
+     */
+    @Data
+    @ToString
+    public static class OrderItemDTO implements Serializable {
+
+        private static final long serialVersionUID = -4103934192340866985L;
+
+
+        private Long taskId;
+
+        private Long taskScore;
+
+        private String taskContent;
+
+        private Long quantity;
+
+        private Long projectId;
+
+        private String projectName;
+
+    }
+}

+ 235 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/dto/OmsOrderRequest.java

@@ -0,0 +1,235 @@
+package net.yaoyi.gulop.checkout.api.dto;
+
+import lombok.Data;
+import lombok.ToString;
+import net.yaoyi.gulop.checkout.api.constant.enums.CheckoutState;
+import net.yaoyi.gulop.checkout.api.constant.enums.CheckoutType;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 订单相关请求
+ *
+ * @author jimmy
+ * @date 2022/04/26 15/44
+ */
+public class OmsOrderRequest implements Serializable {
+    private static final long serialVersionUID = 193955616570220465L;
+
+    /**
+     * {@code OrderBatchSubmitParams} 类
+     * <p>
+     * 订单批量提交dto
+     *
+     * @author Hengchen.Sun
+     * @version 1.0.0
+     * @date 2022-02-27
+     * @since ver.1.0.0
+     */
+    @Data
+    @ToString
+    public static class OrderBatchSubmitParams implements Serializable {
+        private static final long serialVersionUID = 5866003526004279799L;
+
+        /**
+         * 批量号
+         */
+        @NotBlank(message = "批量号必填")
+        private String batchNo;
+
+        /**
+         * 订单提交信息
+         */
+        private List<OrderSubmitParams> orderSubmits;
+
+        /**
+         * 订单数
+         */
+        @NotNull(message = "订单数必填")
+        @Min(value = 1, message = "至少需要一个订单")
+        private Long orderQuantity;
+
+        /**
+         * 支付人数
+         */
+        @NotNull(message = "支付人数必填")
+        @Min(value = 1, message = "至少需要支付一人")
+        private Long payeeQuantity;
+
+        /**
+         * 防重令牌
+         **/
+        @NotBlank(message = "防重令牌必填")
+        private String orderToken;
+
+        /**
+         * 批量应付总数
+         **/
+        @NotNull(message = "批量应付总额必填")
+        @Min(value = 1, message = "批量支付金额必须大于0元")
+        private Long batchAmountPayable;
+
+
+        /**
+         * 操作端
+         */
+        @NotNull(message = "操作端必填")
+        private CheckoutType.SubmitEndType endType;
+
+        /**
+         * 订单备注
+         **/
+        private String remarks;
+    }
+
+    /**
+     * {@code OmsOrderRequest.OrderSubmitParams} 类
+     * <p>
+     * 订单提交dto
+     *
+     * @author Hengchen.Sun
+     * @version 1.0.0
+     * @date 2022-02-27
+     * @since ver.1.0.0
+     */
+    @Data
+    @ToString
+    public static class OrderSubmitParams implements Serializable {
+        private static final long serialVersionUID = 5866003526004279799L;
+
+        /**
+         * 用户id
+         **/
+        @NotNull(message = "收款人id必填")
+        private Long payeeId;
+
+        /**
+         * 订单来源
+         */
+        @NotNull(message = "订单来源必填")
+        private CheckoutType.OrderSourceType sourceType;
+
+        /**
+         * 支付方式
+         **/
+        @NotNull(message = "支付方式必填")
+        private CheckoutType.OrderPaymentType paymentType;
+
+        /**
+         * 打款方式
+         */
+        @NotNull(message = "打款方式必填")
+        private CheckoutType.TransferType transferType;
+
+        /**
+         * 库存编号
+         */
+        private List<String> wareSn;
+
+        /**
+         * 订单应付价格
+         **/
+        @NotNull(message = "订单应付价格必填")
+        private Long amountPayable;
+
+        /**
+         * 发票类目
+         */
+        @NotBlank(message = "发票类目必填")
+        private String receiptCategoryName;
+
+        /**
+         * 结算比例
+         */
+        @NotBlank(message = "结算比例必填")
+        private String settlementRatio;
+
+        /**
+         * 订单备注
+         **/
+        private String remarks;
+    }
+
+    /**
+     * {@code OmsOrderRequest.PageParams}
+     * <p>
+     * 分页查询参数
+     *
+     * @author Hengchen.Sun
+     * @version 1.0.0
+     * @date 2022/03/01 18:27
+     */
+    @Data
+    @ToString
+    public static class PageParams implements Serializable {
+
+        private static final long serialVersionUID = 9135224969049161749L;
+
+        /**
+         * 收款人姓名
+         */
+        private String payeeName;
+
+        /**
+         * 收款人身份证号
+         */
+        private String payeeIdCard;
+
+        /**
+         * 订单状态
+         */
+        private CheckoutState.OrderState orderState;
+
+        /**
+         * 订单批次号
+         */
+        private String orderBatchNo;
+
+        /**
+         * 订单开始时间
+         */
+        private LocalDateTime orderStartTime;
+
+        /**
+         * 订单结束时间
+         */
+        private LocalDateTime orderEndTime;
+
+        /**
+         * 代征主体
+         */
+        private CheckoutType.OrderPaymentType paymentType;
+
+        /**
+         * 付款方式
+         */
+        private CheckoutType.TransferType transferType;
+
+        /**
+         * 订单号
+         */
+        private String orderNo;
+
+        /**
+         * 商户备注
+         */
+        private String orderRemark;
+
+        /**
+         * 订单项目号
+         */
+        private String orderProjectId;
+
+        /**
+         * 订单项目名称
+         */
+        private String orderProjectName;
+
+    }
+
+}

+ 260 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/entity/OmsOrder.java

@@ -0,0 +1,260 @@
+package net.yaoyi.gulop.checkout.api.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+import net.yaoyi.gulop.checkout.api.constant.enums.CheckoutType;
+import net.yaoyi.gulop.checkout.api.constant.enums.CheckoutState;
+import net.yaoyi.gulop.common.core.constant.enums.CommonFlag;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * {@code OmsOrder} 类
+ * <p>
+ * 订单实体类
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+@Data
+@ToString(callSuper = true)
+@TableName(value = "oms_order")
+public class OmsOrder implements Serializable {
+    private static final long serialVersionUID = 449607309854199453L;
+
+    // ~================================================================================================ base info
+
+    /**
+     * id
+     */
+    @TableId(value = "order_id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 订单号
+     */
+    private String orderSn;
+
+    /**
+     * 订单批次id
+     */
+    @TableField(value = "batch_id")
+    private Long batchId;
+
+    /**
+     * 订单批次号
+     */
+    @TableField(exist = false)
+    private String batchNo;
+
+    /**
+     * 项目编号
+     */
+    @TableField(exist = false)
+    private String projectId;
+
+    /**
+     * 项目名称
+     */
+    @TableField(exist = false)
+    private String projectName;
+
+    /**
+     * 订单总额(会员应收金额)
+     */
+    private Long recAmount;
+
+    /**
+     * 应付总额(包含:会员实收和平台服务费两部分)
+     */
+    private Long payAmount;
+
+    /**
+     * 结算比例
+     */
+    private String settlementRatio;
+
+    /**
+     * 订单来源[0->PC订单(企业支付到个人);1->app订单(个人提现)]
+     */
+    private CheckoutType.OrderSourceType sourceType;
+
+    /**
+     * 订单状态【0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单】
+     */
+    @TableField(value = "order_state")
+    private CheckoutState.OrderState state;
+
+    /**
+     * 可操作性标记:0->正常,1->锁定 9->删除
+     */
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private CommonFlag.OptFlag optFlag;
+
+    /**
+     * 订单备注
+     */
+    private String remarks;
+
+    /**
+     * 商家备注
+     */
+    @TableField(exist = false)
+    private String batchRemarks;
+
+    // ~=============================================================================================== platform rate
+
+    /**
+     * 服务费率
+     */
+    private Long serviceRate;
+
+    /**
+     * 服务费
+     */
+    private Long serviceCharge;
+
+
+    // ~================================================================================================ discount
+
+    /**
+     * 使用的优惠券
+     */
+    private Long couponId;
+
+    /**
+     * 优惠券抵扣金额
+     */
+    private Long couponAmount;
+
+    /**
+     * 促销优化金额(促销价、满减、阶梯价)
+     */
+    private Long promotionAmount;
+
+    /**
+     * 下单时使用的积分
+     */
+    private Long creditCost;
+
+    /**
+     * 积分抵扣金额
+     */
+    private Long creditAmount;
+
+    /**
+     * 后台调整订单使用的折扣金额
+     */
+    private Long discountAmount;
+
+    // ~================================================================================================ gig
+
+    /**
+     * 支付方式【0 -> gulop; 1->人力家;2->税邦云;3->自由职家;4->易联数科;】
+     */
+    private CheckoutType.OrderPaymentType paymentType;
+
+    // ~================================================================================================= growth
+
+    /**
+     * 可以获得的积分
+     */
+    private Long credit;
+
+    /**
+     * 可以获得的成长值
+     */
+    private Long growth;
+
+    // ~================================================================================================== receipt
+
+    /**
+     * 发票类目
+     */
+    @TableField(value = "receipt_cate_name")
+    private String receiptCategoryName;
+
+    // ~=================================================================================================== member
+
+    /**
+     * 会员id
+     */
+    private Long payeeId;
+
+    /**
+     * 收款会员名称
+     */
+    private String payeeName;
+
+    /**
+     * 收款联系方式
+     */
+    private String payeePhone;
+
+    /**
+     * 身份证号
+     */
+    private String payeeIdCard;
+
+    /**
+     * 打款方式
+     */
+    private CheckoutType.TransferType transferType;
+
+    /**
+     * 收款人账户
+     */
+    private String payeeAccount;
+
+    // ~===================================================================================================== datetime
+
+    /**
+     * 发送到结算服务时间
+     */
+    private LocalDateTime paymentTime;
+
+    /**
+     * 妥投时间(回调)
+     */
+    private LocalDateTime deliveredTime;
+
+    // ~====================================================================================================== 创建信息
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createdTime;
+
+    /**
+     * 修改时间
+     */
+    @ApiModelProperty(value = "修改时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime modifiedTime;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createdBy;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String modifiedBy;
+}

+ 96 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/entity/OmsOrderBatch.java

@@ -0,0 +1,96 @@
+package net.yaoyi.gulop.checkout.api.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+import net.yaoyi.gulop.checkout.api.constant.enums.CheckoutType;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * {@code OrderBatch} 类
+ * 订单批次实体
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+@Data
+@ToString(callSuper = true)
+@TableName(value = "oms_order_batch")
+public class OmsOrderBatch implements Serializable {
+    private static final long serialVersionUID = -4299137853046041445L;
+
+    /**
+     * id
+     */
+    @TableId(value = "batch_id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 订单批次编号
+     */
+    private String batchNo;
+
+    /**
+     * 提交端类型
+     */
+    private CheckoutType.SubmitEndType endType;
+
+    /**
+     * 订单数
+     */
+    private Integer orderQuantity;
+
+    /**
+     * 支付人数
+     */
+    private Integer payeeQuantity;
+
+    /**
+     * 批量应付总数
+     **/
+    private Long batchAmountPayable;
+
+    /**
+     * 订单批次备注
+     */
+    public String remarks;
+
+    // ~====================================================================================================== 创建信息
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createdTime;
+
+    /**
+     * 修改时间
+     */
+    @ApiModelProperty(value = "修改时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime modifiedTime;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createdBy;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String modifiedBy;
+}

+ 136 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/entity/OmsOrderItem.java

@@ -0,0 +1,136 @@
+package net.yaoyi.gulop.checkout.api.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+/**
+ * {@code OrderItem} 类
+ * 订单详情实体
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+@Data
+@ToString(callSuper = true)
+@TableName(value = "oms_order_item", autoResultMap = true)
+public class OmsOrderItem implements Serializable {
+    private static final long serialVersionUID = 1477996887601731764L;
+
+    // ~======================================================================================================  order
+    /**
+     * id
+     */
+    @TableId(value = "item_id", type = IdType.AUTO)
+    public Long id;
+
+    /**
+     * 订单id
+     */
+    public Long orderId;
+
+    /**
+     * 订单号
+     */
+    private String orderNo;
+
+    // ~====================================================================================================== task
+
+    /**
+     * 任务id
+     */
+    private Long taskId;
+
+    /**
+     * 任务类型
+     */
+    @TableField(value = "task_type_name")
+    private String taskType;
+
+    /**
+     * 任务积分
+     */
+    private Long taskScore;
+
+    /**
+     * 任务内容
+     */
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private Map<String, Object> taskContent;
+
+    /**
+     * 任务数量
+     */
+    private Long quantity;
+
+    /**
+     * 实际获得金额
+     */
+    private Long amount;
+
+    // ~====================================================================================================== project
+
+    /**
+     * 项目id
+     */
+    private Long projectId;
+
+    /**
+     * 项目名称
+     */
+    private String projectName;
+
+
+    // ~====================================================================================================== extra
+
+    /**
+     * 赠送积分
+     */
+    private Long credit;
+
+    /**
+     * 赠送成长值
+     */
+    private Long growth;
+
+    // ~====================================================================================================== 创建信息
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createdTime;
+
+    /**
+     * 修改时间
+     */
+    @ApiModelProperty(value = "修改时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime modifiedTime;
+
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createdBy;
+
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String modifiedBy;
+}

+ 22 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/feign/RemoteCheckoutService.java

@@ -0,0 +1,22 @@
+package net.yaoyi.gulop.checkout.api.feign;
+
+import net.yaoyi.gulop.common.core.constant.ServiceNameConstants;
+
+import org.springframework.cloud.openfeign.FeignClient;
+
+
+
+/**
+ * {@code remoteCheckoutService}
+ * <p>
+ * 收银台远端接口
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2021/11/22 13:15
+ */
+@FeignClient(contextId = "remoteCheckoutService", value = ServiceNameConstants.CHECKOUT_SERVICE)
+public interface RemoteCheckoutService {
+
+
+}

+ 38 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/vo/OmsOrderBatchSubmitRespVO.java

@@ -0,0 +1,38 @@
+package net.yaoyi.gulop.checkout.api.vo;
+
+import lombok.Data;
+import lombok.ToString;
+import net.yaoyi.gulop.checkout.api.bo.OmsOrderBO;
+import net.yaoyi.gulop.checkout.api.bo.OmsOrderBatchBO;
+import net.yaoyi.gulop.checkout.api.entity.OmsOrder;
+import net.yaoyi.gulop.checkout.api.entity.OmsOrderBatch;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * {@code OmsOrderBatchSubmitRespVO} 类
+ *
+ *  批量提交订单响应vo
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022-02-27
+ * @since ver.1.0.0
+ */
+@Data
+@ToString
+public class OmsOrderBatchSubmitRespVO implements Serializable {
+
+    private static final long serialVersionUID = 6579521472078974568L;
+
+    /**
+     * 订单批次
+     */
+    private OmsOrderBatch orderBatch;
+
+    /**
+     * 订单批次中的订单内容
+     */
+    private List<OmsOrderBO> orders;
+}

+ 67 - 0
hnqz-upms/hnqz-upms-api/src/main/java/net/yaoyi/gulop/checkout/api/vo/OrderConditionQueryResponseVO.java

@@ -0,0 +1,67 @@
+package net.yaoyi.gulop.checkout.api.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+import lombok.ToString;
+import net.yaoyi.gulop.checkout.api.entity.OmsOrder;
+import net.yaoyi.gulop.common.data.resolver.GulopPageResolver;
+
+import java.io.Serializable;
+
+/**
+ * {@code OrderConditionQueryResponseVO}
+ * <p>
+ * 订单条件查询结果vo
+ *
+ * @author Hengchen.Sun
+ * @version 1.0.0
+ * @date 2022/03/02 15:37
+ */
+@Data
+@ToString
+public class OrderConditionQueryResponseVO implements Serializable {
+    private static final long serialVersionUID = 1699707623462861913L;
+
+    public OrderConditionQueryResponseVO() {
+        this.amount = 0L;
+        this.amountPaid = 0L;
+        this.amountInTransit = 0L;
+        this.amountCharge = 0L;
+        this.amountFailed = 0L;
+    }
+
+    /**
+     * 付款金额发起
+     */
+    private Long amount;
+
+    /**
+     * 服务费
+     */
+    private Long amountCharge;
+
+    /**
+     * 在途支付
+     */
+    private Long amountInTransit;
+
+    /**
+     * 付款成功
+     */
+    private Long amountPaid;
+
+    /**
+     * 付款失败
+     */
+    private Long amountFailed;
+
+    /**
+     * 分页信息
+     */
+    private GulopPageResolver<OmsOrder> page;
+
+    public void setPage(Page<OmsOrder> p){
+        page = GulopPageResolver.of(p);
+    }
+
+}

+ 4 - 0
hnqz-upms/hnqz-upms-biz/pom.xml

@@ -33,6 +33,10 @@
 	<description>hnqz 通用用户权限管理系统业务处理模块</description>
 	<description>hnqz 通用用户权限管理系统业务处理模块</description>
 
 
 	<dependencies>
 	<dependencies>
+		<dependency>
+			<groupId>com.qunzhixinxi</groupId>
+			<artifactId>hnqz-common-sequence</artifactId>
+		</dependency>
 		<dependency>
 		<dependency>
 			<groupId>com.qunzhixinxi</groupId>
 			<groupId>com.qunzhixinxi</groupId>
 			<artifactId>hnqz-common-mq</artifactId>
 			<artifactId>hnqz-common-mq</artifactId>

+ 35 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/config/SequenceConfig.java

@@ -0,0 +1,35 @@
+package com.qunzhixinxi.hnqz.admin.config;
+
+import cn.hutool.core.date.DateUtil;
+import com.qunzhixinxi.hnqz.common.data.tenant.TenantContextHolder;
+import com.qunzhixinxi.hnqz.common.sequence.builder.DbSeqBuilder;
+import com.qunzhixinxi.hnqz.common.sequence.properties.SequenceDbProperties;
+import com.qunzhixinxi.hnqz.common.sequence.sequence.Sequence;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+
+/**
+ * @author hnqz
+ * @date 2019-05-26
+ * <p>
+ * 设置发号器生成规则
+ */
+@Configuration
+public class SequenceConfig {
+
+	/**
+	 * 订单流水号发号器
+	 * @param dataSource
+	 * @param properties
+	 * @return
+	 */
+	@Bean
+	public Sequence paySequence(DataSource dataSource, SequenceDbProperties properties) {
+		return DbSeqBuilder.create()
+				.bizName(() -> String.format("payoff_%s_%s", TenantContextHolder.getTenantId(), DateUtil.today()))
+				.dataSource(dataSource).step(properties.getStep()).retryTimes(properties.getRetryTimes())
+				.tableName(properties.getTableName()).build();
+	}
+}

+ 5 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmPayOffController.java

@@ -303,6 +303,11 @@ public class WmPayOffController {
 		}
 		}
 	}
 	}
 
 
+	/**
+	 * 结算
+	 * @param input
+	 * @return
+	 */
 	@ApiOperation(value = "结算-自由选择渠道", notes = "结算-自由选择渠道")
 	@ApiOperation(value = "结算-自由选择渠道", notes = "结算-自由选择渠道")
 	@SysLog("结算-自由选择渠道")
 	@SysLog("结算-自由选择渠道")
 	@PostMapping("/settleIssueBySubType")
 	@PostMapping("/settleIssueBySubType")

+ 2 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/entity/input/WmScorePackageSettleInput.java

@@ -7,6 +7,7 @@ import lombok.Data;
 
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
 
 
@@ -25,7 +26,7 @@ public class WmScorePackageSettleInput {
 	/**
 	/**
 	 * 发票类目
 	 * 发票类目
 	 */
 	 */
-	@NotBlank(message = "发票类目必填")
+	@NotNull(message = "发票类目必填")
 	private Integer invoiceCategory;
 	private Integer invoiceCategory;
 
 
 	@NotBlank(message = "结算token必填")
 	@NotBlank(message = "结算token必填")

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/enums/SubjectTypeEnum.java

@@ -12,6 +12,7 @@ public enum SubjectTypeEnum {
 
 
 	TYPE_RENLIJIA("0", "人力家"),
 	TYPE_RENLIJIA("0", "人力家"),
 	TYPE_SHUIBANGYUN("1", "税邦云"),
 	TYPE_SHUIBANGYUN("1", "税邦云"),
+	TYPE_OLADING("2", "自由职家"),
 
 
 	ENABLE_FLAG_FALSE("0", "无效"),
 	ENABLE_FLAG_FALSE("0", "无效"),
 	ENABLE_FLAG_TRUE("1", "有效"),
 	ENABLE_FLAG_TRUE("1", "有效"),

+ 8 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserMapper.java

@@ -107,4 +107,12 @@ public interface SysUserMapper extends DataScopeMapper<SysUser> {
 	 */
 	 */
 	List<SysUser> selectByDeptIdAndRoleId(@Param("deptId") Integer deptId, @Param("realNameOrPhone") String realNameOrPhone,
 	List<SysUser> selectByDeptIdAndRoleId(@Param("deptId") Integer deptId, @Param("realNameOrPhone") String realNameOrPhone,
 										  @Param("roleList") List<Integer> roleList);
 										  @Param("roleList") List<Integer> roleList);
+
+	/**
+	 * 获取用户信息
+	 *
+	 * @param userIds 用户id列表
+	 * @return 用户信息集合
+	 */
+	List<SysUser> listUserDetails(@Param(value = "userIds") List<Integer> userIds);
 }
 }

+ 25 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmPayOffService.java

@@ -17,12 +17,24 @@ import java.util.List;
  */
  */
 public interface WmPayOffService extends IService<WmPayOff> {
 public interface WmPayOffService extends IService<WmPayOff> {
 
 
-	public R saveSettleInfo(List<WmScorePackage> wsList) throws Exception;
+	R saveSettleInfo(List<WmScorePackage> wsList) throws Exception;
 
 
+	/**
+	 * 获取结算信息
+	 *
+	 * @param input 参数
+	 * @return 结算信息
+	 */
 	R settleById(WmScorePackageSettleInput input);
 	R settleById(WmScorePackageSettleInput input);
 
 
 	R settleIssue(WmScorePackageSettleInput input);
 	R settleIssue(WmScorePackageSettleInput input);
 
 
+	/**
+	 * 业务保存操作
+	 *
+	 * @param input 提交信息
+	 * @return 保存结果
+	 */
 	R settleSave(WmScorePackageSettleInput input);
 	R settleSave(WmScorePackageSettleInput input);
 
 
 	R settleReIssue(WmScorePackageSettleInput input);
 	R settleReIssue(WmScorePackageSettleInput input);
@@ -35,8 +47,20 @@ public interface WmPayOffService extends IService<WmPayOff> {
 	 */
 	 */
 	R settleSubmit(WmScorePackageSettleInput input);
 	R settleSubmit(WmScorePackageSettleInput input);
 
 
+	/**
+	 * 财务回退操作
+	 *
+	 * @param input 提交参数
+	 * @return 操作结果
+	 */
 	R settleBack(WmScorePackageSettleInput input);
 	R settleBack(WmScorePackageSettleInput input);
 
 
+	/**
+	 * 提交结算
+	 *
+	 * @param input 提交结算信息
+	 * @return 提交结果
+	 */
 	R settleIssueBySubType(WmScorePackageSettleInput input);
 	R settleIssueBySubType(WmScorePackageSettleInput input);
 
 
 	R settleReIssueBySubType(WmScorePackageSettleInput input);
 	R settleReIssueBySubType(WmScorePackageSettleInput input);

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

@@ -1,5 +1,7 @@
 package com.qunzhixinxi.hnqz.admin.service.impl;
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.IdUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
@@ -11,9 +13,13 @@ import com.qunzhixinxi.hnqz.admin.entity.input.SettleAmountMonitorInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.SettleNoteStatusOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.SettleNoteStatusOutput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
 import com.qunzhixinxi.hnqz.admin.entity.output.SettleAmountMonitorOutput;
 import com.qunzhixinxi.hnqz.admin.entity.output.SettleAmountMonitorOutput;
+import com.qunzhixinxi.hnqz.admin.enums.GigChannelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.GigTypeEnum;
+import com.qunzhixinxi.hnqz.admin.enums.OladingCertStatus;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.enums.SubjectTypeEnum;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.SysUserSubMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmPayOffMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.WmPayOffMapper;
 import com.qunzhixinxi.hnqz.admin.service.*;
 import com.qunzhixinxi.hnqz.admin.service.*;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.core.util.R;
@@ -24,6 +30,7 @@ import com.qunzhixinxi.hnqz.common.ding.service.DingService;
 import com.qunzhixinxi.hnqz.common.rabbitmq.client.RabbitMqClient;
 import com.qunzhixinxi.hnqz.common.rabbitmq.client.RabbitMqClient;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
+import com.qunzhixinxi.hnqz.common.sequence.sequence.Sequence;
 import com.qunzhixinxi.hnqz.common.taxhelper.config.TaxHelperConfig;
 import com.qunzhixinxi.hnqz.common.taxhelper.config.TaxHelperConfig;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperSettlementModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.model.TaxHelperSettlementModel;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperSettlementRequest;
 import com.qunzhixinxi.hnqz.common.taxhelper.entity.request.TaxHelperSettlementRequest;
@@ -32,8 +39,12 @@ import com.qunzhixinxi.hnqz.common.taxhelper.enums.TaxHelperCertStatus;
 import com.qunzhixinxi.hnqz.common.taxhelper.service.TaxHelperService;
 import com.qunzhixinxi.hnqz.common.taxhelper.service.TaxHelperService;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import net.yaoyi.gulop.checkout.api.constant.enums.CheckoutType;
+import net.yaoyi.gulop.checkout.api.dto.OmsOrderRequest;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang.RandomStringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
+import org.springframework.cloud.function.context.catalog.FunctionCatalogEvent;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -42,7 +53,9 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 
 /**
 /**
  * 结算表
  * 结算表
@@ -57,6 +70,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 
 	private final WmPayOffMapper wmPayOffMapper;
 	private final WmPayOffMapper wmPayOffMapper;
 	private final SysUserMapper sysUserMapper;
 	private final SysUserMapper sysUserMapper;
+	private final SysUserSubMapper sysUserSubMapper;
 	private final DingService dingService;
 	private final DingService dingService;
 	private final WmScorePackageService wmScorePackageService;
 	private final WmScorePackageService wmScorePackageService;
 	private final WmTaskService wmTaskService;
 	private final WmTaskService wmTaskService;
@@ -72,6 +86,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 	private final TaxHelperService taxHelperService;
 	private final TaxHelperService taxHelperService;
 	private final TaxNotifyConfig taxNotifyConfig;
 	private final TaxNotifyConfig taxNotifyConfig;
 	private final RabbitMqClient rabbitMqClient;
 	private final RabbitMqClient rabbitMqClient;
+	private final Sequence paySequence;
 
 
 	@Override
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@Transactional(rollbackFor = Exception.class)
@@ -162,7 +177,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 //			noteService.saveBatch(notes);
 //			noteService.saveBatch(notes);
 		} else {
 		} else {
 //			notes.forEach(item -> item.setRealName(sysUserMapper.selectById(item.getUserId()).getRealname()));
 //			notes.forEach(item -> item.setRealName(sysUserMapper.selectById(item.getUserId()).getRealname()));
-			notes.forEach(item->{
+			notes.forEach(item -> {
 				SysUser user = sysUserMapper.selectById(item.getUserId());
 				SysUser user = sysUserMapper.selectById(item.getUserId());
 				item.setRealName(user.getRealname());
 				item.setRealName(user.getRealname());
 				item.setIdCardNumber(user.getIdCardNumber());
 				item.setIdCardNumber(user.getIdCardNumber());
@@ -260,36 +275,31 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 
 		for (WmScorePackageSettleNote note : notes) {
 		for (WmScorePackageSettleNote note : notes) {
 			SysUser user = sysUserMapper.selectById(note.getUserId());
 			SysUser user = sysUserMapper.selectById(note.getUserId());
-			if(StringUtils.isEmpty(user.getIdCardNumber())){
-				return R.failed(user.getRealname()+"未认证,不能发起结算");
+			if (StringUtils.isEmpty(user.getIdCardNumber())) {
+				return R.failed(user.getRealname() + "未认证,不能发起结算");
 			}
 			}
-			if("0".equals(input.getSubType())){
+			if ("0".equals(input.getSubType())) {
 				if (!Objects.equals(user.getRljCertStatus(), DingEnum.CER_STATUS_1.getType())) {
 				if (!Objects.equals(user.getRljCertStatus(), DingEnum.CER_STATUS_1.getType())) {
-					return R.failed(user.getRealname()+"未认证,不能发起结算");
+					return R.failed(user.getRealname() + "未认证,不能发起结算");
 				}
 				}
 			}
 			}
-			if("1".equals(input.getSubType())){
+			if ("1".equals(input.getSubType())) {
 				// return R.failed("因系统维护,暂时不能提起支付,有问题请联系客服");
 				// return R.failed("因系统维护,暂时不能提起支付,有问题请联系客服");
 				if (!Objects.equals(user.getCertStatus(), TaxHelperCertStatus.CERT.getCode())) {
 				if (!Objects.equals(user.getCertStatus(), TaxHelperCertStatus.CERT.getCode())) {
-					return R.failed(user.getRealname()+"人员未认证或未绑卡,不能结算");
+					return R.failed(user.getRealname() + "人员未认证或未绑卡,不能结算");
 				}
 				}
 			}
 			}
 		}
 		}
 
 
-		/**
-		 * @Modify: start 校验当月结算额度
-		 * @Version: 2021.4.16
-		 * @Author: ryz
-		 * @Date: 2021/4/22
-		 */
+		// 校验当月结算额度
 		List<String> idCard = notes.stream().map(WmScorePackageSettleNote::getIdCardNumber).collect(Collectors.toList());
 		List<String> idCard = notes.stream().map(WmScorePackageSettleNote::getIdCardNumber).collect(Collectors.toList());
-		List<Integer> ids = notes.stream().filter(item->null != item.getId()).map(WmScorePackageSettleNote::getId).collect(Collectors.toList());
+		List<Integer> ids = notes.stream().filter(item -> null != item.getId()).map(WmScorePackageSettleNote::getId).collect(Collectors.toList());
 		List<String> userIds = notes.stream().map(WmScorePackageSettleNote::getUserId).collect(Collectors.toList());
 		List<String> userIds = notes.stream().map(WmScorePackageSettleNote::getUserId).collect(Collectors.toList());
 
 
-		SettleAmountMonitorInput monitorInput = SettleAmountMonitorInput.fromIdCard(idCard, ids,input.getSubType());
+		SettleAmountMonitorInput monitorInput = SettleAmountMonitorInput.fromIdCard(idCard, ids, input.getSubType());
 		List<SettleAmountMonitorOutput> monitorOutputList = sysDeptSubService.getSettleAmountMonitor(monitorInput);
 		List<SettleAmountMonitorOutput> monitorOutputList = sysDeptSubService.getSettleAmountMonitor(monitorInput);
 
 
-		SettleAmountMonitorInput deptMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids,input.getSubType());
+		SettleAmountMonitorInput deptMonitorInput = SettleAmountMonitorInput.fromUserId(userIds, ids, input.getSubType());
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 		List<SettleAmountMonitorOutput> deptAmountMonitor = sysDeptSubService.getDeptAmountMonitor(deptMonitorInput);
 
 
 		// 结算渠道
 		// 结算渠道
@@ -342,7 +352,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 			note.setSubType(input.getSubType());
 			note.setSubType(input.getSubType());
 			note.setInvoiceType(input.getInvoiceCategory());
 			note.setInvoiceType(input.getInvoiceCategory());
 			note.setCategoryName(input.toCategoryName());
 			note.setCategoryName(input.toCategoryName());
-			if(null == note.getId()){
+			if (null == note.getId()) {
 				note.setCreateTime(LocalDateTime.now());
 				note.setCreateTime(LocalDateTime.now());
 			}
 			}
 		}
 		}
@@ -378,17 +388,17 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 
 
 		for (WmScorePackageSettleNote note : notes) {
 		for (WmScorePackageSettleNote note : notes) {
 			SysUser user = sysUserMapper.selectById(note.getUserId());
 			SysUser user = sysUserMapper.selectById(note.getUserId());
-			if(StringUtils.isEmpty(user.getIdCardNumber())){
-				return R.failed(user.getRealname()+"未认证,不能发起结算");
+			if (StringUtils.isEmpty(user.getIdCardNumber())) {
+				return R.failed(user.getRealname() + "未认证,不能发起结算");
 			}
 			}
-			if("0".equals(input.getSubType())){
+			if ("0".equals(input.getSubType())) {
 				if (!Objects.equals(user.getRljCertStatus(), DingEnum.CER_STATUS_1.getType())) {
 				if (!Objects.equals(user.getRljCertStatus(), DingEnum.CER_STATUS_1.getType())) {
-					return R.failed(user.getRealname()+"未认证,不能发起结算");
+					return R.failed(user.getRealname() + "未认证,不能发起结算");
 				}
 				}
 			}
 			}
-			if("1".equals(input.getSubType())){
+			if ("1".equals(input.getSubType())) {
 				if (!Objects.equals(user.getCertStatus(), TaxHelperCertStatus.CERT.getCode())) {
 				if (!Objects.equals(user.getCertStatus(), TaxHelperCertStatus.CERT.getCode())) {
-					return R.failed(user.getRealname()+"人员未认证或未绑卡,不能结算");
+					return R.failed(user.getRealname() + "人员未认证或未绑卡,不能结算");
 				}
 				}
 			}
 			}
 		}
 		}
@@ -399,7 +409,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		 * @Date: 2021/4/22
 		 * @Date: 2021/4/22
 		 */
 		 */
 		List<String> idCard = notes.stream().map(WmScorePackageSettleNote::getIdCardNumber).collect(Collectors.toList());
 		List<String> idCard = notes.stream().map(WmScorePackageSettleNote::getIdCardNumber).collect(Collectors.toList());
-		List<Integer> ids = notes.stream().filter(item->null != item.getId()).map(WmScorePackageSettleNote::getId).collect(Collectors.toList());
+		List<Integer> ids = notes.stream().filter(item -> null != item.getId()).map(WmScorePackageSettleNote::getId).collect(Collectors.toList());
 		List<String> userIds = notes.stream().map(WmScorePackageSettleNote::getUserId).collect(Collectors.toList());
 		List<String> userIds = notes.stream().map(WmScorePackageSettleNote::getUserId).collect(Collectors.toList());
 
 
 		SettleAmountMonitorInput monitorInput = SettleAmountMonitorInput.fromIdCard(idCard, ids, input.getSubType());
 		SettleAmountMonitorInput monitorInput = SettleAmountMonitorInput.fromIdCard(idCard, ids, input.getSubType());
@@ -456,7 +466,7 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 			note.setSubType(input.getSubType());
 			note.setSubType(input.getSubType());
 			note.setInvoiceType(input.getInvoiceCategory());
 			note.setInvoiceType(input.getInvoiceCategory());
 			note.setCategoryName(input.toCategoryName());
 			note.setCategoryName(input.toCategoryName());
-			if(null == note.getId()){
+			if (null == note.getId()) {
 				note.setCreateTime(LocalDateTime.now());
 				note.setCreateTime(LocalDateTime.now());
 			}
 			}
 
 
@@ -518,12 +528,18 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 			} else {
 			} else {
 				return R.failed("未配置企业的统一社会信用代码");
 				return R.failed("未配置企业的统一社会信用代码");
 			}
 			}
-			return settleByShuiBangYun(input, sysDeptSub, wmScorePackage,taxCode);
+			return settleByShuiBangYun(input, sysDeptSub, wmScorePackage, taxCode);
 			// return settleByShuiBangYun();
 			// return settleByShuiBangYun();
 		}
 		}
 
 
 	}
 	}
 
 
+	/**
+	 * 提交结算
+	 *
+	 * @param input 提交结算信息
+	 * @return 提交结果
+	 */
 	@Override
 	@Override
 	public R settleIssueBySubType(WmScorePackageSettleInput input) {
 	public R settleIssueBySubType(WmScorePackageSettleInput input) {
 
 
@@ -546,9 +562,17 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 			return R.failed("机构appId未维护");
 			return R.failed("机构appId未维护");
 		}
 		}
 
 
+		// 人力家
 		if (SubjectTypeEnum.TYPE_RENLIJIA.getCode().equals(input.getSubType())) {
 		if (SubjectTypeEnum.TYPE_RENLIJIA.getCode().equals(input.getSubType())) {
 			return settleByRenLiJia(input, sysDeptSub, wmScorePackage);
 			return settleByRenLiJia(input, sysDeptSub, wmScorePackage);
-		} else {
+		}
+		// 自由职家
+		else if (SubjectTypeEnum.TYPE_OLADING.getCode().equals(input.getSubType())) {
+			// return settleByOlading(input, sysDeptSub, wmScorePackage);
+			return R.ok();
+		}
+		// 税邦云
+		else {
 			SysDept sysDept = sysDeptService.getById(SecurityUtils.getUser().getDeptId());
 			SysDept sysDept = sysDeptService.getById(SecurityUtils.getUser().getDeptId());
 
 
 			String taxCode = sysDept.getTaxCode();
 			String taxCode = sysDept.getTaxCode();
@@ -557,13 +581,214 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 			} else {
 			} else {
 				return R.failed("未配置企业的统一社会信用代码");
 				return R.failed("未配置企业的统一社会信用代码");
 			}
 			}
-			return settleByShuiBangYun(input, sysDeptSub, wmScorePackage,taxCode);
+			return settleByShuiBangYun(input, sysDeptSub, wmScorePackage, taxCode);
 			// return settleByShuiBangYun();
 			// return settleByShuiBangYun();
 		}
 		}
 
 
 	}
 	}
 
 
-	private R settleByShuiBangYun(){
+	// /**
+	//  * 自由职家结算
+	//  *
+	//  * @param input
+	//  * @param sysDeptSub
+	//  * @param wmScorePackage
+	//  * @param taxCode
+	//  * @return 提交结果
+	//  */
+	// private R settleByOlading(WmScorePackageSettleInput input,
+	// 						  SysDeptSub sysDeptSub,
+	// 						  WmScorePackage wmScorePackage,
+	// 						  String taxCode) {
+	//
+	// 	// 获取发票类型和名称
+	// 	int invoiceCategory = input.getInvoiceCategory();
+	// 	String categoryName = input.toCategoryName();
+	//
+	// 	// 获取结算记录
+	// 	List<WmScorePackageSettleNote> notes = input.getNotes();
+	//
+	// 	// 结算锁
+	// 	List<String> lockKey = new ArrayList<>(notes.size());
+	//
+	// 	// 校验,循环设置结算记录的发票信息
+	// 	notes.forEach(note -> {
+	// 		if (Boolean.TRUE.equals(redisTemplate.hasKey(String.format("%s:%d", CacheConstants.SETTLE_PACKAGE_KEY, note.getId())))
+	// 				|| DingEnum.NOTE_STATUS_SUCCESS.getType().equals(note.getSettleNoteStatus())
+	// 				|| DingEnum.NOTE_STATUS_SUBMIT.getType().equals(note.getSettleNoteStatus())) {
+	// 			String errMsg = String.format("结算记录-%d,存在历史或在途操作,请勿重复结算。", note.getId());
+	// 			log.error(errMsg);
+	// 			throw new RuntimeException(errMsg);
+	// 		}
+	//
+	// 		note.setInvoiceType(invoiceCategory);
+	// 		note.setCategoryName(categoryName);
+	// 		note.setSubToGigTime(LocalDateTime.now());
+	//
+	// 		lockKey.add(String.format("%s:%d",CacheConstants.SETTLE_PACKAGE_KEY, note.getId()));
+	//
+	// 	});
+	//
+	// 	noteService.updateBatchById(notes);
+	//
+	//
+	// 	// 校验信息
+	// 	List<String> userIds = notes.stream().map(WmScorePackageSettleNote::getUserId).distinct().collect(Collectors.toList());
+	// 	List<SysUser> sysUsers = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserId, userIds));
+	// 	List<SysUserSub> userSubs = sysUserSubMapper.selectList(Wrappers.<SysUserSub>lambdaQuery().in(SysUserSub::getUserId, userIds)
+	// 			.eq(SysUserSub::getGigType, GigTypeEnum.OLADING.getCode())
+	// 			.eq(SysUserSub::getGigChannel, GigChannelEnum.DEFAULT.getCode())
+	// 			.eq(SysUserSub::getCertStatus, OladingCertStatus.CERT.getCode())
+	// 	);
+	//
+	// 	if (CollUtil.isEmpty(sysUsers) || CollUtil.isEmpty(userSubs)){
+	// 		log.error("用户或用户认证记录缺失不能发起结算");
+	// 		throw new RuntimeException("用户或用户认证记录缺失不能发起结算");
+	// 	}
+	//
+	// 	Map<Integer, SysUser> userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+	// 	Map<Integer, SysUserSub> userSubMap = userSubs.stream().collect(Collectors.toMap(SysUserSub::getUserId, Function.identity()));
+	//
+	// 	if (!userMap.keySet().containsAll(userMap.keySet())){
+	// 		log.error("用户尚未认证不能发起结算");
+	// 		throw new RuntimeException("用户尚未认证不能发起结算");
+	// 	}
+	//
+	//
+	//
+	// 	// ~================================================================================================= 发起结算
+	//
+	// 	try {
+	// 		// 1 结算纪录锁定
+	// 		Map<String, String> keyMap = lockKey.stream().collect(Collectors.toMap(Function.identity(), Function.identity()));
+	// 		if (Boolean.FALSE.equals(redisTemplate.opsForValue().multiSetIfAbsent(keyMap))){
+	// 			log.error("存在在途的操作");
+	// 			throw new RuntimeException("存在在途的操作");
+	// 		}
+	//
+	// 		// 3 封装批量订单
+	// 		OmsOrderRequest.OrderBatchSubmitParams orderBatchSubmitParams = new OmsOrderRequest.OrderBatchSubmitParams();
+	// 		orderBatchSubmitParams.setBatchNo(paySequence.nextNo());
+	// 		orderBatchSubmitParams.setPayeeQuantity((long)sysUsers.size());
+	// 		orderBatchSubmitParams.setOrderToken(RandomStringUtils.randomNumeric(6));
+	// 		orderBatchSubmitParams.setRemarks("正常结算");
+	// 		orderBatchSubmitParams.setEndType(CheckoutType.SubmitEndType.CSO);
+	//
+	//
+	//
+	//
+	// 		orderBatchSubmitParams.setOrderQuantity();
+	// 		orderBatchSubmitParams.setOrderSubmits();
+	// 		orderBatchSubmitParams.setBatchAmountPayable();
+	//
+	//
+	// 		// 4 发送消息
+	//
+	// 		// 5 修改积分包
+	//
+	// 	} catch (Exception e){
+	// 		log.error("提交结算失败",e);
+	// 		redisTemplate.delete(lockKey);
+	// 	}
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	// 	for (int i = 0; i < notes.size(); i++) {
+	// 		WmScorePackageSettleNote note = notes.get(i);
+	//
+	// 		/**
+	// 		 * 加锁
+	// 		 */
+	// 		redisTemplate.opsForValue().set(CacheConstants.SETTLE_PACKAGE_KEY + note.getId(),
+	// 				note.getId(), CacheConstants.SETTLE_TIME, TimeUnit.DAYS);
+	//
+	// 		SysUser sysUser = sysUserMapper.selectById(note.getUserId());
+	//
+	// 		TaxHelperConfig config = new TaxHelperConfig();
+	// 		config.setAppId(sysDeptSub.getAppId());
+	// 		config.setAppSecrete(sysDeptSub.getAppSecret());
+	// 		config.setQueryUrl(sysDeptSub.getQueryUrl());
+	//
+	// 		/**
+	// 		 * 开始结算
+	// 		 */
+	// 		TaxHelperSettlementModel taxHelperSettlementModel = new TaxHelperSettlementModel(config);
+	// 		taxHelperSettlementModel.setEnterpriseCode(taxCode);
+	//
+	// 		taxHelperSettlementModel.setExtendFieldNames(Arrays.asList("报告下载地址"));
+	// 		taxHelperSettlementModel.setCount(1);
+	//
+	// 		taxHelperSettlementModel.setNotifyUrl(taxNotifyConfig.getNotifyUrl() + "/admin/taxhelper/" + sysUser.getUserId() + "/settlementNotify");
+	// 		TaxHelperSettlementModel.DetailedArr detailedArr = new TaxHelperSettlementModel.DetailedArr();
+	// 		detailedArr.setIdCard(sysUser.getIdCardNumber());
+	// 		detailedArr.setInputAmount(note.getSettleAmount().doubleValue());
+	// 		detailedArr.setCategoryName(note.getCategoryName());
+	// 		taxHelperSettlementModel.setDetailedArr(Arrays.asList(detailedArr));
+	//
+	// 		TaxHelperSettlementModel.AbstractArr abstractArr = new TaxHelperSettlementModel.AbstractArr();
+	//
+	// 		abstractArr.setIdCard(sysUser.getIdCardNumber());
+	// 		abstractArr.setNumber(1);
+	// 		abstractArr.setPrice(note.getSettleAmount().doubleValue());
+	// 		abstractArr.setAmount(note.getSettleAmount().doubleValue());
+	//
+	// 		// abstractArr.setExtendField1(taxNotifyConfig.getTaskUrl() + "/admin/api/h5PackagePage?current=1&size=20&id=" + wmScorePackage.getScorePackageName());
+	// 		abstractArr.setExtendField1(taxNotifyConfig.getTaskUrl() + "/#/h5/indexTask?id=" + note.getPackageId() + "&userId=" + note.getUserId());
+	//
+	// 		taxHelperSettlementModel.setAbstractArr(Arrays.asList(abstractArr));
+	//
+	// 		TaxHelperSettlementRequest taxHelperSettlementRequest = new TaxHelperSettlementRequest(taxHelperSettlementModel);
+	//
+	// 		TaxHelperResponse response = taxHelperService.settlement(taxHelperSettlementRequest);
+	//
+	// 		log.info("税邦云结算: {}", response);
+	//
+	//
+	// 		if (response.success()) {
+	// 			log.info("税邦云结算提交成功: {}", note.getSettleNo());
+	// 			//streamId 获取不到
+	// 			if (StringUtils.isEmpty(response.getMessage())) {
+	// 				log.info("税邦云结算提交成功 streamId 获取不到: {}", note.getSettleNo());
+	// 				noticeInfo.append(sysUser.getRealname() + ":提交结算成功,业务流水号获取不到,请联系管理员;");
+	// 			}
+	// 			note.setUpdateTime(LocalDateTime.now());
+	// 			note.setSettleNoteStatus(DingEnum.NOTE_STATUS_SUBMIT.getType());
+	// 			// 新增字段streamId
+	// 			note.setStreamId(response.getMessage());
+	// 			noticeInfo.append(sysUser.getRealname() + ":提交结算成功;");
+	// 		} else {
+	// 			log.info("税邦云结算提交失败: {}", note.getSettleNo());
+	// 			note.setUpdateTime(LocalDateTime.now());
+	// 			note.setSettleNoteStatus(DingEnum.NOTE_STATUS_FAIL.getType());
+	// 			noticeInfo.append(sysUser.getRealname() + ":结算提交失败-" + response.getMessage() + ";");
+	//
+	// 			log.info("认证状态异常,结算解锁settleNoteId:{}", note.getId());
+	// 			redisTemplate.delete(CacheConstants.SETTLE_PACKAGE_KEY + note.getId());
+	//
+	// 		}
+	// 	}
+	//
+	// 	noteService.updateBatchById(notes);
+	//
+	// 	/**
+	// 	 * 更新结算结果
+	// 	 */
+	// 	SettleNoteStatusOutput output = noteService.selectSettleNoteStatus(input.getId());
+	// 	WmScorePackage updateEntity = new WmScorePackage();
+	// 	updateEntity.setId(input.getId());
+	// 	updateEntity.setSettleStatus(output.toSettleStatus());
+	// 	wmScorePackageService.updateById(updateEntity);
+	//
+	// 	return R.ok(null, noticeInfo.toString());
+	// }
+
+	private R settleByShuiBangYun() {
 		return R.failed("因系统维护,暂时不能提起支付,有问题请联系客服");
 		return R.failed("因系统维护,暂时不能提起支付,有问题请联系客服");
 	}
 	}
 
 
@@ -586,7 +811,6 @@ public class WmPayOffServiceImpl extends ServiceImpl<WmPayOffMapper, WmPayOff> i
 		noteService.updateBatchById(notes);
 		noteService.updateBatchById(notes);
 
 
 
 
-
 		for (int i = 0; i < notes.size(); i++) {
 		for (int i = 0; i < notes.size(); i++) {
 			WmScorePackageSettleNote note = notes.get(i);
 			WmScorePackageSettleNote note = notes.get(i);
 			SysUser sysUser = sysUserMapper.selectById(note.getUserId());
 			SysUser sysUser = sysUserMapper.selectById(note.getUserId());

+ 26 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysUserMapper.xml

@@ -58,6 +58,7 @@
 		<result column="city_code" property="cityCode"/>
 		<result column="city_code" property="cityCode"/>
 		<result column="user_type" property="userType"/>
 		<result column="user_type" property="userType"/>
 		<result column="bank_card_number" property="bankCardNumber"/>
 		<result column="bank_card_number" property="bankCardNumber"/>
+		<result column="bank_phone" property="bankPhone"/>
 		<result column="tax_helper_agreement_signature" property="taxHelperAgreementSignature"/>
 		<result column="tax_helper_agreement_signature" property="taxHelperAgreementSignature"/>
 	</resultMap>
 	</resultMap>
 
 
@@ -99,6 +100,7 @@
 		<result column="province_code" property="provinceCode"/>
 		<result column="province_code" property="provinceCode"/>
 		<result column="city_code" property="cityCode"/>
 		<result column="city_code" property="cityCode"/>
 		<result column="user_type" property="userType"/>
 		<result column="user_type" property="userType"/>
+		<result column="bank_phone" property="bankPhone"/>
 		<result column="bank_card_number" property="bankCardNumber"/>
 		<result column="bank_card_number" property="bankCardNumber"/>
 		<collection property="roleList" ofType="com.qunzhixinxi.hnqz.admin.api.entity.SysRole"
 		<collection property="roleList" ofType="com.qunzhixinxi.hnqz.admin.api.entity.SysRole"
 					select="com.qunzhixinxi.hnqz.admin.mapper.SysRoleMapper.listRolesByUserId" column="user_id">
 					select="com.qunzhixinxi.hnqz.admin.mapper.SysRoleMapper.listRolesByUserId" column="user_id">
@@ -142,6 +144,7 @@
 		<result column="province_code" property="provinceCode"/>
 		<result column="province_code" property="provinceCode"/>
 		<result column="city_code" property="cityCode"/>
 		<result column="city_code" property="cityCode"/>
 		<result column="user_type" property="userType"/>
 		<result column="user_type" property="userType"/>
+		<result column="bank_phone" property="bankPhone"/>
 		<result column="bank_card_number" property="bankCardNumber"/>
 		<result column="bank_card_number" property="bankCardNumber"/>
 		<collection property="roleList" ofType="com.qunzhixinxi.hnqz.admin.api.entity.SysRole">
 		<collection property="roleList" ofType="com.qunzhixinxi.hnqz.admin.api.entity.SysRole">
 			<id column="role_id" property="roleId"/>
 			<id column="role_id" property="roleId"/>
@@ -698,4 +701,27 @@
 		</set>
 		</set>
 		where user_id = #{userId,jdbcType=BIGINT}
 		where user_id = #{userId,jdbcType=BIGINT}
 	</update>
 	</update>
+
+
+	<select id="listUserDetails" resultMap="baseResultMap">
+		SELECT u.user_id,
+			   u.realname,
+			   u.username,
+			   u.id_card_number,
+			   u.tenant_id,
+			   u.dept_id,
+			   u.bank_phone,
+		       us.bank_card_number,
+			   us.gig_type,
+			   us.cert_status
+		FROM sys_user u
+				 LEFT JOIN sys_user_sub us on us.user_id = u.user_id
+		<where>
+			u.user_id in
+			<foreach collection="userIds" index="idx" item="userId" open="(" close=")" separator=",">
+				#{userId}
+			</foreach>
+		</where>
+
+	</select>
 </mapper>
 </mapper>