yonge 3 rokov pred
rodič
commit
891eab5190

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TenantContractTemplateQueryInfo.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class TenantContractTemplateQueryInfo extends QueryInfo {
+
+    private Boolean status;
+
+	public Boolean getStatus() {
+		return status;
+	}
+
+	public void setStatus(Boolean status) {
+		this.status = status;
+	}
+
+}

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/TenantContractTemplateService.java

@@ -31,10 +31,11 @@ public interface TenantContractTemplateService extends BaseService<Integer, Tena
 	
 	/**
 	 * 查询最新协议模板
+	 * @param tenantId
 	 * @param owner
 	 * @param type
 	 * @return
 	 */
-	String queryLatestContractTemplate(String owner, String type);
+	TenantContractTemplate queryLatestContractTemplate(Integer tenantId, String owner, String type);
 	
 }

+ 26 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -16,6 +16,7 @@ import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.eseal.ESealPlugin;
 import com.ym.mec.thirdparty.storage.StoragePluginContext;
 import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
@@ -25,6 +26,7 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.freemarker.FreemarkerTemplateEngine;
 import com.ym.mec.util.money.MoneyUtil;
 import com.ym.mec.util.pdf.PDFUtil;
+
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -115,6 +117,9 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
     
     @Autowired
     private TenantConfigService tenantConfigService;
+    
+    @Autowired
+    private TenantContractTemplateService tenantContractTemplateService;
 
     @Value("${contract.baseDir:/var/pdf}")
     private String contractBaseDir;
@@ -907,8 +912,18 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
         if (Objects.nonNull(courseViewType)) {
             ownershipType = courseViewType;
         }
+		
+        // 查询最新协议模板
+		TenantContractTemplate tenantContractTemplate = tenantContractTemplateService.queryLatestContractTemplate(TenantContextHolder.getTenantId(), null, null);
+		if(tenantContractTemplate == null){
+			logger.error("最新协议模板查询失败");
+			return;
+		}
+		String mainContent = tenantContractTemplate.getContractTemplateContent();
+		params.put("contractMainContent", mainContent);
 
-        List<SysUserContracts> userContracts = sysUserContractsService.getUserContractWithType(userId, ContractType.PRODUCT, ownershipType.getContractVersion());
+        // 查询是否已生成协议
+        List<SysUserContracts> userContracts = sysUserContractsService.getUserContractWithType(userId, ContractType.PRODUCT, tenantContractTemplate.getVersion());
         if (!CollectionUtils.isEmpty(userContracts)) {
             return;
         }
@@ -936,7 +951,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			}
 		}
 
-        templateEngine.render(params, "product" + ownershipType.getContractVersion() + ".ftl", srcFile);
+        templateEngine.render(params, "latest_contract_template.ftl", srcFile);
 
         // 生成借款协议PDF
         try {
@@ -979,7 +994,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
         sysUserContracts.setType(ContractType.PRODUCT);
         sysUserContracts.setUrl(pdfFilePath);
         sysUserContracts.setUserId(userId);
-        sysUserContracts.setVersion(ownershipType.getContractVersion());
+        sysUserContracts.setVersion(tenantContractTemplate.getVersion());
 
         sysUserContractsService.insert(sysUserContracts);
 
@@ -1061,8 +1076,15 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 				params.put("sealPicture", "https://daya-online.oss-cn-beijing.aliyuncs.com/website/clcf.png");
 			}
 		}
+		
+		TenantContractTemplate tenantContractTemplate = tenantContractTemplateService.queryLatestContractTemplate(TenantContextHolder.getTenantId(), null, null);
+		if(tenantContractTemplate == null){
+			throw new BizException("最新协议模板查询失败");
+		}
+		String mainContent = tenantContractTemplate.getContractTemplateContent();
+		params.put("contractMainContent", mainContent);
 
-        templateEngine.render(params, "product" + ownershipType.getContractVersion() + ".ftl", srcFile);
+        templateEngine.render(params, "latest_contract_template.ftl", srcFile);
 
         String html = "";
         try {

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

@@ -19,7 +19,6 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.collection.MapUtil;
 
 @Service
@@ -86,13 +85,13 @@ public class TenantContractTemplateServiceImpl extends BaseServiceImpl<Integer,
 	}
 
 	@Override
-	public String queryLatestContractTemplate(String owner, String type) {
-		TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(owner, type, TenantContextHolder.getTenantId());
+	public TenantContractTemplate queryLatestContractTemplate(Integer tenantId, String owner, String type) {
+		TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(owner, type, tenantId);
 		
 		if(tenantContractTemplate == null){
 			throw new BizException("未查询到协议模板");
 		}
-		return tenantContractTemplate.getContractTemplateContent();
+		return tenantContractTemplate;
 	}
 	
 }

+ 140 - 0
mec-biz/src/main/resources/config/contracts/latest_contract_template.ftl

@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <meta http-equiv="Cache-Control" content="no-cache" />
+    <meta http-equiv="Expires" content="0" />
+    <title>产品与服务协议</title>
+    <style>
+        body { margin: 0; }
+        header {
+            height: 40px;
+            line-height: .40px;
+            color: #000;
+            font-size: 17px;
+            background: #fff;
+            box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.07);
+            text-align: center;
+        }
+        header .back {
+            width: 20px;
+            height: 20px;
+            position: absolute;
+            left: 12px;
+            top: 10px;
+        }
+        .container {
+            padding: 22px 20px 3px;
+            font-size: 14px;
+        }
+        h1 {
+            font-size: 18px;
+            text-align: center;
+            margin-bottom: 8px;
+        }
+        h2 {
+            font-size: 16px;
+            font-weight: bold;
+            padding-top: 15px;
+        }
+        h3 {
+            font-size: 14px;
+            font-weight: bold;
+        }
+        .signature {
+            padding-top: 50px;
+        }
+        .signature .sign {
+            position: relative;
+            width: 49%;
+            display: inline-block;
+        }
+        .signature span {
+            display: block;
+        }
+        .signature .cachet {
+            position: absolute;
+            top: -60px;
+            left: 0;
+            width: 150px;
+            height: 150px;
+        }
+        .iInfo {
+            display: flex;
+        }
+        .iInfo span {
+            flex: 1;
+        }
+        .iInfoContent, .iInfoContent span {
+            display: block;
+        }
+
+        .underline {
+            text-decoration: underline;
+        }
+        .bold {
+            font-weight: bold;
+        }
+    </style>
+</head>
+<body style="font-family:'SimSun'">
+    <div class="container">
+        <h1>《产品与服务协议》</h1>
+                            甲方:${companyName} <br/>
+
+        <div style="display: flex;">乙方:
+            <div style="flex: 1 auto;">
+                <div class="iInfo">
+                    <span>家长姓名:${studentInfo.realName!}</span>
+                    <span>电话:${studentInfo.phone!}</span>
+                </div>
+                <#if studentInfo.certificateType == 'IDENTITY'>
+                    <div class="iInfo">
+                        <span>身份证号:${studentInfo.idCardNo!}</span>
+                    </div>
+                </#if>
+                <div class="iInfo">
+                    <span>学生姓名:${studentInfo.username!}</span>
+                </div>
+                <#if studentInfo.grade?default("")?trim?length gt 1>
+                <div class="iInfo">
+                    <span>所在班级:${studentInfo.grade!} ${studentInfo.clazz!}</span>
+                </div>
+                </#if>
+                <#if studentInfo.subject.name?default("")?trim?length gt 1>
+                <div class="iInfo">
+                    <span>所在声部:${studentInfo.subject.name!}</span>
+                </div>
+                </#if>
+            </div>
+        </div>
+        <div>(本协议中“乙方“指学员及家长;”乙方学员“指购买甲方产品或服务的学员;”乙方家长“仅指乙方学员的法定监护人。)</div>
+
+        <p class="underline bold">重要须知:在注册或购买使用甲方提供的产品、服务之前,请您务必审慎阅读、充分理解本使用协议各条款内容, 特别是免除或者限制甲方责任的条款、对您权利进行限制的条款、约定争议解决方式和司法管辖的条款等。 限制、免责条款或者其他涉及您重大权益的条款可能以加粗、加下划线等形式提示您重点注意。您注册或购买使用甲方提供的产品和服务,均视为您同意本使用协议,以及同意接受本使用协议的约束。</p>
+        <p class="underline bold">如无特别说明 ,下列术语在本协议中的定义为:管乐迷平台(下称“本平台”),即管乐迷APP;(下称“本平台”)指由甲方提供的器乐教学全流程辅助系统,包括媒体资料,教师点评,课前、课中、课后管理等服务;乐器练习云教练 (下称“本系统”),指由甲方提供和维护的器乐辅助练习系统;具体以该系统实际提供为准。该系统将根据实际需要进行调整和增减,乙方使用平台时需遵守本服务协议。</p>
+
+		${contractMainContent!}
+        
+        <div class="signature">
+        	<#if isShowVisualSeal>
+            <div class="sign">甲方签章:${companyName}<img class="cachet" src="${sealPicture!}" alt="" />
+                <span>日期:${.now?string("yyyy年MM月dd日")}</span>
+            </div>
+            <div class="sign">乙方签章:${studentInfo.realName!}
+                <span>日期:${.now?string("yyyy年MM月dd日")} </span>
+            </div>
+        	<#else>
+            <div class="sign">甲方签章:${companyName}
+                <span>日期:${.now?string("yyyy年MM月dd日")}</span>
+            </div>
+            <div class="sign">乙方签章:
+                <span>日期:${.now?string("yyyy年MM月dd日")} </span>
+            </div>
+        	</#if>
+        </div>
+    </div>
+</body>
+</html>

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

