Commit a0f3dfad authored by huyuchen's avatar huyuchen

商险数据权限

parent babf3321
......@@ -10,7 +10,7 @@ import java.util.Date;
@Data
@ToString
@Entry(objectClasses = {"posixAccount","top","inetOrgPerson"}, base = "ou=安徽皖信人力资源管理有限公司,ou=wanxin")
@Entry(objectClasses = {"posixAccount","top","inetOrgPerson"}, base = "ou=皖信人力集团,ou=wanxin")
public class PersonVo {
/**
......
......@@ -28,9 +28,6 @@ public class PersonAttributesMapper implements AttributesMapper<PersonVo> {
if (null != attributes.get("ou")) {
personVo.setDeptName((String) attributes.get("ou").get());
}
if (null != attributes.get("userPassword")) {
personVo.setPassword((String) attributes.get("userPassword").get());
}
return personVo;
}
}
......@@ -10,7 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.ldap.core.LdapTemplate;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
......@@ -36,7 +35,7 @@ public class LdapUtil {
private static LdapContext ctx = null;
private static Control[] connCtls = null;
private static final Control[] connCtls = null;
/**
* @return List<SearchResultEntry>
......@@ -45,16 +44,14 @@ public class LdapUtil {
* @description get请求获取指定对象信息
**/
public List<SearchResultEntry> getAllPersonNamesWithTraditionalWay() {
List<SearchResultEntry> result = new ArrayList<SearchResultEntry>();
List<SearchResultEntry> result = new ArrayList<>();
try {
LDAPConnection connection = new LDAPConnection(ldapProperties.getUrl(), ldapProperties.getPort(),
ldapProperties.getUserName(), ldapProperties.getPassword());
SearchRequest searchRequest = new SearchRequest(ldapProperties.getBaseDn(), SearchScope.SUB, "(objectclass=*)");
searchRequest.addControl(new SubentriesRequestControl());
SearchResult searchResult = connection.search(searchRequest);
for (SearchResultEntry entry : searchResult.getSearchEntries()) {
result.add(entry);
}
result.addAll(searchResult.getSearchEntries());
} catch (LDAPException e) {
e.printStackTrace();
}
......@@ -62,15 +59,14 @@ public class LdapUtil {
}
public List<PersonVo> getAllPersons() {
List<PersonVo> list = ldapTemplate.search(query()
return ldapTemplate.search(query()
.where("objectclass").is("posixAccount"), new PersonAttributesMapper());
return list;
}
// 校验用户名密码的方法
public Boolean authenticate(String usr, String pwd) {
boolean valide = false;
if (pwd == null || pwd == "")
boolean valide;
if (pwd == null || "".equals(pwd))
return false;
if (ctx == null) {
getCtx();
......@@ -85,9 +81,6 @@ public class LdapUtil {
ctx.reconnect(connCtls);
valide = true;
closeCtx();
} catch (AuthenticationException e) {
log.error(userDN + " is not authenticated");
valide = false;
} catch (NamingException e) {
log.error(userDN + " is not authenticated");
valide = false;
......@@ -99,7 +92,7 @@ public class LdapUtil {
if (ctx != null) {
return;
}
Hashtable<String, String> env = new Hashtable<String, String>();
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://" + ldapProperties.getUrl() + ":" + ldapProperties.getPort() +
"/" + ldapProperties.getDn());
......@@ -120,7 +113,7 @@ public class LdapUtil {
}
public String getUserDN(String uid) {
String userDN = "";
StringBuilder userDN = new StringBuilder();
try {
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
......@@ -129,13 +122,13 @@ public class LdapUtil {
Object obj = en.nextElement();
if (obj instanceof javax.naming.directory.SearchResult) {
javax.naming.directory.SearchResult si = (javax.naming.directory.SearchResult) obj;
userDN += si.getName();
userDN += "," + ldapProperties.getDn();
userDN.append(si.getName());
userDN.append(",").append(ldapProperties.getDn());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return userDN;
return userDN.toString();
}
}
......@@ -3,4 +3,4 @@ ldap.port=389
ldap.userName=cn=admin,dc=worfu,dc=com
ldap.password=yifu123456!
ldap.dn=dc=worfu,dc=com
ldap.baseDn=ou=\u5B89\u5FBD\u7696\u4FE1\u4EBA\u529B\u8D44\u6E90\u7BA1\u7406\u6709\u9650\u516C\u53F8,ou=wanxin,dc=worfu,dc=com
\ No newline at end of file
ldap.baseDn=ou=\u7696\u4FE1\u4EBA\u529B\u96C6\u56E2,ou=wanxin,dc=worfu,dc=com
\ No newline at end of file
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
......@@ -13,7 +14,7 @@ import java.util.List;
*/
@Data
@Schema(description = "导出办理请求参数")
public class InsuranceExportListParam implements Serializable {
public class InsuranceExportListParam extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3623027153213352936L;
/**
......@@ -46,12 +47,6 @@ public class InsuranceExportListParam implements Serializable {
@Schema(description = "商险id集合")
private List<String> idList;
/**
* 办理地分流sql
*/
@Schema(description = "办理地分流sql")
private String regionSql;
/**
* 购买类型, 1新增、3批增、4替换
*/
......
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
......@@ -13,7 +14,7 @@ import java.util.List;
*/
@Data
@Schema(description = "投保列表请求参数")
public class InsuranceListParam implements Serializable {
public class InsuranceListParam extends BaseEntity implements Serializable {
private static final long serialVersionUID = -4692341622141432288L;
/**
......@@ -70,12 +71,6 @@ public class InsuranceListParam implements Serializable {
@Schema(description = "项目编码列表")
private List<String> deptNoList;
/**
* 办理地分流sql
*/
@Schema(description = "办理地分流sql")
private String regionSql;
/**
* 保单办理人
*/
......
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
......@@ -13,7 +14,7 @@ import java.io.Serializable;
*/
@Data
@Tag(name = "减员办理查询条件")
public class InsuranceRefundHandlingParam implements Serializable {
public class InsuranceRefundHandlingParam extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2689686777914935788L;
......@@ -77,12 +78,6 @@ public class InsuranceRefundHandlingParam implements Serializable {
@Schema(description = "是否过期 0未过期 1已过期")
private Integer isOverdue;
/**
* 办理地分流sql
*/
@Schema(description = "办理地分流sql")
private String regionSql;
/**
* 办理人
*/
......
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
......@@ -14,7 +15,7 @@ import java.util.List;
*/
@Data
@Tag(name = "已减员查询列表参数")
public class InsuranceRefundParam implements Serializable {
public class InsuranceRefundParam extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2689686777914935788L;
/**
......
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
......@@ -19,7 +16,7 @@ import java.util.List;
*/
@Data
@Tag(name = "已投保列表查询条件")
public class InsuredParam implements Serializable {
public class InsuredParam extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2689686777914935788L;
/**
......
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
......@@ -13,7 +14,7 @@ import java.util.List;
*/
@Data
@Schema(description = "导出减员办理请求参数")
public class RefundExportListParam implements Serializable {
public class RefundExportListParam extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3623027153213352936L;
/**
......@@ -52,10 +53,4 @@ public class RefundExportListParam implements Serializable {
@Schema(description = "商险id集合")
private List<String> idList;
/**
* 办理地分流sql
*/
@Schema(description = "办理地分流sql")
private String regionSql;
}
......@@ -206,16 +206,6 @@ public interface TInsuranceDetailMapper extends BaseMapper<TInsuranceDetail> {
*/
List<TInsuranceDetail> selectListByEmpIdcardNo(String empIdcardNo);
/**
* 查数据是否存在权限范围内
*
* @author zhaji
* @param regionSql
* @param id
* @return {@link TInsuranceDetail}
*/
TInsuranceDetail selectByRegionSql(@Param("regionSql") String regionSql, @Param("id") String id);
/**
* 商险订单减员列表查询
*
......
......@@ -95,6 +95,9 @@
detail.SETTLE_MONTH as settleMonth
from t_insurance_detail detail
where detail.DELETE_FLAG = 0
<if test="param.authSql != null and param.authSql.trim() != ''">
left join t_insurance_area_res p on detail.CREATE_BY=p.USER_ID
</if>
<if test="param.deptNo != null and param.deptNo.trim() != ''">
and detail.DEPT_NO = #{param.deptNo}
</if>
......@@ -137,6 +140,10 @@
<if test="param.startDate != null and param.startDate.trim() != '' and param.endDate != null and param.endDate.trim() != ''">
and detail.CREATE_TIME <![CDATA[ >= ]]> concat(#{param.startDate}, ' 00:00:00') and detail.CREATE_TIME <![CDATA[ <= ]]> concat(#{param.endDate}, ' 23:59:59')
</if>
<if test="param.authSql != null and param.authSql.trim() != ''">
${param.authSql}
</if>
GROUP BY detail.id
ORDER BY detail.BUY_HANDLE_STATUS,detail.CREATE_TIME DESC
</select>
<!--投保不分页查询-->
......@@ -218,6 +225,9 @@
detail.SETTLE_TYPE as settleType,
detail.SETTLE_MONTH as settleMonth
from t_insurance_detail detail
<if test="param.authSql != null and param.authSql.trim() != ''">
left join t_insurance_area_res p on detail.CREATE_BY=p.USER_ID
</if>
where detail.DELETE_FLAG = 0
<if test="param.deptNo != null and param.deptNo.trim() != ''">
and detail.DEPT_NO = #{param.deptNo}
......@@ -243,9 +253,6 @@
#{item}
</foreach>
</if>
<if test="param.regionSql != null and param.regionSql.trim() != ''">
and ${param.regionSql}
</if>
<if test="param.updateBy != null and param.updateBy.trim() != ''">
and detail.HANDLED_BY = #{param.updateBy}
</if>
......@@ -258,6 +265,10 @@
<if test="param.startDate != null and param.startDate.trim() != '' and param.endDate != null and param.endDate.trim() != ''">
and detail.CREATE_TIME <![CDATA[ >= ]]> concat(#{param.startDate}, ' 00:00:00') and detail.CREATE_TIME <![CDATA[ <= ]]> concat(#{param.endDate}, ' 23:59:59')
</if>
<if test="param.authSql != null and param.authSql.trim() != ''">
${param.authSql}
</if>
GROUP BY detail.id
ORDER BY detail.BUY_HANDLE_STATUS,detail.CREATE_TIME DESC
</select>
<!--通过id查询商险信息-->
......@@ -365,6 +376,9 @@
detail.POLICY_NO as policyNo,
detail.REMARK as remark
from t_insurance_detail detail
<if test="param.authSql != null and param.authSql.trim() != ''">
left join t_insurance_area_res p on detail.CREATE_BY=p.USER_ID
</if>
where detail.DELETE_FLAG = 0 and detail.BUY_HANDLE_STATUS = 1
<if test="param.empName != null and param.empName.trim() != ''">
and detail.EMP_NAME like concat('%',replace(replace(#{param.empName},'_','\_'),'%','\%'),'%')
......@@ -378,9 +392,6 @@
<if test="param.insuranceCompanyName != null and param.insuranceCompanyName.trim() != ''">
and detail.INSURANCE_COMPANY_NAME like concat('%',replace(replace(#{param.insuranceCompanyName},'_','\_'),'%','\%'),'%')
</if>
<if test="param.regionSql != null and param.regionSql.trim() != ''">
and ${param.regionSql}
</if>
<if test="param.buyType != null">
and detail.BUY_TYPE = #{param.buyType}
</if>
......@@ -390,6 +401,10 @@
<if test="param.startDate != null and param.startDate.trim() != '' and param.endDate != null and param.endDate.trim() != ''">
and detail.CREATE_TIME <![CDATA[ >= ]]> concat(#{param.startDate}, ' 00:00:00') and detail.CREATE_TIME <![CDATA[ <= ]]> concat(#{param.endDate}, ' 23:59:59')
</if>
<if test="param.authSql != null and param.authSql.trim() != ''">
${param.authSql}
</if>
GROUP BY detail.id
ORDER BY detail.CREATE_TIME DESC
</select>
<!--批量更新保单号-->
......@@ -428,6 +443,9 @@
detail.BUY_STANDARD as buyStandard
from
t_insurance_detail detail
<if test="param.authSql != null and param.authSql.trim() != ''">
left join t_insurance_area_res p on detail.CREATE_BY=p.USER_ID
</if>
where
detail.DELETE_FLAG = 0
and
......@@ -481,6 +499,10 @@
<if test="param.createEndTime != null and param.createEndTime.trim() != ''">
AND detail.CREATE_TIME <![CDATA[ <= ]]> concat(#{param.createEndTime}, ' 23:59:59')
</if>
<if test="param.authSql != null and param.authSql.trim() != ''">
${param.authSql}
</if>
GROUP BY detail.id
ORDER BY detail.CREATE_TIME DESC ,detail.ID ASC
</select>
<!-- 已投保列表不分页查询-->
......@@ -587,6 +609,9 @@
from
t_insurance_detail detail,
t_insurance_refund refund
<if test="param.authSql != null and param.authSql.trim() != ''">
left join t_insurance_area_res p on detail.CREATE_BY=p.USER_ID
</if>
where
detail.DELETE_FLAG = 0
and
......@@ -627,6 +652,10 @@
(detail.POLICY_END <![CDATA[ >= ]]> concat(#{param.policyStart}, ' 00:00:00') and detail.POLICY_END <![CDATA[ <= ]]> concat(#{param.policyEnd}, ' 23:59:59'))
)
</if>
<if test="param.authSql != null and param.authSql.trim() != ''">
${param.authSql}
</if>
GROUP BY detail.id
ORDER BY refund.CREATE_TIME DESC,detail.ID ASC
</select>
<!-- 已减员列表不分页查询-->
......@@ -721,6 +750,9 @@
from
t_insurance_detail detail,
t_insurance_refund refund
<if test="param.authSql != null and param.authSql.trim() != ''">
left join t_insurance_area_res p on detail.CREATE_BY=p.USER_ID
</if>
where
detail.REFUND_ID = refund.ID
<if test="param.empName != null and param.empName.trim() != ''">
......@@ -741,9 +773,6 @@
<if test="param.insuranceCompanyName != null and param.insuranceCompanyName.trim() != ''">
and detail.INSURANCE_COMPANY_NAME = #{param.insuranceCompanyName}
</if>
<if test="param.regionSql != null and param.regionSql.trim() != ''">
and ${param.regionSql}
</if>
<if test="param.updateBy != null and param.updateBy.trim() != ''">
and refund.UPDATE_BY = #{param.updateBy}
</if>
......@@ -756,6 +785,10 @@
<if test="param.endDate != null and param.endDate.trim() != ''">
AND refund.CREATE_TIME <![CDATA[ <= ]]> concat(#{param.endDate}, ' 23:59:59')
</if>
<if test="param.authSql != null and param.authSql.trim() != ''">
${param.authSql}
</if>
GROUP BY detail.id
ORDER BY refund.CREATE_TIME DESC,detail.ID ASC
</select>
<!-- 查询保单列表-->
......@@ -861,6 +894,9 @@
detail.REMARK as remark
from
t_insurance_detail detail
<if test="param.authSql != null and param.authSql.trim() != ''">
left join t_insurance_area_res p on detail.CREATE_BY=p.USER_ID
</if>
where
detail.DELETE_FLAG = 0 and detail.REDUCE_HANDLE_STATUS = 1
<if test="param.empName != null and param.empName.trim() != ''">
......@@ -878,9 +914,10 @@
<if test="param.insuranceCompanyName != null and param.insuranceCompanyName.trim() != ''">
and detail.INSURANCE_COMPANY_NAME = #{param.insuranceCompanyName}
</if>
<if test="param.regionSql != null and param.regionSql.trim() != ''">
and ${param.regionSql}
<if test="param.authSql != null and param.authSql.trim() != ''">
${param.authSql}
</if>
GROUP BY detail.id
ORDER BY detail.CREATE_TIME DESC
</select>
<!-- 减员办理-->
......@@ -926,20 +963,6 @@
</where>
ORDER BY CREATE_TIME desc
</select>
<!--查数据是否存在权限范围内-->
<select id="selectByRegionSql" resultType="com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsuranceDetail">
SELECT
<include refid="Base_Column_List"/>
FROM
t_insurance_detail detail
<where>
detail.ID = #{id}
<if test="regionSql != null and regionSql.trim() != ''">
and ${regionSql}
</if>
</where>
ORDER BY CREATE_TIME desc
</select>
<!--商险订单列表查询-->
<select id="getOrderInsuredListPage" resultType="com.yifu.cloud.plus.v1.yifu.insurances.vo.InsuredOrderListVo">
(
......
......@@ -191,7 +191,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
List<String> dnList = sysDeptMapper.selectDnList();
List<String> delList = dnList.stream().filter(p-> !entryDnList.contains(p)).collect(Collectors.toList());
//删除ldap中不存在的dn的数据
if (delList.size() >0) {
if (!delList.isEmpty()) {
sysDeptMapper.delete(Wrappers.<SysDept>query().lambda().in(SysDept::getDeptDn, delList));
}
List<Map<String,Object>> updUserList = new ArrayList<>();
......@@ -202,7 +202,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
userId = dn.substring(4, dn.indexOf(",", 1));
dn = dn.substring(dn.indexOf(",", 1) + 1);
}
List<String> saveDnList = Arrays.asList(dn.split(",")).stream().filter(e -> (e.contains("ou=") && !e.equals("ou=wanxin"))).collect(Collectors.toList());
List<String> saveDnList = Arrays.stream(dn.split(",")).filter(e -> (e.contains("ou=") && !e.equals("ou=wanxin"))).collect(Collectors.toList());
String deptName = saveDnList.get(0).replace("ou=", "");
int size = saveDnList.size();
if (size == 1) {
......@@ -220,7 +220,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
sysDept.setName(deptName);
this.updateDeptById(sysDept);
}
} else if (size >= 2) {
} else {
try {
SysDept sysDept = this.getOne(Wrappers.<SysDept>query().lambda().eq(SysDept::getDeptDn, dn.substring(dn.indexOf("ou=", 2), dn.length())));
if (null != sysDept) {
......
......@@ -380,8 +380,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 根据角色名称查询角色ID
List<Long> roleIdList = roleCollList.stream().map(SysRole::getRoleId).collect(Collectors.toList());
userDTO.setRole(roleIdList);
// List<Long> postIdList = postCollList.stream().map(SysPost::getPostId).collect(Collectors.toList());
// userDTO.setPost(postIdList);
// 插入用户
this.saveUser(userDTO);
}
......@@ -433,10 +431,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
insertList.add(personVo);
}
}
if (updateList.size() > 0) {
if (!updateList.isEmpty()) {
sysUserMapper.batchUpdateUser(updateList);
}
if (insertList.size() > 0) {
if (!insertList.isEmpty()) {
sysUserMapper.batchInsertUser(insertList);
}
}
......@@ -447,7 +445,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
List<String> dnList = sysDeptMapper.selectDnList();
List<String> delList = dnList.stream().filter(p-> !entryDnList.contains(p)).collect(Collectors.toList());
//删除ldap中不存在的dn的数据
if (delList.size() >0) {
if (!delList.isEmpty()) {
sysDeptMapper.delete(Wrappers.<SysDept>query().lambda().in(SysDept::getDeptDn, delList));
}
List<Map<String,Object>> updUserList = new ArrayList<>();
......@@ -458,7 +456,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
userId = dn.substring(4, dn.indexOf(",", 1));
dn = dn.substring(dn.indexOf(",", 1) + 1);
}
List<String> saveDnList = Arrays.asList(dn.split(",")).stream().filter(e -> (e.contains("ou=") && !e.equals("ou=wanxin"))).collect(Collectors.toList());
List<String> saveDnList = Arrays.stream(dn.split(",")).filter(e -> (e.contains("ou=") && !e.equals("ou=wanxin"))).collect(Collectors.toList());
String deptName = saveDnList.get(0).replace("ou=", "");
int size = saveDnList.size();
if (size == 1) {
......@@ -476,7 +474,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
sysDept.setName(deptName);
sysDeptMapper.updateById(sysDept);
}
} else if (size >= 2) {
} else {
SysDept sysDept = sysDeptMapper.selectOne(Wrappers.<SysDept>query().lambda().eq(SysDept::getDeptDn, dn.substring(dn.indexOf("ou=", 2), dn.length())));
if (null != sysDept) {
SysDept sysDeptCount = sysDeptMapper.selectOne(Wrappers.<SysDept>query().lambda().eq(SysDept::getDeptDn, dn));
......
......@@ -210,17 +210,15 @@
<insert id="batchInsertUser" parameterType="java.util.List">
insert into sys_user
(user_id,username,phone,email,password,nickname,deptId,create_time)
(user_id,username,phone,email,nickname,create_time)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
REPLACE(UUID(),"-",""),
#{item.uid,jdbcType=VARCHAR},
#{item.telephoneNumber,jdbcType=VARCHAR},
#{item.email,jdbcType=VARCHAR},
#{item.password,jdbcType=VARCHAR},
#{item.personName,jdbcType=VARCHAR},
#{item.deptId,jdbcType=VARCHAR},
#{item.uid},
#{item.telephoneNumber},
#{item.email},
#{item.personName},
now()
)
</foreach>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment