Forráskód Böngészése

Merge remote-tracking branch 'origin/saas' into saas

zouxuan 3 éve
szülő
commit
a08bd1033c
36 módosított fájl, 759 hozzáadás és 124 törlés
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OrganizationDao.java
  2. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java
  3. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantOrderRecordDao.java
  4. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreeRegistrationActivityDto.java
  5. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java
  6. 15 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantOrderRecordDto.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java
  9. 21 35
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PlatformServe.java
  10. 15 23
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PlatformServeDetail.java
  11. 32 19
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantInfo.java
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantOrderRecord.java
  13. 174 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/TenantOrderRecordVo.java
  14. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/PlatformServeDetailService.java
  15. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java
  16. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java
  17. 28 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  18. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  19. 138 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  20. 9 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  21. 9 2
      mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml
  22. 7 2
      mec-biz/src/main/resources/config/mybatis/OrganizationMapper.xml
  23. 27 0
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  24. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  25. 4 1
      mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml
  26. 47 0
      mec-biz/src/main/resources/config/mybatis/TenantOrderRecordMapper.xml
  27. 43 1
      mec-common/common-core/src/main/java/com/ym/mec/common/page/QueryWrapperUtil.java
  28. 1 1
      mec-gateway/mec-gateway-web/src/main/resources/bootstrap-test.properties
  29. 1 0
      mec-im/src/main/java/com/ym/controller/RoomController.java
  30. 2 2
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  31. 1 1
      mec-monitor/src/main/resources/bootstrap-test.properties
  32. 5 3
      mec-student/src/main/java/com/ym/mec/student/controller/DegreeController.java
  33. 1 1
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  34. 38 2
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  35. 13 1
      mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java
  36. 1 1
      mec-zipkin/src/main/resources/bootstrap-test.properties

+ 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(@Param("name") String name,@Param("tenantId") Integer tenantId);
+
     /**
      * 根据父级id查询子级列表
      * @param parentId

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

@@ -160,4 +160,6 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
      * @return
      */
     int countWaitCreateHomeworkNum1(Integer teacherId);
+    
+    List<TeacherServeDto> queryTeacherPerformanceIndicator(Map<String, Object> params);
 }

+ 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);
+
 }
 

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreeRegistrationActivityDto.java

