Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -268,6 +268,16 @@ public class ActivityTissue extends BaseModel implements Serializable, SysHomeCo
|
|||||||
private String username;
|
private String username;
|
||||||
private String loginname;
|
private String loginname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 兼容历史数据中缺少秒的报名时间,统一补齐后再交给 DateUtil.parseDateTime 解析。
|
||||||
|
*/
|
||||||
|
private String normalizeDateTimeSecond(String dateTime) {
|
||||||
|
if (Lang.isNotEmpty(dateTime) && dateTime.length() == 16) {
|
||||||
|
return dateTime + ":00";
|
||||||
|
}
|
||||||
|
return dateTime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Sys_home_activity covertToSysHomeActivity() {
|
public Sys_home_activity covertToSysHomeActivity() {
|
||||||
Sys_home_activity sysHomeActivity = new Sys_home_activity();
|
Sys_home_activity sysHomeActivity = new Sys_home_activity();
|
||||||
@@ -283,8 +293,8 @@ public class ActivityTissue extends BaseModel implements Serializable, SysHomeCo
|
|||||||
}
|
}
|
||||||
sysHomeActivity.setH5Url("/platform/h5/activity/culture/signUp?id=" + this.getId());
|
sysHomeActivity.setH5Url("/platform/h5/activity/culture/signUp?id=" + this.getId());
|
||||||
if (Lang.isNotEmpty(this.getApplyStartTime())) {
|
if (Lang.isNotEmpty(this.getApplyStartTime())) {
|
||||||
sysHomeActivity.setStartDate(DateUtil.parseDateTime(this.getApplyStartTime()));
|
sysHomeActivity.setStartDate(DateUtil.parseDateTime(normalizeDateTimeSecond(this.getApplyStartTime())));
|
||||||
sysHomeActivity.setEndDate(DateUtil.parseDateTime(this.getApplyEndTime()));
|
sysHomeActivity.setEndDate(DateUtil.parseDateTime(normalizeDateTimeSecond(this.getApplyEndTime())));
|
||||||
}
|
}
|
||||||
sysHomeActivity.setAllowUserGroupId(this.getGroupId());
|
sysHomeActivity.setAllowUserGroupId(this.getGroupId());
|
||||||
sysHomeActivity.setEnable(this.getIsUnseal());
|
sysHomeActivity.setEnable(this.getIsUnseal());
|
||||||
|
|||||||
+1
-2
@@ -5,7 +5,6 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
|
|||||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
@@ -14,7 +13,6 @@ import com.budwk.app.base.model.ExcelImportRes;
|
|||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
import com.budwk.app.base.utils.CommonDownloadUtil;
|
import com.budwk.app.base.utils.CommonDownloadUtil;
|
||||||
import com.budwk.app.web.commons.auth.utils.AuthUtil;
|
|
||||||
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
|
||||||
import com.budwk.app.zhgh.staffbenefit.mutualInsurance.model.MutualInsuranceProject;
|
import com.budwk.app.zhgh.staffbenefit.mutualInsurance.model.MutualInsuranceProject;
|
||||||
import com.budwk.app.zhgh.staffbenefit.mutualInsurance.param.MutualInsuranceRosterUserPageForm;
|
import com.budwk.app.zhgh.staffbenefit.mutualInsurance.param.MutualInsuranceRosterUserPageForm;
|
||||||
@@ -154,6 +152,7 @@ public class MutualInsuranceRosterController {
|
|||||||
entities.add(new ExcelExportEntity("工号", "loginName", 20));
|
entities.add(new ExcelExportEntity("工号", "loginName", 20));
|
||||||
entities.add(new ExcelExportEntity("姓名", "userName", 20));
|
entities.add(new ExcelExportEntity("姓名", "userName", 20));
|
||||||
entities.add(new ExcelExportEntity("证件类型", "idCardType", 20));
|
entities.add(new ExcelExportEntity("证件类型", "idCardType", 20));
|
||||||
|
entities.add(new ExcelExportEntity("手机号", "mobile", 20));
|
||||||
ExportParams exportParams = new ExportParams();
|
ExportParams exportParams = new ExportParams();
|
||||||
exportParams.setType(ExcelType.XSSF);
|
exportParams.setType(ExcelType.XSSF);
|
||||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, Collections.emptyList());
|
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, Collections.emptyList());
|
||||||
|
|||||||
+19
-3
@@ -32,10 +32,13 @@ import java.io.File;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@IocBean(args = {"refer:dao"})
|
@IocBean(args = {"refer:dao"})
|
||||||
public class MutualInsuranceRosterUserServiceImpl extends BaseServiceImpl<MutualInsuranceRosterUser> implements MutualInsuranceRosterUserService {
|
public class MutualInsuranceRosterUserServiceImpl extends BaseServiceImpl<MutualInsuranceRosterUser> implements MutualInsuranceRosterUserService {
|
||||||
|
private static final Pattern MOBILE_PATTERN = Pattern.compile("^1[3456789]\\d{9}$");
|
||||||
|
|
||||||
public MutualInsuranceRosterUserServiceImpl(Dao dao) {
|
public MutualInsuranceRosterUserServiceImpl(Dao dao) {
|
||||||
super(dao);
|
super(dao);
|
||||||
}
|
}
|
||||||
@@ -100,6 +103,10 @@ public class MutualInsuranceRosterUserServiceImpl extends BaseServiceImpl<Mutual
|
|||||||
row.setErrInfo("导入文件中工号重复", i + 1);
|
row.setErrInfo("导入文件中工号重复", i + 1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!isValidImportMobile(row.getMobile())) {
|
||||||
|
row.setErrInfo("手机号格式不正确", i + 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
View_user user = users.stream()
|
View_user user = users.stream()
|
||||||
.filter(item -> loginName.equals(item.getLoginname()))
|
.filter(item -> loginName.equals(item.getLoginname()))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
@@ -108,7 +115,7 @@ public class MutualInsuranceRosterUserServiceImpl extends BaseServiceImpl<Mutual
|
|||||||
row.setErrInfo("工号在系统中不存在", i + 1);
|
row.setErrInfo("工号在系统中不存在", i + 1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
upsertRosterUser(project, user);
|
upsertRosterUser(project, user, row);
|
||||||
successCount++;
|
successCount++;
|
||||||
}
|
}
|
||||||
fillImportResult(result, importRows, successCount);
|
fillImportResult(result, importRows, successCount);
|
||||||
@@ -318,7 +325,7 @@ public class MutualInsuranceRosterUserServiceImpl extends BaseServiceImpl<Mutual
|
|||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void upsertRosterUser(MutualInsuranceProject project, View_user user) {
|
private void upsertRosterUser(MutualInsuranceProject project, View_user user, MutualInsuranceUserImportTemp row) {
|
||||||
MutualInsuranceRosterUser info = dao().fetch(MutualInsuranceRosterUser.class,
|
MutualInsuranceRosterUser info = dao().fetch(MutualInsuranceRosterUser.class,
|
||||||
Cnd.where("projectId", "=", project.getId()).and("userId", "=", user.getId()));
|
Cnd.where("projectId", "=", project.getId()).and("userId", "=", user.getId()));
|
||||||
if (info == null) {
|
if (info == null) {
|
||||||
@@ -338,7 +345,8 @@ public class MutualInsuranceRosterUserServiceImpl extends BaseServiceImpl<Mutual
|
|||||||
info.setUnitName(user.getUnitName());
|
info.setUnitName(user.getUnitName());
|
||||||
info.setUnionId(user.getUnionId());
|
info.setUnionId(user.getUnionId());
|
||||||
info.setUnionName(user.getUnionName());
|
info.setUnionName(user.getUnionName());
|
||||||
info.setMobile(user.getMobile());
|
// 导入名单时手机号允许按 Excel 覆盖;未填写时继续使用系统用户档案中的手机号。
|
||||||
|
info.setMobile(StrUtil.blankToDefault(Strings.trim(row.getMobile()), user.getMobile()));
|
||||||
info.setIdCardType(user.getIdCardType());
|
info.setIdCardType(user.getIdCardType());
|
||||||
info.setIdCard(user.getIdCard());
|
info.setIdCard(user.getIdCard());
|
||||||
dao().insertOrUpdate(info);
|
dao().insertOrUpdate(info);
|
||||||
@@ -445,4 +453,12 @@ public class MutualInsuranceRosterUserServiceImpl extends BaseServiceImpl<Mutual
|
|||||||
result.setErrorDetails(rows.stream().filter(row -> StrUtil.isNotBlank(row.getErrMsg())).collect(Collectors.toList()));
|
result.setErrorDetails(rows.stream().filter(row -> StrUtil.isNotBlank(row.getErrMsg())).collect(Collectors.toList()));
|
||||||
result.setFailedCount(result.getErrorDetails().size());
|
result.setFailedCount(result.getErrorDetails().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入手机号允许为空,非空时必须是 11 位中国大陆手机号,避免错误联系方式写入名单快照。
|
||||||
|
*/
|
||||||
|
private boolean isValidImportMobile(String mobile) {
|
||||||
|
String value = Strings.trim(mobile);
|
||||||
|
return StrUtil.isBlank(value) || MOBILE_PATTERN.matcher(value).matches();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -23,4 +23,7 @@ public class MutualInsuranceUserImportTemp extends ExcelImportError {
|
|||||||
|
|
||||||
@ExcelProperty("证件类型")
|
@ExcelProperty("证件类型")
|
||||||
private String idCardType;
|
private String idCardType;
|
||||||
|
|
||||||
|
@ExcelProperty("手机号")
|
||||||
|
private String mobile;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,7 +126,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
|
|||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
v-model="formData.applyTime2"
|
v-model="formData.applyTime2"
|
||||||
value-format="yyyy-MM-dd HH:mm">
|
format="yyyy-MM-dd HH:mm"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -627,6 +628,13 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
|
|||||||
const resp = await this.$axios.post("/platform/club/examine/apply/getClubsByRole")
|
const resp = await this.$axios.post("/platform/club/examine/apply/getClubsByRole")
|
||||||
return resp.data
|
return resp.data
|
||||||
},
|
},
|
||||||
|
// 兼容历史分钟级时间,提交给后端统一补齐秒,避免首页活动同步解析失败。
|
||||||
|
normalizeDateTimeSecond(dateTime) {
|
||||||
|
if (dateTime && dateTime.length === 16) {
|
||||||
|
return dateTime + ":00"
|
||||||
|
}
|
||||||
|
return dateTime
|
||||||
|
},
|
||||||
// 保存
|
// 保存
|
||||||
onSave() {
|
onSave() {
|
||||||
this.$confirm("您确定保存吗?", "提示", {
|
this.$confirm("您确定保存吗?", "提示", {
|
||||||
@@ -638,8 +646,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
|
|||||||
formData.activity_type = this.activity_type
|
formData.activity_type = this.activity_type
|
||||||
const {time, applyTime2, plannedDate} = formData
|
const {time, applyTime2, plannedDate} = formData
|
||||||
if (applyTime2 && applyTime2.length) {
|
if (applyTime2 && applyTime2.length) {
|
||||||
formData.applyStartTime = applyTime2[0]
|
formData.applyStartTime = this.normalizeDateTimeSecond(applyTime2[0])
|
||||||
formData.applyEndTime = applyTime2[1]
|
formData.applyEndTime = this.normalizeDateTimeSecond(applyTime2[1])
|
||||||
formData.applyTime2 = null
|
formData.applyTime2 = null
|
||||||
}
|
}
|
||||||
if (time && time.length) {
|
if (time && time.length) {
|
||||||
@@ -684,8 +692,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
|
|||||||
formData.activity_type = this.activity_type
|
formData.activity_type = this.activity_type
|
||||||
const {time, applyTime2, plannedDate} = formData
|
const {time, applyTime2, plannedDate} = formData
|
||||||
if (applyTime2 && applyTime2.length) {
|
if (applyTime2 && applyTime2.length) {
|
||||||
formData.applyStartTime = applyTime2[0]
|
formData.applyStartTime = this.normalizeDateTimeSecond(applyTime2[0])
|
||||||
formData.applyEndTime = applyTime2[1]
|
formData.applyEndTime = this.normalizeDateTimeSecond(applyTime2[1])
|
||||||
formData.applyTime2 = null
|
formData.applyTime2 = null
|
||||||
}
|
}
|
||||||
if (time && time.length) {
|
if (time && time.length) {
|
||||||
@@ -729,8 +737,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
|
|||||||
formData.activity_type = this.activity_type
|
formData.activity_type = this.activity_type
|
||||||
const {time, applyTime2, plannedDate} = formData
|
const {time, applyTime2, plannedDate} = formData
|
||||||
if (applyTime2 && applyTime2.length) {
|
if (applyTime2 && applyTime2.length) {
|
||||||
formData.applyStartTime = applyTime2[0]
|
formData.applyStartTime = this.normalizeDateTimeSecond(applyTime2[0])
|
||||||
formData.applyEndTime = applyTime2[1]
|
formData.applyEndTime = this.normalizeDateTimeSecond(applyTime2[1])
|
||||||
formData.applyTime2 = null
|
formData.applyTime2 = null
|
||||||
}
|
}
|
||||||
if (time && time.length) {
|
if (time && time.length) {
|
||||||
@@ -807,8 +815,8 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
|
|||||||
formData.activity_type = this.activity_type
|
formData.activity_type = this.activity_type
|
||||||
const {time, applyTime2, plannedDate} = formData
|
const {time, applyTime2, plannedDate} = formData
|
||||||
if (applyTime2 && applyTime2.length) {
|
if (applyTime2 && applyTime2.length) {
|
||||||
formData.applyStartTime = applyTime2[0]
|
formData.applyStartTime = this.normalizeDateTimeSecond(applyTime2[0])
|
||||||
formData.applyEndTime = applyTime2[1]
|
formData.applyEndTime = this.normalizeDateTimeSecond(applyTime2[1])
|
||||||
formData.applyTime2 = null
|
formData.applyTime2 = null
|
||||||
}
|
}
|
||||||
if (time && time.length) {
|
if (time && time.length) {
|
||||||
@@ -963,7 +971,7 @@ const ACTIVITY_CULTURE_APPLY_ACTIVITY = {
|
|||||||
if (data.billFiles && data.billFiles.length > 0) data.billFiles = JSON.parse(data.billFiles)
|
if (data.billFiles && data.billFiles.length > 0) data.billFiles = JSON.parse(data.billFiles)
|
||||||
if (data.photoFiles && data.photoFiles.length > 0) data.photoFiles = JSON.parse(data.photoFiles)
|
if (data.photoFiles && data.photoFiles.length > 0) data.photoFiles = JSON.parse(data.photoFiles)
|
||||||
if (data.otherFiles && data.otherFiles.length > 0) data.otherFiles = JSON.parse(data.otherFiles)
|
if (data.otherFiles && data.otherFiles.length > 0) data.otherFiles = JSON.parse(data.otherFiles)
|
||||||
if (data.applyStartTime) data.applyTime2 = [data.applyStartTime, data.applyEndTime]
|
if (data.applyStartTime) data.applyTime2 = [this.normalizeDateTimeSecond(data.applyStartTime), this.normalizeDateTimeSecond(data.applyEndTime)]
|
||||||
if (data.startTime) data.time = [data.startTime, data.endTime]
|
if (data.startTime) data.time = [data.startTime, data.endTime]
|
||||||
if (data.startPlannedDate) data.plannedDate = [data.startPlannedDate, data.endPlannedDate]
|
if (data.startPlannedDate) data.plannedDate = [data.startPlannedDate, data.endPlannedDate]
|
||||||
this.userData = clone(data.tissuePersonList)
|
this.userData = clone(data.tissuePersonList)
|
||||||
|
|||||||
Reference in New Issue
Block a user