Browse Source

机构支付及交易流水查询相关功能

hgw 3 years ago
parent
commit
bd24b6c28b

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java

@@ -9,6 +9,8 @@ import java.util.Set;
 
 public interface OrganizationDao extends BaseDAO<Integer, Organization> {
 
+    Organization getByName(String name,Integer tenantId);
+
     /**
      * 根据父级id查询子级列表
      * @param parentId

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantOrderRecordDao.java

@@ -1,10 +1,14 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
 import com.ym.mec.biz.dal.entity.TenantOrderRecord;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 机构付款记录表(TenantOrderRecord)表数据库访问层
@@ -16,5 +20,7 @@ public interface TenantOrderRecordDao extends BaseMapper<TenantOrderRecord> {
 
     int insertBatch(@Param("entities") List<TenantOrderRecord> entities);
 
+    <T> IPage<T> queryPage(Page<T> page, @Param("param") TenantOrderRecordDto dto);
+
 }
 

+ 15 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantOrderRecordDto.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 机构付款记录表(TenantOrderRecord)表实体类
@@ -18,9 +19,8 @@ public class TenantOrderRecordDto implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableField("tenant_id_")
-    @ApiModelProperty(value = "机构产品设置表id")
-    private Integer tenantId;
+    @ApiModelProperty(value = "机构产品设置表id,多个id用逗号分割")
+    private String tenantId;
 
     @TableField("order_no_")
     @ApiModelProperty(value = "订单流水")
@@ -56,11 +56,13 @@ public class TenantOrderRecordDto implements Serializable {
     @ApiModelProperty(value = "关键字")
     private String search;
 
-    public Integer getTenantId() {
+    private List<String> tenantIdList;
+
+    public String getTenantId() {
         return tenantId;
     }
 
-    public void setTenantId(Integer tenantId) {
+    public void setTenantId(String tenantId) {
         this.tenantId = tenantId;
     }
 
@@ -135,5 +137,13 @@ public class TenantOrderRecordDto implements Serializable {
     public void setSearch(String search) {
         this.search = search;
     }
+
+    public List<String> getTenantIdList() {
+        return tenantIdList;
+    }
+
+    public void setTenantIdList(List<String> tenantIdList) {
+        this.tenantIdList = tenantIdList;
+    }
 }
 

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java

@@ -82,6 +82,9 @@ public class Organization {
 	@ApiModelProperty(value = "衔接老师",required = false)
 	private String joinTeacherName;
 
+	@ApiModelProperty(value = "机构id",required = false)
+    private Integer tenantId;
+
 	public String getJoinTeacherId() {
 		return joinTeacherId;
 	}
@@ -254,4 +257,12 @@ public class Organization {
 	public void setGradeType(GradeTypeEnum gradeType) {
 		this.gradeType = gradeType;
 	}
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantInfo.java

@@ -60,6 +60,10 @@ public class TenantInfo implements Serializable {
     @ApiModelProperty(value = "营业执照对应公司名称")
     private String tsignName;
 
+    @TableField("area_id_")
+    @ApiModelProperty(value = "城市id")
+    private Integer areaId;
+
     @TableField("domain_name_")
     @ApiModelProperty(value = "域名")
     private String domainName;
@@ -246,6 +250,14 @@ public class TenantInfo implements Serializable {
         this.tsignName = tsignName;
     }
 
+    public Integer getAreaId() {
+        return areaId;
+    }
+
+    public void setAreaId(Integer areaId) {
+        this.areaId = areaId;
+    }
+
     @Override
     public String toString() {
         return ToStringBuilder.reflectionToString(this);

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantOrderRecord.java

@@ -57,7 +57,7 @@ public class TenantOrderRecord implements Serializable {
     private BigDecimal actualAmount;
 
     @TableField("order_state_")
-    @ApiModelProperty(value = "订单状态/0待支付、1已支付")
+    @ApiModelProperty(value = "订单状态/0待支付、1已支付、2支付失败")
     private Integer orderState;
 
     @JsonFormat(pattern = "yyyy-MM-dd")

+ 174 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/TenantOrderRecordVo.java

@@ -0,0 +1,174 @@
+package com.ym.mec.biz.dal.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author hgw
+ * Created by 2021-12-21
+ */
+public class TenantOrderRecordVo implements Serializable {
+
+    @ApiModelProperty(value = "机构名称")
+    private String tenantName;
+
+    @TableField("tenant_id_")
+    @ApiModelProperty(value = "机构产品设置表id")
+    private Integer tenantId;
+
+    @TableField("order_no_")
+    @ApiModelProperty(value = "订单编号(付款前生成订单时生成的编号)")
+    private String orderNo;
+
+    @TableField("trans_no_")
+    @ApiModelProperty(value = "支付编号(付款后第三方支付给予的)")
+    private String transNo;
+
+    @TableField("order_type_")
+    @ApiModelProperty(value = "订单类型/机构开通缴费、续费、充值、激活团练宝")
+    private String orderType;
+
+    @TableField("payment_channel_")
+    @ApiModelProperty(value = "付款渠道/惠支付、双乾")
+    private String paymentChannel;
+
+    @TableField("pay_channel_")
+    @ApiModelProperty(value = "付款渠道/微信、支付宝、等")
+    private String payChannel;
+
+    @TableField("expect_amount")
+    @ApiModelProperty(value = "应付金额")
+    private BigDecimal expectAmount;
+
+    @TableField("actual_amount")
+    @ApiModelProperty(value = "实付金额")
+    private BigDecimal actualAmount;
+
+    @TableField("order_state_")
+    @ApiModelProperty(value = "订单状态/0待支付、1已支付、2支付失败")
+    private Integer orderState;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField("pay_date_")
+    @ApiModelProperty(value = "支付日期")
+    private Date payDate;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("pay_time_")
+    @ApiModelProperty(value = "支付时间")
+    private Date payTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("created_time_")
+    @ApiModelProperty(value = "订单创建时间")
+    private Date createdTime;
+
+    public String getTenantName() {
+        return tenantName;
+    }
+
+    public void setTenantName(String tenantName) {
+        this.tenantName = tenantName;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getTransNo() {
+        return transNo;
+    }
+
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
+    }
+
+    public String getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(String orderType) {
+        this.orderType = orderType;
+    }
+
+    public String getPaymentChannel() {
+        return paymentChannel;
+    }
+
+    public void setPaymentChannel(String paymentChannel) {
+        this.paymentChannel = paymentChannel;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public BigDecimal getExpectAmount() {
+        return expectAmount;
+    }
+
+    public void setExpectAmount(BigDecimal expectAmount) {
+        this.expectAmount = expectAmount;
+    }
+
+    public BigDecimal getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(BigDecimal actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public Integer getOrderState() {
+        return orderState;
+    }
+
+    public void setOrderState(Integer orderState) {
+        this.orderState = orderState;
+    }
+
+    public Date getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(Date payDate) {
+        this.payDate = payDate;
+    }
+
+    public Date getPayTime() {
+        return payTime;
+    }
+
+    public void setPayTime(Date payTime) {
+        this.payTime = payTime;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+}

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.dal.vo.TenantInfoInfoPageVo;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.thirdparty.yqpay.Msg;
 
 import java.util.Map;
 
@@ -21,4 +22,9 @@ public interface TenantInfoService extends IService<TenantInfo> {
     PageInfo<TenantInfoInfoPageVo> queryPage(Map<String, Object> param);
 
     TenantInfo get(Integer tenantId);
+
+    Map<String, Object> pay(Integer tenantId) throws Exception;
+
+    Msg orderNotify(Msg msg);
+
 }

+ 120 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -7,26 +8,34 @@ import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysRole;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.dto.TenantConfigDto;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.dal.dto.TenantProductInfoDto;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.JobNatureEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.vo.TenantInfoInfoPageVo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.thirdparty.yqpay.Msg;
 import org.apache.commons.collections.CollectionUtils;
 import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
@@ -34,6 +43,7 @@ import java.util.stream.Collectors;
 
 @Service
 public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo> implements TenantInfoService {
+    private static final Logger log = LoggerFactory.getLogger(TenantInfoServiceImpl.class);
 
     @Autowired
     private SysUserFeignService sysUserFeignService;
@@ -49,6 +59,16 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     private RedissonClient redissonClient;
     @Autowired
     private SysUserTsignService sysUserTsignService;
+    @Autowired
+    private OrganizationDao organizationDao;
+    @Autowired
+    private PayService payService;
+    @Autowired
+    private IdGeneratorService idGenerator;
+    @Autowired
+    private SysConfigDao sysConfigDao;
+    @Autowired
+    private TenantOrderRecordService tenantOrderRecordService;
 
     /**
      * 新增机构
@@ -78,6 +98,18 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
                 tenantProductInfoService::addTenantProduct);
         //添加机构配置
         setIdByApply(tenantId, dto.getConfig(), dto.getConfig()::setTenantId, tenantConfigService::addConfig);
+        //创建一个和机构同名称的“分部”
+        createOrg(tenantInfo);
+    }
+
+    //创建一个和机构同名称的“分部”
+    private void createOrg(TenantInfo tenantInfo) {
+        Organization organization = new Organization();
+        organization.setName(tenantInfo.getName());
+        organization.setDelFlag(YesOrNoEnum.NO);
+        organization.setGradeType(GradeTypeEnum.SIX_PLUS);
+        organization.setCreateTime(new Date());
+        organizationDao.insert(organization);
     }
 
     /**
@@ -283,10 +315,96 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     /**
      * 机构缴费
      */
-    public void pay(){
+    public Map<String, Object> pay(Integer tenantId) throws Exception {
+        TenantInfo tenantInfo = Optional.ofNullable(tenantId)
+                .map(baseMapper::selectById)
+                .orElseThrow(() -> new BizException("未查询到机构信息!"));
+        //机构产品信息
+        TenantProductInfo productInfo = tenantProductInfoService.getOne(new QueryWrapper<TenantProductInfo>()
+                .eq("tenant_id_", tenantId));
+        //生成订单编号
+        String orderNo = idGenerator.generatorId("payment") + "";
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+        TenantOrderRecordEnum tenantEnum = TenantOrderRecordEnum.TENANT_OPEN;
+        //获取分部信息
+        Organization organization = organizationDao.getByName(tenantInfo.getName(), tenantId);
+        if (Objects.isNull(organization)) {
+            throw new BizException("未查询到机构分部信息!");
+        }
+        Map<String, Object> payMap = new HashMap<>();
+        int orderState = 0;
+        //消费大于0元则拉起支付
+        if (productInfo.getPayAmount().compareTo(BigDecimal.ZERO) > 0) {
+            payMap = payService.getPayMap(
+                    productInfo.getPayAmount(),
+                    BigDecimal.ZERO,
+                    orderNo,
+                    baseApiUrl + "/WEB-SERVER/tenantInfo/notify",
+                    baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                    tenantEnum.getMsg(),
+                    tenantEnum.getMsg(),
+                    1,//临时写死
+                    tenantEnum.getCode()
+            );
+        } else {
+            //已支付
+            orderState = 1;
+        }
+        createOrderRecord(tenantId, productInfo.getPayAmount(), orderNo, tenantEnum, orderState);
+        log.info("tenant pay >>>>> " + JSON.toJSONString(payMap));
+        return payMap;
+    }
 
+    //生成订单
+    private void createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum tenantEnum, Integer orderState) {
+        LocalDateTime now = LocalDateTime.now();
+        TenantOrderRecord record = new TenantOrderRecord();
+        record.setTenantId(tenantId);
+        record.setOrderNo(orderNo);
+        record.setOrderType(tenantEnum.getCode());
+        record.setPaymentChannel(PaymentChannelEnum.ADAPAY.getCode());
+        record.setExpectAmount(payAmount);
+        record.setActualAmount(payAmount);
+        record.setOrderState(orderState);
+        record.setPayDate(now.toLocalDate().toDate());
+        record.setPayTime(now.toDate());
+        record.setCreatedTime(now.toDate());
+        tenantOrderRecordService.save(record);
     }
 
+    /**
+     * 支付消息回调
+     *
+     * @param msg
+     * @return
+     */
+    @Override
+    public Msg orderNotify(Msg msg) {
+        log.info("tenant orderNotify >>>>> " +msg.toString());
+        msg.setMsg("fail");
+        Map<String, String> notifyMap = JSON.parseObject(msg.getResponseParameters(), Map.class);
+        TenantOrderRecord record = new TenantOrderRecord();
+        record.setOrderNo(notifyMap.get("merMerOrderNo"));
+        record.setTransNo(notifyMap.get("orderNo"));
+        String channelType = notifyMap.get("channelType").equals("1") ? "WXPay" : (notifyMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
+        record.setPayChannel(channelType);
+        //支付中订单存在,更新状态
+        if (msg.getResponseType().equals("1") && notifyMap.size() > 0 && msg.getCode().equals("88")) {
+            //tradeState 88就是正确的 其他错误的
+//            DealStatusEnum
+//            notifyMap.put("totalMoney", notifyMap.get("payAmount"));
+            record.setOrderState(1);
+            msg.setCode("000000");
+            msg.setMsg("success");
+        } else {
+            //支付失败
+            record.setOrderState(2);
+        }
+        tenantOrderRecordService.update(record, new QueryWrapper<TenantOrderRecord>()
+                .eq("order_no_", record.getOrderNo()));
+        log.info("tenant orderNotify return>>>>> " + msg.toString());
+        return msg;
+    }
 
     /**
      * 校验手机号

+ 9 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.TenantOrderRecordDao;
@@ -10,11 +9,11 @@ import com.ym.mec.biz.service.TenantOrderRecordService;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.page.QueryWrapperUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.Optional;
+
 /**
  * 机构付款记录表(TenantOrderRecord)表服务实现类
  *
@@ -24,21 +23,15 @@ import org.springframework.stereotype.Service;
 @Service("tenantOrderRecordService")
 public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordDao, TenantOrderRecord> implements TenantOrderRecordService {
 
-    private final static Logger logger = LoggerFactory.getLogger(TenantOrderRecordServiceImpl.class);
-
     @Override
     public PageInfo<TenantOrderRecord> queryPage(TenantOrderRecordDto dto) {
         Page<TenantOrderRecord> pageInfo = PageUtil.getPage(dto.getPage(), dto.getRows());
-        QueryWrapper<TenantOrderRecord> queryWrapper = new QueryWrapperUtil<TenantOrderRecord>()
-                .hasEq("order_no_", dto.getOrderNo())
-                .hasEq("tenant_id_", dto.getTenantId())
-                .hasEq("trans_no_", dto.getTransNo())
-                .hasEq("order_type_", dto.getOrderType())
-                .hasEq("order_state_", dto.getOrderState())
-                .queryWrapper()
-                .ge(StringUtils.isNotBlank(dto.getStartDate()), "created_time_", dto.getStartDate())
-                .le(StringUtils.isNotBlank(dto.getEndDate()), "created_time_", dto.getEndDate());
-        return PageUtil.pageInfo(this.page(pageInfo, queryWrapper));
+        pageInfo.setDesc("a.created_time_ ");
+        Optional.ofNullable(dto.getTenantId())
+                .map(QueryWrapperUtil::toList)
+                .filter(CollectionUtils::isNotEmpty)
+                .ifPresent(dto::setTenantIdList);
+        return PageUtil.pageInfo(baseMapper.queryPage(pageInfo, dto));
     }
 
 }

+ 7 - 2
mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml

@@ -26,6 +26,7 @@
         <result column="organ_manager_name_" property="organManagerName"/>
         <result column="education_name_" property="educationName"/>
         <result column="repair_name_" property="repairName"/>
+        <result column="tenant_id_" property="tenantId"/>
         <result column="grade_type_" property="gradeType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
@@ -34,6 +35,10 @@
 		SELECT * FROM organization WHERE id_ = #{id} 
 	</select>
 
+    <select id="getByName" parameterType="object" resultMap="Organization">
+        SELECT * FROM organization WHERE name_ = #{name} and tenant_id_ = #{tenantId}
+    </select>
+
     <!-- 全查询 -->
     <select id="findAll" resultMap="Organization">
 		SELECT * FROM organization ORDER BY id_
@@ -44,11 +49,11 @@
             keyProperty="id">
         INSERT INTO organization (id_,name_,area_id_,create_time_,update_time_,
                                   register_date_,linkman_,mobile_,address_,grade_type_,organ_manager_,education_id_,repair_id_,join_teacher_id_,
-                                  organ_manager_name_,education_name_,repair_name_,join_teacher_name_)
+                                  organ_manager_name_,education_name_,repair_name_,join_teacher_name_,tenant_id_)
         VALUES(#{id},#{name},#{areaId},now(),now(),#{registerDate},#{linkman},#{mobile},#{address},
                #{gradeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
                ,#{organManager},#{educationId},#{repairId},#{joinTeacherId},#{organManagerName},
-               #{educationName},#{repairName},#{joinTeacherName})
+               #{educationName},#{repairName},#{joinTeacherName}),#{tenantId}
     </insert>
 
     <!-- 根据主键查询一条记录 -->

+ 4 - 1
mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -22,11 +22,14 @@
         <result column="updated_time_" jdbcType="TIMESTAMP" property="updatedTime"/>
         <result column="tsign_code_" jdbcType="VARCHAR" property="tsignCode"/>
         <result column="tsign_name_" jdbcType="VARCHAR" property="tsignName"/>
+        <result column="area_id_" jdbcType="INTEGER" property="areaId"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id_
-        , name_, contacts_, phone_, address_, email_, logo_, customer_service_phone_, remark_, domain_name_, data_source_, pay_state_, state_, created_by_, created_time_, updated_by_, updated_time_, tsign_code_, tsign_name_
+        , name_, contacts_, phone_, address_, email_, logo_, customer_service_phone_, remark_, domain_name_,
+        data_source_, pay_state_, state_, created_by_, created_time_, updated_by_, updated_time_, tsign_code_, tsign_name_,
+        area_id_
     </sql>
 
     <resultMap id="TenantInfoInfoResult" type="com.ym.mec.biz.dal.vo.TenantInfoInfoPageVo">

+ 47 - 0
mec-biz/src/main/resources/config/mybatis/TenantOrderRecordMapper.xml

@@ -34,4 +34,51 @@
         </foreach>
     </insert>
 
+    <select id="queryPage" parameterType="com.ym.mec.biz.dal.dto.TenantOrderRecordDto" resultType="com.ym.mec.biz.dal.vo.TenantOrderRecordVo">
+        SELECT
+            b.name_ as tenantName,
+            a.tenant_id_ as tenantId,
+            a.order_no_ as orderNo,
+            a.trans_no_ as transNo,
+            a.order_type_ as orderType,
+            a.payment_channel_ as paymentChannel,
+            a.pay_channel_ AS payChannel,
+            a.expect_amount as expectAmount,
+            a.actual_amount as actualAmount,
+            a.order_state_ as orderState,
+            a.pay_date_ as payDate,
+            a.pay_time_ as payTime,
+            a.created_time_ as createdTime
+        FROM
+            tenant_order_record AS a
+                LEFT JOIN tenant_info AS b
+                          ON a.tenant_id_ = b.id_
+    <where>
+        <if test="param.orderNo != null ">
+            AND a.`order_no_` = #{param.orderNo}
+        </if>
+        <if test="param.transNo != null ">
+            AND a.`trans_no_` = #{param.transNo}
+        </if>
+        <if test="param.orderType != null ">
+            AND a.`order_type_` = #{param.orderType}
+        </if>
+        <if test="param.orderState != null ">
+            AND a.`order_state_` = #{param.orderState}
+        </if>
+        <if test="param.tenantIdList != null ">
+            AND a.`tenant_id_`  IN
+            <foreach collection="param.tenantIdList" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+        <if test="param.startDate != null">
+            AND a.`created_time_` <![CDATA[ >= ]]>  #{param.startDate}
+        </if>
+        <if test="param.endDate != null ">
+            AND a.`created_time_` <![CDATA[ <= ]]>  #{param.endDate}
+        </if>
+    </where>
+    </select>
+    
 </mapper>

+ 43 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/page/QueryWrapperUtil.java

@@ -1,11 +1,15 @@
 package com.ym.mec.common.page;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 
-import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 /**
  * @author hgw
@@ -40,6 +44,22 @@ public class QueryWrapperUtil<T> {
     }
 
     /**
+     * in 查询
+     *
+     * @param column 列名称
+     * @param val    逗号分开的值
+     */
+    public QueryWrapperUtil<T> hasSplitIn(String column, String val) {
+        if (StringUtils.isNotBlank(val)) {
+            List<String> strings = QueryWrapperUtil.toList(val);
+            if (CollectionUtils.isNotEmpty(strings)) {
+                queryWrapper.in(column, strings);
+            }
+        }
+        return this;
+    }
+
+    /**
      * 可以当作结束语句
      * 或者获取QueryWrapper类还可以继续拼接其他条件SQL
      */
@@ -47,4 +67,26 @@ public class QueryWrapperUtil<T> {
         return queryWrapper;
     }
 
+
+    public static List<String> toList(String key) {
+        return toList(key, ",");
+    }
+
+    public static List<String> toList(String key, String symbol) {
+        return toListOptional(key, symbol)
+                .orElse(null);
+    }
+
+    private static Optional<List<String>> toListOptional(String key, String symbol) {
+        return Optional.ofNullable(key)
+                .filter(StringUtils::isNotBlank)
+                .map(b -> b.split(symbol))
+                .map(QueryWrapperUtil::collectToList)
+                .filter(CollectionUtils::isNotEmpty);
+    }
+
+    private static List<String> collectToList(String[] b) {
+        return Arrays.stream(b).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+    }
+
 }

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -39,7 +39,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/eduSubject/findSubSubjects", "/eduFinancialExpenditure/batchAdd", "/eduSendNotice/*",
                         "/oaContracts/*", "/eduStudent/organStudentOverView", "/activity/countCloudTeacherActive",
                         "/activity/organDoubleEleven2021Statis", "/activity/doubleEleven2021Statis", "/questionnaireTopic/getDetail", "/questionnaireUserResult/add",
-                        "/tenantInfo/info/*"
+                        "/tenantInfo/info/*","/tenantInfo/pay/*"
                 )
                 .permitAll().anyRequest().authenticated().and().httpBasic();
     }

+ 13 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.service.TenantInfoService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.validator.ValidationKit;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,7 +38,7 @@ public class TenantInfoController extends BaseController {
     @PostMapping(value = "/update")
     @PreAuthorize("@pcs.hasPermissions('tenantInfo/update')")
     public Object updateTenantInfo(@Valid @RequestBody TenantInfoDto dto, BindingResult bindingResult) {
-        ValidationKit.ignoreFields(bindingResult,"productInfo","config");
+        ValidationKit.ignoreFields(bindingResult, "productInfo", "config");
         tenantInfoService.updateTenantInfo(dto);
         return succeed();
     }
@@ -73,4 +74,15 @@ public class TenantInfoController extends BaseController {
         return succeed(tenantInfoService.queryPage(param));
     }
 
+    @ApiOperation("机构支付")
+    @GetMapping(value = "/pay/{id}")
+    public Object pay(@ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) throws Exception {
+        return succeed(tenantInfoService.pay(id));
+    }
+
+    @PostMapping("/notify")
+    public Msg notify(@ModelAttribute Msg msg) throws Exception {
+        return tenantInfoService.orderNotify(msg);
+    }
+
 }