瀏覽代碼

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

zouxuan 3 年之前
父節點
當前提交
4481ce0ca6

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

@@ -49,6 +49,7 @@ public class TenantInfoDto implements Serializable {
     /**
      * 地址
      */
+    @NotBlank(message = "地址不能为空!")
     @Size(max = 200, message = "地址不能超过200个字!")
     @ApiModelProperty(value = "地址")
     private String address;

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

@@ -119,6 +119,8 @@ public class Teacher extends SysUser {
 	private Integer lectureNum;
 	
 	private String memo;
+	
+	private String contractUrl;
 
 	private BigDecimal operatingIndex;
 	private BigDecimal serviceIndex;
@@ -390,6 +392,14 @@ public class Teacher extends SysUser {
 		this.memo = memo;
 	}
 
+	public String getContractUrl() {
+		return contractUrl;
+	}
+
+	public void setContractUrl(String contractUrl) {
+		this.contractUrl = contractUrl;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantContractRecord.java

@@ -3,6 +3,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 com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -68,6 +69,7 @@ public class TenantContractRecord implements Serializable {
     @ApiModelProperty(value = "协议类型 0机构开通 1机构续费 待补充")
     private Integer type;
 
+    @JsonFormat(pattern = "yyyy-MM-dd")
     @TableField("biz_date_")
     @ApiModelProperty(value = "创建日期")
     private Date bizDate;

+ 39 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -10,11 +10,13 @@ import com.ym.mec.auth.api.entity.SysRole;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.TenantContractTemplateDao;
 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.entity.TenantContractTemplate;
 import com.ym.mec.biz.dal.entity.TenantContractRecord.TenantContractRecordEnum;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.vo.PlatformServePageVo;
@@ -108,6 +110,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     @Autowired
     @Lazy
     private ContractService contractService;
+    
     @Autowired
     private SysAreaService sysAreaService;
     @Autowired
@@ -116,6 +119,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     private TenantPreJoinService tenantPreJoinService;
     @Autowired
     private TenantContractRecordService tenantContractRecordService;
+    @Autowired
+    private TenantContractTemplateDao tenantContractTemplateDao;
 
     @Value("${contract.baseDir:/var/pdf}")
     private String contractBaseDir;
@@ -173,7 +178,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         setIdByApply(tenantId, dto.getConfig(), dto.getConfig()::setTenantId, tenantConfigService::addConfig);
         //查询机构入驻表如果公司全称和联系电话相同则把入驻表修改为已入驻
         TenantPreJoin preJoin = tenantPreJoinService.getOne(new QueryWrapper<TenantPreJoin>()
-                .eq("phone_", dto.getPhone())
+                .eq("tsign_code_", dto.getTsignCode())
                 .eq("state_", 0));
         if (Objects.nonNull(preJoin)) {
             preJoin.setState(1);
@@ -189,11 +194,32 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void updateTenantInfo(TenantInfoDto dto) {
+    	
         //查询机构信息
         TenantInfo tenantInfo = Optional.ofNullable(dto)
                 .map(TenantInfoDto::getId)
                 .map(this::getById)
                 .orElseThrow(() -> new BizException("未找到该机构信息,机构信息不能为空!"));
+        
+        Integer tenantId = tenantInfo.getId();
+        
+        //是否修改了机构名称或机构编码
+        if(!StringUtils.equals(dto.getTsignName(), tenantInfo.getTsignName()) || !StringUtils.equals(dto.getTsignCode(), tenantInfo.getTsignCode())){
+        	//升级机构协议版本号
+        	TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(null, null, tenantId);
+        	if(tenantContractTemplate != null){
+        		baseMapper.getLocked(tenantId);
+        		
+        		Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
+        		int version = maxVersion == null ? 1 : maxVersion + 1;
+        		
+        		tenantContractTemplate.setVersion(version);
+        		Date date = new Date();
+        		tenantContractTemplate.setUpdateTime(date);
+        		
+        		tenantContractTemplateDao.update(tenantContractTemplate);
+        	}
+        }
 
         //机构状态 1已缴费,并且 机构注册的手机号与本次修改后的手机号不同,就证明本次修改了手机号 则需要修改机构的账号信息
         if (1 == tenantInfo.getPayState() && !Objects.equals(tenantInfo.getPhone(), dto.getPhone())) {
@@ -535,7 +561,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
             throw new BizException("读取产品协议出错");
         } finally {
             //删除文件
-            FileUtils.deleteQuietly(srcFile);
+//            FileUtils.deleteQuietly(srcFile);
         }
     }
 
@@ -544,12 +570,16 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      */
     private Map<String, Object> getContractParam(TenantInfoInfoPageVo tenantInfo, Date now) {
         //将数据转换为Map
-        Map<String, Object> param = toMap(tenantInfo);
+        Map<String, Object> param = WrapperUtil.toMap(tenantInfo);
+        //当前时间
         param.put("nowDate", DateUtils.formatDate(now, "yyyy年MM月dd日"));
+        //服务过期时间
         param.put("expireDate", DateUtils.formatDate(getExpiryDate(tenantInfo.getExpiryCount(), tenantInfo.getExpiryUnit(), now), "yyyy年MM月dd日"));
+        //购买服务的时长单位
         param.put("expiryUnit", TenantProductInfo.MONTH.equals(tenantInfo.getExpiryUnit()) ? "月" : "年");
+        //乙方公章
         param.put("officialSealB", "https://daya.ks3-cn-beijing.ksyun.com/202202/Sx6rzWm.png");
-        //写入产品名称
+        //获取产品名称
         opsContractData(tenantInfo.getServeId(), platformServeService::queryProductNameById,
                 "未查询到产品信息!",
                 param::put, "productName", PlatformServePageVo::getProductName);
@@ -565,13 +595,15 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         TenantConfig tenantConfig = opsContractData(tenantInfo.getId(), tenantConfigService::queryByTenantId,
                 "未查询到机构配置信息!",
                 param::put, "chargeRate", TenantConfig::getChargeRate);
+        //甲方企业公章
+        param.put("officialSealA", tenantConfig.getCorporateChops());
         //获取云教室规则  String人数 BigDecimal每分钟扣费标准
         Map<String, BigDecimal> rule = opsContractData(tenantConfig.getConfig(), tenantConfigService::getCloudRoomRule,
                 "未查询到云教室的价格配置!",
                 param::put, "rowspan", Map::size);
 
         AtomicReference<String> rowspanData = new AtomicReference<>("");
-        //生成默认云教室数据
+        //生成云教室扣费的样式
         rule.forEach((k, v) -> {
             //人数
             int count = Integer.parseInt(k) - 1;
@@ -585,13 +617,6 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         return param;
     }
 
-    private Map toMap(TenantInfoInfoPageVo tenantInfo) {
-        return Optional.ofNullable(tenantInfo)
-                .map(JSONObject::toJSON)
-                .map(o -> JSONObject.toJavaObject((JSONObject) o, Map.class))
-                .orElse(null);
-    }
-
     private static <O, T, S> T opsContractData(O param, Function<O, T> fun, String msg,
                                                BiConsumer<String, Object> putC, String key, Function<T, S> val) {
         Optional<T> optional = Optional.ofNullable(fun.apply(param));
@@ -620,7 +645,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      */
     public String getContractAndUpLoad(Integer tenantId) {
         Date now = new Date();
-        //创建地址
+        //创建PDF本次缓存地址
         String srcPdfPath = contractBaseDir + lexiaoyaContract + DateUtils.formatDate(now, "yyyyMMddHHmmss") + "/" + tenantId + "_" + java.time.LocalDateTime.now().getSecond() + ".pdf";
         //生成文件
         File srcFile = new File(srcPdfPath);
@@ -640,7 +665,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         String dateStrOss = DateUtils.formatDate(now, "yyyy/MM/dd");
         dateStrOss = "oa/" + dateStrOss + "/" + DateUtil.getHour(now);
         String pdfFilePath = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
-        //删除生成的文件
+        //删除本次PDF生成的文件缓存
         FileUtils.deleteQuietly(srcFile);
         return pdfFilePath;
     }

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPreJoinServiceImpl.java

@@ -54,8 +54,8 @@ public class TenantPreJoinServiceImpl extends ServiceImpl<TenantPreJoinDao, Tena
         IPage<TenantPreJoin> page = this.page(pageInfo,
                 new WrapperUtil<TenantPreJoin>()
                         .hasEq("state_", param.get("state"))
-                        .hasGe("create_time_", param.get("startTime"))
-                        .hasLe("create_time_", param.get("endTime"))
+                        .hasGe("created_time_", param.get("startTime"))
+                        .hasLe("created_time_", param.get("endTime"))
                         .queryWrapper()
                         .and(Objects.nonNull(search),
                                 o -> o.eq("tsign_name_", search)
@@ -78,7 +78,7 @@ public class TenantPreJoinServiceImpl extends ServiceImpl<TenantPreJoinDao, Tena
         opsAreaData(obj.getAreaId(), sysAreaService::getParentArea,
                 () -> new BizException("未查询到区域id为 [" + obj.getAreaId() + "]的数据!"),
                 obj::setProvinceId, obj::setProvinceName);
-
+        obj.setState(0);
         obj.setCreatedTime(new Date());
         return baseMapper.insert(obj);
     }

+ 9 - 5
mec-biz/src/main/resources/config/contracts/lexiaoyaContract.ftl

@@ -65,7 +65,7 @@
             left: 50%;
             width: 140px;
             height: 140px;
-            margin-left: -70px;
+            margin-left: -90px;
         }
 
         .iInfo {
@@ -271,9 +271,11 @@
 
     <table border="1" style="width: 100%; border-collapse: collapse;">
         <tr>
-            <td style="text-align: center;">甲方盖章:</td>
             <td style="text-align: center;">
-                乙方盖章<div class="sign"><img class="cachet" src="${officialSealB}" alt="" /></div>
+                甲方盖章:<div class="sign"><img class="cachet" src="${officialSealA}" alt="" /></div>
+            </td>
+            <td style="text-align: center;">
+                乙方盖章:<div class="sign"><img class="cachet" src="${officialSealB}" alt="" /></div>
             </td>
         </tr>
         <tr>
@@ -400,9 +402,11 @@
             <td style="text-align: center;">乙方:武汉乐小雅网络科技有限公司</td>
         </tr>
         <tr>
-            <td style="text-align: center;">甲方盖章:</td>
             <td style="text-align: center;">
-                乙方盖章<div class="sign"><img class="cachet" src="${officialSealB}" alt="" /></div>
+                甲方盖章:<div class="sign"><img class="cachet" src="${officialSealA}" alt="" /></div>
+            </td>
+            <td style="text-align: center;">
+                乙方盖章:<div class="sign"><img class="cachet" src="${officialSealB}" alt="" /></div>
             </td>
         </tr>
         <tr>

+ 3 - 1
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -56,6 +56,7 @@
         <result column="subject_name_" property="splitSubjectName"/>
         <result column="id_card_no_" property="idCardNo"/>
         <result column="is_settlement_salary_" property="isSettlementSalary"/>
+        <result column="contract_url_" property="contractUrl"/>
         <result column="tenant_id_" property="tenantId"/>
     </resultMap>
     
@@ -375,9 +376,10 @@
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="Teacher" parameterType="map">
         SELECT t.id_,su.real_name_,su.lock_flag_,t.subject_id_,su.phone_,t.organ_id_ teacher_organ_id_,t.organ_id_,t.is_support_extra_practice_lesson_,
-        t.job_nature_,t.demission_date_,t.formal_staff_date_,t.is_probation_period_,t.memo_,GROUP_CONCAT(s.name_) subject_name_,su.del_flag_,t.is_settlement_salary_
+        t.job_nature_,t.demission_date_,t.formal_staff_date_,t.is_probation_period_,t.memo_,GROUP_CONCAT(s.name_) subject_name_,su.del_flag_,t.is_settlement_salary_,tc.url_ contract_url_
         FROM teacher t
         LEFT JOIN sys_user su ON t.id_ = su.id_
+        left join teacher_contracts tc on tc.user_id_ = t.id_
         LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,t.subject_id_)
         <include refid="queryPageMap"/>
         GROUP BY t.id_

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

@@ -43,7 +43,7 @@
         <result column="tsign_name_" jdbcType="VARCHAR" property="tsignName"/>
         <result column="contacts_" jdbcType="VARCHAR" property="contacts"/>
         <result column="phone_" jdbcType="VARCHAR" property="phone"/>
-        <result column="address_" jdbcType="VARCHAR" property="address"/>
+        <result column="address_" property="address"/>
         <result column="email_" jdbcType="VARCHAR" property="email"/>
         <result column="pay_state_" jdbcType="INTEGER" property="payState"/>
         <result column="state_" jdbcType="INTEGER" property="state"/>
@@ -62,7 +62,7 @@
         <result column="expiry_unit_" jdbcType="VARCHAR" property="expiryUnit"/>
     </resultMap>
     
-    <select id="getLocked" resultMap="TenantInfoInfoResult">
+    <select id="getLocked" resultMap="BaseResultMap">
     	select * from tenant_info WHERE id_ = #{tenantId} for update
     </select>
 

+ 13 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/page/WrapperUtil.java

@@ -1,5 +1,6 @@
 package com.ym.mec.common.page;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ym.mec.common.exception.BizException;
 import org.apache.commons.collections.CollectionUtils;
@@ -241,6 +242,7 @@ public class WrapperUtil<T> {
      * <p> a -> [3,6]
      * <p> b -> [2]
      */
+    @SuppressWarnings("unchecked")
     public static <O> void listDifference(List<O> a, List<O> b) {
         //将ab并集
         Collection<O> abUn = CollectionUtils.retainAll(a, b);
@@ -250,4 +252,15 @@ public class WrapperUtil<T> {
         b.removeAll(abUn);
     }
 
+    @SuppressWarnings("unchecked")
+    public static Map<String, Object> toMap(Object obj) {
+        if (obj instanceof Map) {
+            return (Map<String, Object>) obj;
+        }
+        return Optional.ofNullable(obj)
+                .map(JSONObject::toJSON)
+                .map(o -> JSONObject.toJavaObject((JSONObject) o, Map.class))
+                .orElse(new HashMap<String, Object>());
+    }
+
 }