@@ -15,6 +15,8 @@ public class DegreeRegistrationActivityDto extends DegreeRegistration {
     private Map<CourseSchedule.CourseScheduleType, Integer> additionCourseInfo;
 
     private BigDecimal price;
+    
+    private boolean isUseBalance;
 
     public Map<CourseSchedule.CourseScheduleType, Integer> getAdditionCourseInfo() {
         return additionCourseInfo;
@@ -31,4 +33,12 @@ public class DegreeRegistrationActivityDto extends DegreeRegistration {
     public void setPrice(BigDecimal price) {
         this.price = price;
     }
+
+	public boolean isUseBalance() {
+		return isUseBalance;
+	}
+
+	public void setIsUseBalance(boolean isUseBalance) {
+		this.isUseBalance = isUseBalance;
+	}
 }

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java

@@ -69,6 +69,9 @@ public class TenantInfoDto implements Serializable {
     @ApiModelProperty(value = "机构logo")
     private String logo;
 
+    @ApiModelProperty(value = "城市id-sys_area")
+    private Integer areaId;
+
     /**
      * 客服电话
      */
@@ -106,6 +109,12 @@ public class TenantInfoDto implements Serializable {
     @ApiModelProperty(value = "机构配置参数")
     private TenantConfigDto config;
 
+    @ApiModelProperty(value = "购买的服务名称")
+    private String platformServeName;
+
+    @ApiModelProperty(value = "人数上线")
+    private Integer studentUpLimit;
+
     public Integer getId() {
         return id;
     }
@@ -162,6 +171,14 @@ public class TenantInfoDto implements Serializable {
         this.logo = logo;
     }
 
+    public Integer getAreaId() {
+        return areaId;
+    }
+
+    public void setAreaId(Integer areaId) {
+        this.areaId = areaId;
+    }
+
     public String getCustomerServicePhone() {
         return customerServicePhone;
     }
@@ -225,4 +242,20 @@ public class TenantInfoDto implements Serializable {
     public void setTsignName(String tsignName) {
         this.tsignName = tsignName;
     }
+
+    public String getPlatformServeName() {
+        return platformServeName;
+    }
+
+    public void setPlatformServeName(String platformServeName) {
+        this.platformServeName = platformServeName;
+    }
+
+    public Integer getStudentUpLimit() {
+        return studentUpLimit;
+    }
+
+    public void setStudentUpLimit(Integer studentUpLimit) {
+        this.studentUpLimit = studentUpLimit;
+    }
 }

+ 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;
+    }
 }
 

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java

@@ -41,6 +41,8 @@ public class DegreeRegistration {
      */
     @ApiModelProperty(value = "性别",required = true)
     private String gender;
+    
+	private String certificateType;
 
     /**
      * 身份证号
@@ -361,4 +363,12 @@ public class DegreeRegistration {
     public void setOrganId(Integer organId) {
         this.organId = organId;
     }
+
+	public String getCertificateType() {
+		return certificateType;
+	}
+
+	public void setCertificateType(String certificateType) {
+		this.certificateType = certificateType;
+	}
 }

+ 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;
+    }
 }

+ 21 - 35
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PlatformServe.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,58 +9,43 @@ import java.io.Serializable;
 import java.util.Date;
 
 /**
- * platform_product
- * @author 
+ * 服务管理(PlatformServe)表实体类
+ *
+ * @author hgw
+ * @since 2021-12-21 15:53:21
  */
-@ApiModel(value="产品管理")
+@ApiModel(value = "platform_serve-服务管理")
 public class PlatformServe implements Serializable {
-    /**
-     * 主键
-     */
-    @ApiModelProperty(value="主键")
     @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
     private Integer id;
 
-    /**
-     * 服务名称
-     */
-    @ApiModelProperty(value="服务名称")
+    @TableField("name_")
+    @ApiModelProperty(value = "服务名称")
     private String name;
 
-    /**
-     * 产品id多个用逗号分割
-     */
-    @ApiModelProperty(value="产品id多个用逗号分割")
+    @TableField("product_id_")
+    @ApiModelProperty(value = "产品id多个用逗号分割")
     private String productId;
 
-    /**
-     * 是否删除0未删除 1删除
-     */
-    @ApiModelProperty(value="是否删除0未删除 1删除")
+    @TableField("deleted_")
+    @ApiModelProperty(value = "是否删除0未删除 1删除")
     private Integer deleted;
 
-    /**
-     * 创建人
-     */
-    @ApiModelProperty(value="创建人")
+    @TableField("created_by_")
+    @ApiModelProperty(value = "创建人")
     private Integer createdBy;
 
-    /**
-     * 创建时间
-     */
-    @ApiModelProperty(value="创建时间")
+    @TableField("created_time_")
+    @ApiModelProperty(value = "创建时间")
     private Date createdTime;
 
-    /**
-     * 更新人
-     */
-    @ApiModelProperty(value="更新人")
+    @TableField("updated_by_")
+    @ApiModelProperty(value = "更新人")
     private Integer updatedBy;
 
-    /**
-     * 更新时间
-     */
-    @ApiModelProperty(value="更新时间")
+    @TableField("updated_time_")
+    @ApiModelProperty(value = "更新时间")
     private Date updatedTime;
 
     private static final long serialVersionUID = 1L;

+ 15 - 23
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PlatformServeDetail.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,40 +9,31 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
- * platform_serve_detail
- * @author 
+ * 服务管理明细(PlatformServeDetail)表实体类
+ *
+ * @author hgw
+ * @since 2021-12-21 15:57:33
  */
-@ApiModel(value="服务管理明细")
+@ApiModel(value = "platform_serve_detail-服务管理明细")
 public class PlatformServeDetail implements Serializable {
-    /**
-     * 主键
-     */
-    @ApiModelProperty(value="主键")
     @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
     private Integer id;
 
-    /**
-     * 服务管理表id
-     */
-    @ApiModelProperty(value="服务管理表id")
+    @TableField("serve_id_")
+    @ApiModelProperty(value = "服务管理表id")
     private Integer serveId;
 
-    /**
-     * 付费模式 月/年
-     */
-    @ApiModelProperty(value="付费模式 月/年")
+    @TableField("mode_")
+    @ApiModelProperty(value = "付费模式 月/年")
     private String mode;
 
-    /**
-     * 学员上限
-     */
-    @ApiModelProperty(value="学员上限")
+    @TableField("student_up_limit_")
+    @ApiModelProperty(value = "学员上限")
     private Integer studentUpLimit;
 
-    /**
-     * 服务原价
-     */
-    @ApiModelProperty(value="服务原价")
+    @TableField("original_price_")
+    @ApiModelProperty(value = "服务原价")
     private BigDecimal originalPrice;
 
     private static final long serialVersionUID = 1L;

+ 32 - 19
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantInfo.java

@@ -11,10 +11,11 @@ import java.io.Serializable;
 import java.util.Date;
 
 /**
- * 机构信息表
- * 对应数据库表(tenant_info):
+ * 机构表(TenantInfo)表实体类
+ *
+ * @author hgw
  */
-@ApiModel(value = "TenantInfo机构表")
+@ApiModel(value = "tenant_info-机构表")
 public class TenantInfo implements Serializable {
     @TableId(value = "id_", type = IdType.AUTO)
     @ApiModelProperty(value = "机构id")
@@ -60,6 +61,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;
@@ -166,6 +171,30 @@ public class TenantInfo implements Serializable {
         this.remark = remark;
     }
 
+    public String getTsignCode() {
+        return tsignCode;
+    }
+
+    public void setTsignCode(String tsignCode) {
+        this.tsignCode = tsignCode;
+    }
+
+    public String getTsignName() {
+        return tsignName;
+    }
+
+    public void setTsignName(String tsignName) {
+        this.tsignName = tsignName;
+    }
+
+    public Integer getAreaId() {
+        return areaId;
+    }
+
+    public void setAreaId(Integer areaId) {
+        this.areaId = areaId;
+    }
+
     public String getDomainName() {
         return domainName;
     }
@@ -230,22 +259,6 @@ public class TenantInfo implements Serializable {
         this.updatedTime = updatedTime;
     }
 
-    public String getTsignCode() {
-        return tsignCode;
-    }
-
-    public void setTsignCode(String tsignCode) {
-        this.tsignCode = tsignCode;
-    }
-
-    public String getTsignName() {
-        return tsignName;
-    }
-
-    public void setTsignName(String tsignName) {
-        this.tsignName = tsignName;
-    }
-
     @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;
+    }
+}

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/PlatformServeDetailService.java

@@ -1,4 +1,7 @@
 package com.ym.mec.biz.service;
 
-public interface PlatformServeDetailService {
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.PlatformServeDetail;
+
+public interface PlatformServeDetailService extends IService<PlatformServeDetail> {
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java

@@ -64,4 +64,11 @@ public interface StudentExtracurricularExercisesSituationService extends BaseSer
      * @return
      */
     int countWaitCreateHomeworkNum();
+    
+    /**
+     * 根据条件查询老师的服务指标
+     * @param queryInfo
+     * @return
+     */
+    List<TeacherServeDto> queryTeacherPerformanceIndicator(TeacherServeQueryInfo queryInfo);
 }

+ 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);
+
 }

+ 28 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -15,6 +15,7 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -29,6 +30,7 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
+
 import org.springframework.util.CollectionUtils;
 
 @Service
@@ -268,10 +270,11 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         if(amount.compareTo(degreeRegistration.getPrice())!=0){
             throw new BizException("商品价格不符");
         }
+        
+        Integer userId = degreeRegistration.getUserId();
 
         OrderTypeEnum type = OrderTypeEnum.DEGREE_REGISTRATION;
 
-        Integer userId = degreeRegistration.getUserId();
         String channelType = "";
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
         studentPaymentOrder.setUserId(userId);
@@ -279,7 +282,30 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
         studentPaymentOrder.setOrderNo(orderNo);
         studentPaymentOrder.setType(type);
         studentPaymentOrder.setExpectAmount(amount);
-        studentPaymentOrder.setActualAmount(amount);
+        
+        if(degreeRegistration.isUseBalance()){
+        	SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
+            if (userCashAccount == null) {
+                throw new BizException("用户账户找不到");
+            }
+            BigDecimal deductBalance = BigDecimal.ZERO;
+            if (userCashAccount.getBalance().subtract(amount).doubleValue() >= 0) {
+                // 更新订单信息
+                studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
+                studentPaymentOrder.setBalancePaymentAmount(amount);
+                deductBalance = amount;
+                studentPaymentOrder.setPaymentChannel("BALANCE");
+            } else {
+                studentPaymentOrder.setActualAmount(amount.subtract(userCashAccount.getBalance()));
+                studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
+                deductBalance = userCashAccount.getBalance();
+            }
+            amount = amount.subtract(deductBalance);
+            sysUserCashAccountService.updateBalance(userId, deductBalance.negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "考级报名");
+        }else{
+            studentPaymentOrder.setActualAmount(amount);
+            studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
+        }
         studentPaymentOrder.setStatus(DealStatusEnum.ING);
         studentPaymentOrder.setClassGroupId(degreeRegistration.getId());
         if(Objects.nonNull(degreeRegistration.getSporadicId())){

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -22,6 +22,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -546,4 +547,36 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 		}
 		return studentExtracurricularExercisesSituationDao.countWaitCreateHomeworkNum1(sysUser.getId());
 	}
+
+	@Override
+	public List<TeacherServeDto> queryTeacherPerformanceIndicator(TeacherServeQueryInfo queryInfo) {
+		if(StringUtils.isNotBlank(queryInfo.getOrganId())){
+			List<Integer> organIds = Arrays.stream(queryInfo.getOrganId().split(",")).map(e -> Integer.valueOf(e)).collect(Collectors.toList());
+			queryInfo.setOrganIds(organIds);
+		}
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<TeacherServeDto> dataList = null;
+		dataList = studentExtracurricularExercisesSituationDao.queryTeacherPerformanceIndicator(params);
+		List<Integer> teacherIds = dataList.stream().map(TeacherServeDto::getTeacherId).collect(Collectors.toList());
+		List<StudentExtracurricularExercisesSituation> teacherServeWithDate = studentExtracurricularExercisesSituationDao.findTeacherServeWithDate(queryInfo.getMonday(), queryInfo.getSunday(), teacherIds, null);
+		Map<Integer, List<StudentExtracurricularExercisesSituation>> teacherServeMap = teacherServeWithDate.stream().collect(Collectors.groupingBy(StudentExtracurricularExercisesSituation::getTeacherId));
+		for (TeacherServeDto teacherServeDto : dataList) {
+			List<StudentExtracurricularExercisesSituation> tss = teacherServeMap.get(teacherServeDto.getTeacherId());
+			Set<Long> courseIds = new HashSet<>();
+			for (StudentExtracurricularExercisesSituation ts : tss) {
+				if(teacherServeDto.getMonday().compareTo(ts.getMonday())!=0){
+					continue;
+				}
+				if(StringUtils.isBlank(ts.getCourseIds())){
+					continue;
+				}
+				Set<Long> ids = Arrays.stream(ts.getCourseIds().split(",")).map(s -> Long.valueOf(s)).collect(Collectors.toSet());
+				courseIds.addAll(ids);
+			}
+			teacherServeDto.setHomeworkNum(courseIds.size());
+		}
+		return dataList;
+	}
 }

+ 138 - 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;
@@ -44,11 +54,25 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     @Autowired
     private PlatformProductService platformProductService;
     @Autowired
+    private PlatformServeService platformServeService;
+    @Autowired
+    private PlatformServeDetailService platformServeDetailService;
+    @Autowired
     private TenantConfigService tenantConfigService;
     @Autowired
     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 +102,20 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
                 tenantProductInfoService::addTenantProduct);
         //添加机构配置
         setIdByApply(tenantId, dto.getConfig(), dto.getConfig()::setTenantId, tenantConfigService::addConfig);
+        //创建一个和机构同名称的“分部”
+        createOrg(tenantInfo,dto.getAreaId());
+    }
+
+    //创建一个和机构同名称的“分部”
+    private void createOrg(TenantInfo tenantInfo,Integer areaId) {
+        Organization organization = new Organization();
+        organization.setName(tenantInfo.getName());
+        organization.setDelFlag(YesOrNoEnum.NO);
+        organization.setGradeType(GradeTypeEnum.SIX_PLUS);
+        organization.setCreateTime(new Date());
+        organization.setTenantId(tenantInfo.getId());
+        organization.setAreaId(areaId);
+        organizationDao.insert(organization);
     }
 
     /**
@@ -147,6 +185,18 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>()
                 .eq("tenant_id_", tenantId));
         setTenantInfo(tenantConfig, new TenantConfigDto(), tenantInfoDto::setConfig);
+        //获取服务信息
+        PlatformServe platformServe = platformServeService.getOne(new QueryWrapper<PlatformServe>()
+                .eq("id_", productInfo.getServeId()));
+        Optional.ofNullable(platformServe)
+                .map(PlatformServe::getName)
+                .ifPresent(tenantInfoDto::setPlatformServeName);
+        //获取服务详情
+        PlatformServeDetail serveDetail = platformServeDetailService.getOne(new QueryWrapper<PlatformServeDetail>()
+                .eq("id_", productInfo.getServeDetailId()));
+        Optional.ofNullable(serveDetail)
+                .map(PlatformServeDetail::getStudentUpLimit)
+                .ifPresent(tenantInfoDto::setStudentUpLimit);
         return tenantInfoDto;
     }
 
@@ -283,10 +333,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));
     }
 
 }

+ 9 - 2
mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml

@@ -28,6 +28,7 @@
         <result column="status_" jdbcType="TINYINT" property="status"/>
         <result column="activity_tag_" property="activityTag"/>
         <result column="degree_type_" property="degreeType"/>
+        <result column="certificate_type_" property="certificateType"/>
     </resultMap>
 
     <select id="get" parameterType="java.lang.Integer" resultMap="DegreeRegistration">
@@ -137,13 +138,13 @@
         idcard_, city_, school_,
         subject_,level_, theory_level_,theory_money_, theory_cert_,mobile_,
         money_, memo_, create_time_,
-        update_time_, status_, activity_tag_,degree_type_)
+        update_time_, status_, activity_tag_,degree_type_,certificate_type_)
         values (#{userId},#{sporadicId,jdbcType=INTEGER},#{organId,jdbcType=INTEGER}, #{orderNo,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR},
         #{idcard,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR},
         #{subject,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR},
         #{theoryLevel,jdbcType=VARCHAR},#{theoryMoney,jdbcType=DECIMAL},
         #{theoryCert,jdbcType=VARCHAR},#{mobile,jdbcType=VARCHAR},#{money,jdbcType=DECIMAL}, #{memo,jdbcType=VARCHAR},
-        #{createTime}, #{updateTime}, #{status,jdbcType=TINYINT}, #{activityTag}, #{degreeType})
+        #{createTime}, #{updateTime}, #{status,jdbcType=TINYINT}, #{activityTag}, #{degreeType},#{certificateType})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
         <!--@mbg.generated-->
@@ -215,6 +216,9 @@
             <if test="activityTag != null">
                 activity_tag_ = #{activityTag},
             </if>
+            <if test="certificateType != null">
+                certificate_type_ = #{certificateType},
+            </if>
                 update_time_ = NOW()
         </set>
         where id_ = #{id,jdbcType=INTEGER}
@@ -290,6 +294,9 @@
                 <if test="degree.activityTag != null">
                     activity_tag_ = #{degree.activityTag},
                 </if>
+	            <if test="degree.certificateType != null">
+	                certificate_type_ = #{degree.certificateType},
+	            </if>
                     update_time_ = NOW()
             </set>
             where id_ = #{degree.id,jdbcType=INTEGER}

+ 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>
 
     <!-- 根据主键查询一条记录 -->

+ 27 - 0
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -749,4 +749,31 @@
 		AND se.expect_exercises_num_ > se.actual_exercises_num_ AND DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN se.monday_ AND se.sunday_
 		AND se.serve_type_ = 'HOMEWORK' AND cs.group_type_ != 'MUSIC' AND cs.class_date_ &lt;= DATE_FORMAT(NOW(), '%Y-%m-%d'))t
 	</select>
+
+	<select id="queryTeacherPerformanceIndicator" resultMap="TeacherServeDto">
+		SELECT
+			organ.name_ organ_name_,
+			sees.monday_,
+			sees.sunday_,
+			sees.teacher_id_,
+			su.real_name_ teacher_name_,
+		    tea.job_nature_,
+			SUM(expect_exercises_num_) expect_exercises_num_,
+			SUM(actual_exercises_num_) actual_exercises_num_,
+			SUM(exercises_reply_num_) exercises_reply_num_,
+			SUM(exercises_message_num_) exercises_message_num_,
+			SUM(exercises_message_timely_num_) exercises_message_timely_num_,
+			SUM(CASE sees.serve_type_ WHEN 'HOMEWORK' THEN sees.expect_exercises_num_ ELSE 0 END) homework_num_,
+			SUM(CASE sees.serve_type_ WHEN 'EXERCISE' THEN 1 ELSE 0 END) exercise_num_,
+			SUM( sees.expect_exercises_num_-sees.not_over_course_num_ )> SUM( sees.actual_exercises_num_ ) un_done_
+		FROM
+			student_extracurricular_exercises_situation_ sees
+			LEFT JOIN teacher tea ON tea.id_=sees.teacher_id_
+			LEFT JOIN organization organ ON organ.id_=tea.organ_id_
+			LEFT JOIN sys_user su ON tea.id_=su.id_
+		<include refid="queryTeacherServeInfoCondition" />
+		GROUP BY sees.teacher_id_
+		ORDER BY sees.teacher_id_
+		<include refid="global.limit"></include>
+	</select>
 </mapper>

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

@@ -86,7 +86,7 @@
             operating_tag_,
         </if>
         teacher_id_,create_time_,update_time_,service_tag_update_time_,cooperation_organ_id_,
-        care_package_,come_on_package_,member_rank_setting_id_,membership_start_time_,membership_end_time_)
+        care_package_,come_on_package_,member_rank_setting_id_,membership_start_time_,membership_end_time_,current_grade_num_,current_class_)
         VALUES
         (#{userId},#{schoolName},#{subjectIdList},
         <if test="serviceTag != null">
@@ -96,7 +96,7 @@
             #{operatingTag},
         </if>
         #{teacherId},NOW(),NOW(),NOW(),#{cooperationOrganId},
-         #{carePackage},#{comeOnPackage},#{memberRankSettingId},#{membershipStartTime},#{membershipEndTime})
+         #{carePackage},#{comeOnPackage},#{memberRankSettingId},#{membershipStartTime},#{membershipEndTime},#{currentGradeNum},#{currentClass})
     </insert>
 
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.Student">

+ 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-gateway/mec-gateway-web/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.114.1.200:8848
+spring.cloud.nacos.config.server-addr=47.114.176.40:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 1 - 0
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -165,6 +165,7 @@ public class RoomController{
     @RequestMapping(value = "/device/control", method = RequestMethod.POST)
     public Object controlDevice(@RequestBody ReqDeviceControlData data)
             throws Exception {
+        log.info("device_control: {}",JSONObject.toJSON(data));
         return new BaseResponse<>(roomService.controlDevice(data));
     }
 

+ 2 - 2
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -853,14 +853,14 @@ public class RoomServiceImpl implements RoomService {
             enable = data.getMusicScoreOn();
             if(enable){
                 //保存伴奏音量
-                roomDao.updateSoundVolumeById(roomId,data.getSoundVolume());
+                roomDao.updateSoundVolumeById(roomId,data.getSoundVolume()==null?0:data.getSoundVolume());
             }
         }else if (data.getAccompanimentOn() != null) {
             typeEnum = DeviceTypeEnum.MusicScoreAccompaniment;
             enable = data.getAccompanimentOn();
             if(enable){
                 //保存伴奏音量
-                roomDao.updateSoundVolumeById(roomId,data.getSoundVolume());
+                roomDao.updateSoundVolumeById(roomId,data.getSoundVolume()==null?0:data.getSoundVolume());
             }
         } else {
             throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);

+ 1 - 1
mec-monitor/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.85.100:8848
+spring.cloud.nacos.config.server-addr=47.114.176.40:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e

+ 5 - 3
mec-student/src/main/java/com/ym/mec/student/controller/DegreeController.java

@@ -102,9 +102,11 @@ public class DegreeController extends BaseController {
         	return failed("请从正确入口进行报名");
         }
         
-        IdcardValidator idcardValidator = new IdcardValidator();
-        if (!debugMode && !idcardValidator.isValidatedAllIdcard(degreeRegistration.getIdcard())) {
-            throw new BizException("身份证号不正确,请核对");
+        if("IDENTITY".equals(degreeRegistration.getCertificateType())){
+	        IdcardValidator idcardValidator = new IdcardValidator();
+	        if (!debugMode && !idcardValidator.isValidatedAllIdcard(degreeRegistration.getIdcard())) {
+	            throw new BizException("身份证号不正确,请核对");
+	        }
         }
         SporadicChargeInfo info = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
         if (info == null || info.getDelFlag().equals(1)) {

+ 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/*","/tenantInfo/notify"
                 )
                 .permitAll().anyRequest().authenticated().and().httpBasic();
     }

+ 38 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -3544,8 +3544,6 @@ public class ExportController extends BaseController {
         }
     }
 
-
-
     @ApiOperation(value = "启蒙课问卷导出")
     @RequestMapping("export/musicEnlightenmentQuestionnaires")
     @PreAuthorize("@pcs.hasPermissions('export/musicEnlightenmentQuestionnaires')")
@@ -3588,4 +3586,42 @@ public class ExportController extends BaseController {
             }
         }
     }
+
+    @ApiOperation(value = "服务指标导出")
+    @RequestMapping("export/exercisesSituation")
+    @PreAuthorize("@pcs.hasPermissions('export/exercisesSituation')")
+    public void exportExercisesSituation(TeacherServeQueryInfo queryInfo, HttpServletResponse response) throws IOException {
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        List<TeacherServeDto> list = studentExtracurricularExercisesSituationService.queryTeacherPerformanceIndicator(queryInfo);
+        if (list.size() <= 0) {
+            response.setStatus(500);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] header = {"分部","老师编号","老师姓名","预计安排(人次)","实际安排(人次)","布置率(%)","提交人数","点评次数","点评率(%)","及时点评次数","及时点评率(%)"};
+            String[] body = {"organName","teacherId","teacherName","expectExercisesNum","actualExercisesNum","100 * actualExercisesNum / expectExercisesNum","exercisesReplyNum","exercisesMessageNum","100 * exercisesMessageNum / exercisesReplyNum", "exercisesMessageTimelyNum","100 * exercisesMessageTimelyNum / exercisesReplyNum"};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, list);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=teacherPerformanceIndicator-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }

+ 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);
+    }
+
 }

+ 1 - 1
mec-zipkin/src/main/resources/bootstrap-test.properties

@@ -1,7 +1,7 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.85.100:8848
+spring.cloud.nacos.config.server-addr=47.114.176.40:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
 spring.cloud.nacos.config.namespace=02105743-16b8-46ab-87df-2aca0f3dbca3
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e