@@ -130,10 +130,22 @@
 	</select>
 	
 	<select id="queryLatestContractTemplate" resultMap="TenantContractTemplate" parameterType="map">
-		SELECT * FROM tenant_contract_template where type_ = #{type} and owner_ = #{owner} and status_ = 1 and tenant_id_ = #{tenantId}
+		SELECT * FROM tenant_contract_template where status_ = 1 and tenant_id_ = #{tenantId}
+		<if test="type != null">
+			and type_ = #{type}
+		</if>
+		<if test="owner != null">
+			and owner_ = #{owner}
+		</if>
 	</select>
 	
 	<update id="disableContract" parameterType="map">
-		update tenant_contract_template set status_ = 0 where type_ = #{type} and owner_ = #{owner} and status_ = 1 and tenant_id_ = #{tenantId}
+		update tenant_contract_template set status_ = 0 where status_ = 1 and tenant_id_ = #{tenantId}
+		<if test="type != null">
+			and type_ = #{type}
+		</if>
+		<if test="owner != null">
+			and owner_ = #{owner}
+		</if>
 	</update>
 </mapper>

+ 5 - 4
mec-web/src/main/java/com/ym/mec/web/controller/TenantContractTemplateController.java

@@ -1,11 +1,11 @@
 package com.ym.mec.web.controller;
 
-import java.util.Date;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 
+import java.util.Date;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -18,11 +18,11 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.TenantContractTemplateDto;
 import com.ym.mec.biz.dal.entity.TenantContractTemplate;
+import com.ym.mec.biz.dal.page.TenantContractTemplateQueryInfo;
 import com.ym.mec.biz.service.TenantContractTemplateService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.tenant.TenantContextHolder;
 
 @RequestMapping("tenantContractTemplate")
@@ -39,7 +39,7 @@ public class TenantContractTemplateController extends BaseController {
 	@ApiOperation("分页查询")
 	@GetMapping(value = "/list")
 	@PreAuthorize("@pcs.hasPermissions('tenantContractTemplate/list')")
-	public HttpResponseResult<PageInfo<TenantContractTemplateDto>> getList(QueryInfo queryInfo) {
+	public HttpResponseResult<PageInfo<TenantContractTemplateDto>> getList(TenantContractTemplateQueryInfo queryInfo) {
 		return succeed(tenantContractTemplateService.queryPageList(queryInfo));
 	}
 
@@ -63,6 +63,7 @@ public class TenantContractTemplateController extends BaseController {
 		tenantContractTemplate.setUpdateTime(date);
 		tenantContractTemplate.setModifyBy(sysUser.getId());
 		tenantContractTemplate.setTenantId(TenantContextHolder.getTenantId());
+		tenantContractTemplate.setVersion(1);
 		tenantContractTemplateService.insert(tenantContractTemplate);
 		return succeed();
 	}