Compare commits

...

7 Commits
master ... test

  1. 69
      script/sql/businessdatasyn/一期/sys_dept.sql
  2. 87
      script/sql/businessdatasyn/一期/sys_user.sql
  3. 50
      script/sql/businessdatasyn/二期/sys_dept.sql
  4. 52
      script/sql/businessdatasyn/二期/sys_user.sql
  5. 12
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java
  6. 5
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseInformationServiceImpl.java
  7. 76
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/report/EnforcementRegistrationReportMapper.xml
  8. 16
      zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/biz/index.vue
  9. 4
      zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/plan.js
  10. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue
  11. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/NonEnforcementInfoSection.vue
  12. 8
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/components/HistoryActivityDetail.vue
  13. 4
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementEvaluateDetail.vue
  14. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue
  15. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/enforcementMy.vue
  16. 156
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/notice/cp_notice_edit.vue
  17. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/notice/cp_notice_message.vue
  18. 161
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_edit.vue
  19. 14
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/task/cp_task_mine.vue
  20. 114
      zdxt-web-server/zdxt-admin-web-server/src/main/resources/businessdatasyn/sys_dept.json
  21. 122
      zdxt-web-server/zdxt-admin-web-server/src/main/resources/businessdatasyn/sys_user.json

69
script/sql/businessdatasyn/一期/sys_dept.sql

@ -0,0 +1,69 @@
create table sys_dept
(
dept_id varchar(100) not null
primary key,
parent_id varchar(100) null,
ancestors varchar(500) null,
dept_name varchar(100) null,
order_num int default 0 null comment '显示顺序',
leader varchar(20) null comment '负责人',
phone varchar(11) null comment '联系电话',
email varchar(50) null comment '邮箱',
status char default '0' null comment '部门状态(0正常 1停用)',
del_flag char default '0' null comment '删除标志(0代表存在 2代表删除)',
create_by varchar(64) default '' null comment '创建者',
create_time datetime null comment '创建时间',
update_by varchar(64) default '' null comment '更新者',
update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
dept_type varchar(5) null comment '部门类型0:机构,1:部门:2小组',
kingdee_org_id varchar(50) null comment '金蝶原始组织结构id',
kingdee_org_parent_id varchar(50) null comment '金蝶原始父组织id',
tenant_code varchar(255) null comment '所属租户 新增角色时,租户code为当前登录用户的租户code',
user_id bigint null,
zzLevel int null,
code varchar(55) null,
mappingUnitParentId varchar(55) null,
updateAt varchar(22) null,
createAt varchar(22) null,
description varchar(55) null,
effectOn varchar(55) null,
parentId varchar(55) null,
organizationId varchar(100) null,
sequence varchar(55) null,
isDeleted varchar(9) null,
zzDisplayPath varchar(555) null,
name varchar(55) null,
guid varchar(55) null,
zzIsLeaf varchar(55) null,
isDisabled varchar(9) null,
fullname varchar(55) null,
isMappingUnit varchar(55) null,
srzUnitId varchar(55) null,
taskId varchar(55) null,
organizationParentId varchar(100) null,
systemId varchar(55) null,
creditcode varchar(55) null,
zone tinyint null,
simpleName varchar(200) null comment '机构简称',
isStatutoryOrg varchar(50) null comment '是否法定机构',
isActive varchar(50) null comment '是否生效',
unitStatusCode varchar(200) null comment '机构状态代码',
unitStatus varchar(200) null comment '机构状态',
unitType varchar(200) null comment '机构类型',
xzqhCode varchar(200) null comment '行政区划代码',
xzqh varchar(200) null comment '行政区划',
isCGManager varchar(50) null comment '是否参公管理',
isBureauOffice varchar(50) null comment '是否局(委)办',
unitTypeCode varchar(200) null comment '机构类型代码',
dwxzCode varchar(200) null comment '单位性质代码',
dwxz varchar(200) null comment '单位性质',
unitSysTypeCode varchar(200) null comment '系统单位类型编码',
unitSysType varchar(200) null comment '系统单位类型',
dwxtlbms varchar(200) null comment '单位系统类别描述',
unitLevelCode varchar(200) null comment '机构规格代码',
unitLevel varchar(200) null comment '机构规格',
area_node varchar(50) null comment '所属区节点(自己维护用的)'
)
comment '部门表' collate = utf8mb3_general_ci
row_format = DYNAMIC;

87
script/sql/businessdatasyn/一期/sys_user.sql

@ -0,0 +1,87 @@
create table sys_user
(
user_id bigint auto_increment comment '用户ID'
primary key,
dept_id varchar(55) null,
login_name varchar(100) null,
user_name varchar(30) not null comment '用户昵称',
user_type varchar(2) default '00' null comment '用户类型(00系统用户)',
email varchar(50) default '' null comment '用户邮箱',
phonenumber varchar(100) null,
sex char default '0' null comment '用户性别(0男 1女 2未知)',
avatar varchar(100) default '' null comment '头像路径',
password varchar(50) default '' null comment '密码',
salt varchar(20) default '' null comment '盐加密',
status char default '0' null comment '帐号状态(0正常 1停用)',
del_flag char default '0' null comment '删除标志(0代表存在 2代表删除)',
login_ip varchar(50) default '' null comment '最后登陆IP',
login_date datetime null comment '最后登陆时间',
create_by varchar(64) default '' null comment '创建者',
create_time datetime null comment '创建时间',
update_by varchar(64) default '' null comment '更新者',
update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
remark varchar(500) null comment '备注',
kingdee_org_id varchar(50) null comment '金蝶系统原始组织结构id',
kingdee_user_id varchar(50) null comment '金蝶原始用户id',
type varchar(2) null comment '用户类型',
tenant_code varchar(255) null comment '所属租户 新增用户时,租户code为当前登录用户的租户code',
law_certificate_num varchar(50) null comment '执法证件号',
fullname varchar(55) null,
taskId varchar(55) null,
systemId varchar(55) null,
effectOn varchar(55) null,
isDeleted varchar(9) null,
isDisabled varchar(9) null,
createAt varchar(55) null,
updateAt varchar(55) null,
guid varchar(55) null,
mobileNumber varchar(55) null,
certificateNumber varchar(55) null,
srzUserid varchar(55) null,
isMappingPerson varchar(55) null,
units varchar(5000) null,
organizationId varchar(100) null,
certificateTypeId varchar(55) null,
certificateTypeIdCode varchar(55) null,
strUserId varchar(55) null,
user_source int null comment '人员类型 0 系统用户 1 深i企用户',
engName varchar(100) null comment '英文名',
photo varchar(100) null comment '头像',
spareNumber varchar(100) null comment '备用电话号码',
telephoneNumber varchar(100) null comment '座机号码',
faxNumber varchar(100) null comment '办公传真号码',
genderCode varchar(100) null comment '性别代码',
sequence varchar(100) null comment '排序号',
gldw varchar(100) null comment '管理单位',
rylbCode varchar(100) null comment '人员类别代码',
rylb varchar(100) null comment '人员类别',
ryztCode varchar(100) null comment '人员状态代码',
ryzt varchar(100) null comment '人员状态',
dwzyld varchar(100) null comment '是否单位主要领导',
zcgzld varchar(100) null comment '是否主持工作领导',
positionname varchar(100) null comment '职务名称',
zwjcCode varchar(100) null comment '职务简称代码',
zwjc varchar(100) null comment '职务简称',
zwbsCode varchar(100) null comment '职务标识代码',
zwbs varchar(100) null comment '职务标识',
jbccCode varchar(100) null comment '级别层级代码',
jbcc varchar(100) null comment '级别层级',
province varchar(100) null comment '所在省',
city varchar(100) null comment '所在市',
district varchar(100) null comment '所在区/县',
hometownCode varchar(100) null comment '籍贯代码',
hometown varchar(100) null comment '籍贯',
pylxcode varchar(100) null comment '聘用类型代码',
pylx varchar(100) null comment '聘用类型',
contractStartTime varchar(100) null comment '合同开始日期',
contractEndTime varchar(100) null comment '合同结束日期',
glzrr varchar(100) null comment '管理责任人',
rylydw varchar(100) null comment '人员来源单位',
jrfscode varchar(100) null comment '进入本单位方式代码',
jrfs varchar(100) null comment '进入本单位方式',
zwwxMobile varchar(100) null comment '政务微信手机号',
zwwxId varchar(100) null comment '市政务微信id'
)
comment '用户信息表' collate = utf8mb3_general_ci
row_format = DYNAMIC;

50
script/sql/businessdatasyn/二期/sys_dept.sql

@ -0,0 +1,50 @@
create table sys_dept
(
dept_id varchar(100) not null comment '部门id'
primary key,
tenant_id varchar(20) default '000000' null comment '租户编号',
parent_id varchar(100) default '0' null comment '父部门id',
ancestors varchar(500) default '' null comment '祖级列表',
dept_name varchar(100) default '' null comment '部门名称',
order_num int default 0 null comment '显示顺序',
leader bigint null comment '负责人',
phone varchar(11) null comment '联系电话',
email varchar(50) null comment '邮箱',
status char default '0' null comment '部门状态(0正常 1停用)',
del_flag char default '0' null comment '删除标志(0代表存在 1代表删除)',
create_dept varchar(100) null comment '创建部门',
create_by bigint null comment '创建者',
create_time datetime null comment '创建时间',
update_by bigint null comment '更新者',
update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
dept_type varchar(5) null comment '部门类型0:机构,1:部门:2小组',
zzLevel int null,
code varchar(55) null,
mappingUnitParentId varchar(55) null,
updateAt varchar(22) null,
createAt varchar(22) null,
effectOn varchar(55) null,
organizationId varchar(100) null,
sequence varchar(55) null,
isDeleted varchar(9) null,
zzDisplayPath varchar(555) null,
name varchar(55) null,
guid varchar(55) null,
zzIsLeaf varchar(55) null,
isDisabled varchar(9) null,
fullname varchar(55) null,
isMappingUnit varchar(55) null,
srzUnitId varchar(55) null,
taskId varchar(55) null,
organizationParentId varchar(100) null,
systemId varchar(55) null,
creditcode varchar(55) null,
zone tinyint null,
unitStatusCode varchar(200) null comment '机构状态代码',
unitStatus varchar(200) null comment '机构状态',
unitTypeCode varchar(200) null comment '机构类型代码',
area_node varchar(50) null comment '所属区节点(自己维护用的)'
)
comment '部门表' collate = utf8mb3_general_ci
row_format = DYNAMIC;

52
script/sql/businessdatasyn/二期/sys_user.sql

@ -0,0 +1,52 @@
create table sys_user
(
user_id bigint not null comment '用户ID'
primary key,
tenant_id varchar(20) default '000000' null comment '租户编号',
dept_id varchar(100) null comment '部门ID',
user_name varchar(30) not null comment '用户账号',
login_name varchar(100) null,
nick_name varchar(30) not null comment '用户昵称',
user_type varchar(10) default 'sys_user' null comment '用户类型(sys_user系统用户)',
email varchar(50) default '' null comment '用户邮箱',
phonenumber varchar(100) default '' null comment '手机号码',
sex char default '0' null comment '用户性别(0男 1女 2未知)',
avatar varchar(100) null comment '头像地址',
password varchar(100) default '' null comment '密码',
status char default '0' null comment '账号状态(0正常 1停用)',
del_flag char default '0' null comment '删除标志(0代表存在 1代表删除)',
login_ip varchar(128) default '' null comment '最后登录IP',
login_date datetime null comment '最后登录时间',
salt varchar(20) default '' null comment '盐加密',
create_dept varchar(100) null comment '创建部门',
create_by bigint null comment '创建者',
create_time datetime null comment '创建时间',
update_by bigint null comment '更新者',
update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,
remark varchar(500) null comment '备注',
type varchar(2) null comment '用户类型',
law_certificate_num varchar(50) null comment '执法证件号',
fullname varchar(55) null,
taskId varchar(55) null,
systemId varchar(55) null,
effectOn varchar(55) null,
isDeleted varchar(9) null,
isDisabled varchar(9) null,
createAt varchar(55) null,
updateAt varchar(55) null,
mobileNumber varchar(55) null,
certificateNumber varchar(55) null,
srzUserid varchar(55) null,
isMappingPerson varchar(55) null,
units varchar(5000) null,
organizationId varchar(100) null,
certificateTypeId varchar(55) null,
certificateTypeIdCode varchar(55) null,
strUserId varchar(55) null,
user_source int null comment '人员类型 0 系统用户 1 深i企用户',
rylbCode varchar(100) null comment '人员类别代码',
rylb varchar(100) null comment '人员类别'
)
comment '用户信息表' collate = utf8mb3_general_ci
row_format = DYNAMIC;

12
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enforcement/AppEnfLoginController.java

@ -122,6 +122,12 @@ public class AppEnfLoginController extends LoginController {
// return R.fail("该用户不是执法人员,无法登录执法端");
}
// 没有执法证件号时,降级判断是否为公安人员(zone=5或15)
if (!isLawOfficer && bureauDept != null
&& (5 == bureauDept.getZone() || 15 == bureauDept.getZone())) {
isLawOfficer = true;
}
// 8. 手机号解密处理(如是加密存储则返回明文以供前端展示与业务使用)
String phonenumber = user.getPhonenumber();
if (CommonUtil.isPhoneEncrypted(phonenumber)) {
@ -191,11 +197,17 @@ public class AppEnfLoginController extends LoginController {
// return R.fail("该用户不是执法人员,无法登录执法端");
}
// 7. 查询部门信息
SrzDeptVo srzOrgan = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserOrganDept(user.getUserId());
SysDeptVo sysDept = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserSysDept(user.getUserId());
SysDeptVo bureauDept = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserBureauDept(user.getUserId());
// 没有执法证件号时,降级判断是否为公安人员(zone=5或15)
if (!isLawOfficer && bureauDept != null
&& (5 == bureauDept.getZone() || 15 == bureauDept.getZone())) {
isLawOfficer = true;
}
// 7. 构建LoginUser并生成SaToken
token = doSaTokenLogin(user.getUserId(), user.getUserName(), user.getNickName(),
user.getDeptId(), "app_user", "enforcement_app", "f0535c2a32ab4d0496ab9a699b2a7d36");

5
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseInformationServiceImpl.java

@ -407,7 +407,8 @@ public class EnterpriseInformationServiceImpl implements IEnterpriseInformationS
// 4. 仅在新增成功时生成二维码
if (!isUpdate && result > 0) {
generateQrCodeForNewEnterprise(enterpriseInformation);
// generateQrCodeForNewEnterprise(enterpriseInformation);
generateQrCode("zfjd", enterpriseInformation.getEnterpriseNumber(), "enterprise", "企业登记");
}
return result;
@ -462,6 +463,7 @@ public class EnterpriseInformationServiceImpl implements IEnterpriseInformationS
String qrContent = JSONObject.toJSONString(jsonMap);
try {
// 生成二维码文件
String logoPath = ruoYiConfig.getFile().getQrCodeUrl();
String uploadPath = ruoYiConfig.getFile().getUploadPath();
@ -476,6 +478,7 @@ public class EnterpriseInformationServiceImpl implements IEnterpriseInformationS
qrCodeHistory.setId(uuid);
qrCodeHistory.setGenerateTime(DateUtils.getNowDate());
qrCodeHistory.setQrCodeUrl(qrCodeUrl);
qrCodeHistory.setStatus(0L);
qrCodeHistory.setEnterpriseNumber(enterpriseInformation.getEnterpriseNumber());
qrCodeHistory.setReasonsChange("企业登记");
qrCodeGenerateHistoryService.insertByBo(qrCodeHistory);

76
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/report/EnforcementRegistrationReportMapper.xml

@ -141,6 +141,82 @@
AND r2.check_category IS NOT NULL
AND r2.bureau_dept_id IS NOT NULL
AND (r2.status = 0 OR r2.status IS NULL)
<if test="bo.bureauDeptName != null and bo.bureauDeptName != ''">
AND r2.bureau_dept_name LIKE CONCAT('%', #{bo.bureauDeptName}, '%')
</if>
<if test="bo.lawEnforcer != null and bo.lawEnforcer != ''">
AND (law_enforcer LIKE CONCAT('%', #{bo.lawEnforcer}, '%')
ORr. law_enforcer_two LIKE CONCAT('%', #{bo.lawEnforcer}, '%'))
</if>
<if test="bo.enterpriseName != null and bo.enterpriseName != ''">
AND r2.enterprise_name LIKE CONCAT('%', #{bo.enterpriseName}, '%')
</if>
<if test="bo.lawEnforcementItemText != null and bo.lawEnforcementItemText != ''">
AND r2.law_enforcement_item_text LIKE CONCAT('%', #{bo.lawEnforcementItemText}, '%')
</if>
<if test="bo.hasUnion != null">
AND r2.has_union = #{bo.hasUnion}
</if>
<if test="bo.hasAuto != null">
AND r2.has_auto = #{bo.hasAuto}
</if>
<if test="bo.entrustDeptName != null and bo.entrustDeptName != ''">
AND r2.entrust_dept_name LIKE CONCAT('%', #{bo.entrustDeptName}, '%')
</if>
<if test="bo.lawEnforceCategory != null and bo.lawEnforceCategory != ''">
AND r2.law_enforce_category = #{bo.lawEnforceCategory}
</if>
<if test="bo.isComplaint != null">
AND r2.is_complaint = #{bo.isComplaint}
</if>
<if test="bo.enforce != null and bo.enforce != ''">
AND r2.enforce = #{bo.enforce}
</if>
<if test="bo.checkCss != null and bo.checkCss != ''">
AND r2.check_css = #{bo.checkCss}
</if>
<if test="bo.district != null and bo.district != ''">
AND (r2.enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '区%')
OR r2.enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '新区%'))
</if>
<if test="bo.street != null and bo.street != ''">
AND (r2.enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '区', #{bo.street}, '%')
OR r2.enterprise_address LIKE CONCAT('深圳市', SUBSTRING_INDEX(#{bo.district}, '区', 1), '新区', #{bo.street}, '%'))
</if>
<if test="bo.checkCategory != null and bo.checkCategory != ''">
AND r2.check_category = #{bo.checkCategory}
</if>
<!-- dateType: 1=本月, 2=本季度, 3=本年 -->
<if test="bo.dateType != null and bo.dateType == 1">
AND DATE_FORMAT(r2.enforcement_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
</if>
<if test="bo.dateType != null and bo.dateType == 2">
AND DATE_FORMAT(r2.enforcement_time, '%Y-%m') &gt;= CONCAT(YEAR(CURDATE()), '-',
CASE WHEN QUARTER(CURDATE()) IN (1) THEN '01'
WHEN QUARTER(CURDATE()) IN (2) THEN '04'
WHEN QUARTER(CURDATE()) IN (3) THEN '07'
ELSE '10' END)
AND DATE_FORMAT(r2.enforcement_time, '%Y-%m') &lt;= CONCAT(YEAR(CURDATE()), '-',
CASE WHEN QUARTER(CURDATE()) IN (1) THEN '03'
WHEN QUARTER(CURDATE()) IN (2) THEN '06'
WHEN QUARTER(CURDATE()) IN (3) THEN '09'
ELSE '12' END)
</if>
<if test="bo.dateType != null and bo.dateType == 3">
AND DATE_FORMAT(r2.enforcement_time, '%Y') = DATE_FORMAT(CURDATE(), '%Y')
</if>
<if test="bo.dateSearch != null and bo.dateSearch != ''">
AND DATE_FORMAT(r2.enforcement_time, '%Y-%m') = #{bo.dateSearch}
</if>
<if test="bo.beginTime != null and bo.beginTime != ''">
AND DATE_FORMAT(r2.enforcement_time, '%Y-%m-%d') &gt;= #{bo.beginTime}
</if>
<if test="bo.endTime != null and bo.endTime != ''">
AND DATE_FORMAT(r2.enforcement_time, '%Y-%m-%d') &lt;= #{bo.endTime}
</if>
<if test="dataFilter != null and dataFilter != ''">
${dataFilter}
</if>
GROUP BY r2.union_no
HAVING COUNT(1) > 1
) t

16
zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/biz/index.vue

@ -116,6 +116,22 @@ const syncConfigs = ref([
v2Table: 'enterprise_pub_qrcode',
syncDirection: '双向',
enabled: true
},
{
configKey: 'sys_dept',
description: '部门表双向同步',
v1Table: 'sys_dept',
v2Table: 'sys_dept',
syncDirection: '双向',
enabled: true
},
{
configKey: 'sys_user',
description: '用户表双向同步',
v1Table: 'sys_user',
v2Table: 'sys_user',
syncDirection: '双向',
enabled: true
}
]);

4
zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/plan.js

@ -53,8 +53,8 @@ export const getManualMatchDays = (success, error) => _get(settingBaseUrl + "/ma
const enterpriseSearchBaseUrl = "/enforcementcode/enterpriseSearch";
// 按企业名称联合检索(>=3字符)
export const searchUnionByEnterpriseName = (enterpriseName, success, error) =>
_get(enterpriseSearchBaseUrl + "/searchUnionByEnterpriseName", { enterpriseName }, success, error);
export const searchUnionByEnterpriseName = (searchValue, success, error) =>
_post("/app-enf/enterpriseInfo/queryListAndQrInfo", { searchValue }, success, error);
// 根据企业信用代码查询联系人和联系电话
export const getEnterpriseContactInfo = (enterpriseNumber, success, error) =>

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue

@ -69,7 +69,7 @@
<!-- 原因 -->
<template v-if="showReason">
<van-field v-model="formData.reason" name="reason" label="原因" :placeholder="formData.reason || '请选择'" readonly
<van-field v-model="formData.reason" name="reason" label="未扫码原因" :placeholder="formData.reason || '请选择'" readonly
:clickable="canSelectReason" :is-link="canSelectReason"
:rules="canSelectReason ? [{ required: true, message: '请选择原因' }] : []"
:required="canSelectReason"

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/NonEnforcementInfoSection.vue

@ -64,7 +64,7 @@
<!-- 原因 -->
<template v-if="showReason">
<van-field v-model="formData.reason" name="reason" label="原因" :placeholder="formData.reason || '请选择'" readonly
<van-field v-model="formData.reason" name="reason" label="未扫码原因" :placeholder="formData.reason || '请选择'" readonly
:clickable="canSelectReason" :is-link="canSelectReason"
:rules="canSelectReason ? [{ required: true, message: '请选择原因' }] : []"
:required="canSelectReason"

8
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/components/HistoryActivityDetail.vue

@ -61,7 +61,7 @@
</div>
</div>
<div class="custom-cell">
<span class="custom-cell-label">原因</span>
<span class="custom-cell-label">未扫码原因</span>
<span class="custom-cell-value">{{ activityDetail.reason }}</span>
</div>
<div class="custom-cell" v-if="activityDetail.otherReasons">
@ -138,11 +138,11 @@ onMounted(() => {
<style lang="less" scoped>
.history-activity-detail {
min-height: 100vh;
height: 100vh;
background-color: #fbfdff;
box-sizing: border-box;
padding-top: 12px;
overflow: auto;
.detail-content {
margin: 0px 15px 15px 15px;
@ -171,7 +171,7 @@ onMounted(() => {
}
.custom-cell-label {
width: 68px;
width: 75px;
flex-shrink: 0;
color: #666;
font-size: 14px;

4
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementEvaluateDetail.vue

@ -60,7 +60,7 @@
</div>
</template>
<div class="info-row" v-if="detail.enforceReason">
<span class="info-label">原因</span>
<span class="info-label">未扫码原因</span>
<span class="info-value">{{ detail.enforceReason }}</span>
</div>
<div class="info-row" v-if="detail.otherReasons">
@ -500,7 +500,7 @@ const onSubmit = () => {
color: #333;
margin-right: 24px;
font-size: 14px;
width: 60px;
width: 70px;
}
.info-value {
color: #999;

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue

@ -108,7 +108,7 @@ const isLoading = ref(!useCommon.token);
//
const checkLawPermission = () => {
if (!hasLaw.value) {
showToast('非执法人员无法使用该功能');
showToast('非行政执法人员无法使用该功能');
return false;
}
return true;

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/enforcementMy.vue

@ -118,7 +118,7 @@ const settingItem = {
// ========== ==========
const onMenuClick = (item) => {
if (!commonStore.hasLaw) {
showToast('该功能仅执法人员可用');
showToast('非行政执法人员无法使用该功能');
return;
}
switch (item.key) {

156
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/notice/cp_notice_edit.vue

@ -260,28 +260,38 @@
<span class="enterprise-picker-title">选择企业</span>
<van-icon name="cross" @click="showEnterprisePicker = false" />
</div>
<van-search
v-model="enterpriseSearchKeyword"
placeholder="输入≥ 2 个字符检索企业,不要输入深圳,深圳市"
shape="round"
@update:model-value="onEnterpriseSearchInput"
/>
<div class="search-bar">
<van-search
v-model="enterpriseSearchKeyword"
placeholder="请输入企业名称/统一信用代码搜索"
@search="handleEnterpriseSearch"
@clear="clearEnterpriseSearch"
/>
<van-button class="search-btn" type="primary" @click="handleEnterpriseSearch">搜索</van-button>
</div>
<div class="enterprise-picker-body">
<div v-if="enterpriseSearching" class="enterprise-loading">
<van-loading size="18" />&nbsp;检索中...
</div>
<template v-else>
<van-list
v-model:loading="enterpriseLoading"
:finished="enterpriseFinished"
:finished-text="enterpriseFinishedText"
:offset="50"
@load="onEnterpriseLoad"
>
<div
v-for="(item, idx) in enterpriseOptions"
:key="idx"
:key="item.enterpriseNumber || idx"
class="enterprise-item"
@click="onSelectEnterprise(item)"
>
<div class="enterprise-item-name">{{ item.enterpriseName }}</div>
<div class="enterprise-item-number">{{ item.enterpriseNumber }}</div>
</div>
<van-empty v-if="enterpriseSearchKeyword.length >= 2 && !enterpriseOptions.length" description="未检索到匹配企业" image-size="80" />
</template>
<van-empty
v-if="!enterpriseLoading && !enterpriseOptions.length"
:description="enterpriseEmptyText"
image-size="80"
/>
</van-list>
</div>
</div>
</van-popup>
@ -292,7 +302,8 @@
import { useRouter, useRoute } from 'vue-router';
import { showToast, showSuccessToast, showConfirmDialog } from 'vant';
import { addNotice, editNotice, getNoticeDetail } from '@/api/enforcement/notice';
import { getPlanList, searchUnionByEnterpriseName, searchBureauUnitUsers, getEnterpriseContactInfo } from '@/api/enforcement/plan';
import { getPlanList, searchBureauUnitUsers, getEnterpriseContactInfo } from '@/api/enforcement/plan';
import { queryEnterpriseListAndQrInfo } from '@/api/enforcement/index';
import { maskPhone } from '@/util/util';
const router = useRouter();
const route = useRoute();
@ -404,10 +415,16 @@ const planImportDisplay = computed(() => {
const enterpriseOptions = ref([]);
const showEnterprisePicker = ref(false);
const enterpriseSearchKeyword = ref('');
const enterpriseSearching = ref(false);
let enterpriseSearchTimer = null;
const enterpriseLoading = ref(false);
const enterpriseFinished = ref(false);
const enterprisePageNum = ref(1);
const enterprisePageSize = 10;
const enterpriseSearched = ref(false);
let enterpriseSearchSeq = 0;
const enterpriseEmptyText = computed(() => enterpriseSearched.value ? '未检索到匹配企业' : '请输入至少2个字搜索');
const enterpriseFinishedText = computed(() => enterpriseOptions.value.length > 0 ? '没有更多了' : '');
//
const showPersonPicker = ref(false);
const personSearchKeyword = ref('');
@ -503,34 +520,88 @@ const onTimeConfirm = ({ selectedValues }) => {
const onOpenEnterprisePicker = () => {
enterpriseSearchKeyword.value = '';
enterpriseOptions.value = [];
enterprisePageNum.value = 1;
enterpriseFinished.value = true;
enterpriseLoading.value = false;
enterpriseSearched.value = false;
showEnterprisePicker.value = true;
};
//
const onEnterpriseSearchInput = (val) => {
if (enterpriseSearchTimer) clearTimeout(enterpriseSearchTimer);
const keyword = (val || '').trim();
// (/)
const handleEnterpriseSearch = () => {
const keyword = (enterpriseSearchKeyword.value || '').trim();
if (keyword.length < 2) {
showToast('请输入至少2个字搜索');
enterpriseOptions.value = [];
enterpriseFinished.value = true;
enterpriseSearched.value = false;
return;
}
enterprisePageNum.value = 1;
enterpriseFinished.value = false;
enterpriseOptions.value = [];
enterpriseLoading.value = true;
enterpriseSearched.value = true;
fetchEnterpriseList(keyword);
};
//
const clearEnterpriseSearch = () => {
enterpriseSearchKeyword.value = '';
enterpriseOptions.value = [];
enterprisePageNum.value = 1;
enterpriseFinished.value = true;
enterpriseLoading.value = false;
enterpriseSearched.value = false;
};
// van-list
const onEnterpriseLoad = () => {
fetchEnterpriseList(enterpriseSearchKeyword.value.trim());
};
// ()
const fetchEnterpriseList = (keyword) => {
if ((keyword || '').trim().length < 2) {
enterpriseFinished.value = true;
enterpriseLoading.value = false;
return;
}
enterpriseSearchTimer = setTimeout(() => {
const seq = ++enterpriseSearchSeq;
enterpriseSearching.value = true;
searchUnionByEnterpriseName(keyword, (res) => {
const seq = ++enterpriseSearchSeq;
enterpriseLoading.value = true;
queryEnterpriseListAndQrInfo(
{
pageNum: enterprisePageNum.value,
pageSize: enterprisePageSize,
searchValue: keyword,
},
(res) => {
if (seq !== enterpriseSearchSeq) return;
enterpriseSearching.value = false;
if (res && res.code === 200 && Array.isArray(res.data)) {
enterpriseOptions.value = res.data;
enterpriseLoading.value = false;
if (res && res.code === 200 && Array.isArray(res.rows)) {
const data = res.rows;
if (enterprisePageNum.value === 1) {
enterpriseOptions.value = data;
} else {
enterpriseOptions.value = [...enterpriseOptions.value, ...data];
}
const total = res.total || 0;
if (total <= enterprisePageSize * enterprisePageNum.value) {
enterpriseFinished.value = true;
} else {
enterprisePageNum.value++;
}
} else {
enterpriseOptions.value = [];
if (enterprisePageNum.value === 1) enterpriseOptions.value = [];
enterpriseFinished.value = true;
}
}, () => {
},
() => {
if (seq !== enterpriseSearchSeq) return;
enterpriseSearching.value = false;
enterpriseOptions.value = [];
});
}, 350);
enterpriseLoading.value = false;
enterpriseFinished.value = true;
}
);
};
const onSelectEnterprise = (item) => {
@ -863,6 +934,20 @@ const doSubmit = (isDraft) => {
.enterprise-picker-title { font-size: 16px; font-weight: 600; color: #333; }
:deep(.van-icon) { font-size: 18px; color: #999; cursor: pointer; }
}
.search-bar {
display: flex;
align-items: center;
margin: 0.3rem;
:deep(.van-search) {
padding-right: 0px;
flex: 1;
height: 34px;
}
.search-btn {
flex: none;
height: 34px;
}
}
.enterprise-picker-body {
flex: 1;
overflow-y: auto;
@ -992,8 +1077,7 @@ const doSubmit = (isDraft) => {
.person-item {
padding: 12px 14px;
background: #fff;
border: 1px solid #e6edf5;
border-radius: 10px;
border-bottom: 1px solid #f5f5f5;
margin-bottom: 8px;
cursor: pointer;
&:active { background: #f5faff; }
@ -1001,7 +1085,7 @@ const doSubmit = (isDraft) => {
.person-item-meta {
display: flex;
gap: 12px;
margin-top: 4px;
margin-top: 8px;
font-size: 12px;
color: #999;
.person-item-login { color: #b8c1cc; }

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/notice/cp_notice_message.vue

@ -38,7 +38,7 @@
@touchmove="onTouchMove"
>
<div class="msg-sender">{{ msg.msgFrom === 0 ? (msg.bureauDeptName || useCommon.bureauUnitName || '执法单位') : msg.userName }}</div>
<span>{{ msg.message }}</span>
<span v-html="msg.message"></span>
</div>
</div>
<div v-if="msg.msgFrom === 0" class="msg-avatar right-avatar"></div>

161
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_edit.vue

@ -222,28 +222,38 @@
<span class="enterprise-picker-title">选择企业</span>
<van-icon name="cross" @click="showEnterprisePicker = false" />
</div>
<van-search
v-model="enterpriseSearchKeyword"
placeholder="输入≥ 2 个字符检索企业,不要输入深圳,深圳市"
shape="round"
@update:model-value="onEnterpriseSearchInput"
/>
<div class="search-bar">
<van-search
v-model="enterpriseSearchKeyword"
placeholder="请输入企业名称/统一信用代码搜索"
@search="handleEnterpriseSearch"
@clear="clearEnterpriseSearch"
/>
<van-button class="search-btn" type="primary" @click="handleEnterpriseSearch">搜索</van-button>
</div>
<div class="enterprise-picker-body">
<div v-if="enterpriseSearching" class="enterprise-loading">
<van-loading size="18" />&nbsp;检索中...
</div>
<template v-else>
<van-list
v-model:loading="enterpriseLoading"
:finished="enterpriseFinished"
:finished-text="enterpriseFinishedText"
:offset="50"
@load="onEnterpriseLoad"
>
<div
v-for="(item, idx) in enterpriseOptions"
:key="idx"
:key="item.enterpriseNumber || idx"
class="enterprise-item"
@click="onSelectEnterprise(item)"
>
<div class="enterprise-item-name">{{ item.enterpriseName }}</div>
<div class="enterprise-item-number">{{ item.enterpriseNumber }}</div>
</div>
<van-empty v-if="enterpriseSearchKeyword.length >= 2 && !enterpriseOptions.length" description="未检索到匹配企业" image-size="80" />
</template>
<van-empty
v-if="!enterpriseLoading && !enterpriseOptions.length"
:description="enterpriseEmptyText"
image-size="80"
/>
</van-list>
</div>
</div>
</van-popup>
@ -253,7 +263,8 @@
<script setup name="cpPlanEdit">
import { useRouter, useRoute } from 'vue-router';
import { showToast, showSuccessToast, showConfirmDialog } from 'vant';
import { addPlan, editPlan, getPlanDetail, getSubmitDeadline, getManualMatchDays, getMaxInnerUnitAcPersonNum, searchUnionByEnterpriseName, searchBureauUnitUsers } from '@/api/enforcement/plan';
import { addPlan, editPlan, getPlanDetail, getSubmitDeadline, getManualMatchDays, getMaxInnerUnitAcPersonNum, searchBureauUnitUsers } from '@/api/enforcement/plan';
import { queryEnterpriseListAndQrInfo } from '@/api/enforcement/index';
import { maskPhone } from '@/util/util';
const router = useRouter();
const route = useRoute();
@ -345,10 +356,16 @@ const maxPersonNum = ref(3);
const enterpriseOptions = ref([]);
const showEnterprisePicker = ref(false);
const enterpriseSearchKeyword = ref('');
const enterpriseSearching = ref(false);
let enterpriseSearchTimer = null;
const enterpriseLoading = ref(false);
const enterpriseFinished = ref(false);
const enterprisePageNum = ref(1);
const enterprisePageSize = 10;
const enterpriseSearched = ref(false);
let enterpriseSearchSeq = 0;
const enterpriseEmptyText = computed(() => enterpriseSearched.value ? '未检索到匹配企业' : '请输入至少2个字搜索');
const enterpriseFinishedText = computed(() => enterpriseOptions.value.length > 0 ? '没有更多了' : '');
//
const showPersonPicker = ref(false);
const personSearchKeyword = ref('');
@ -553,36 +570,88 @@ const onDateConfirm = ({ selectedValues }) => {
const onOpenEnterprisePicker = () => {
enterpriseSearchKeyword.value = '';
enterpriseOptions.value = [];
enterprisePageNum.value = 1;
enterpriseFinished.value = true;
enterpriseLoading.value = false;
enterpriseSearched.value = false;
showEnterprisePicker.value = true;
};
// ()
const onEnterpriseSearchInput = (val) => {
if (enterpriseSearchTimer) {
clearTimeout(enterpriseSearchTimer);
}
const keyword = (val || '').trim();
// (/)
const handleEnterpriseSearch = () => {
const keyword = (enterpriseSearchKeyword.value || '').trim();
if (keyword.length < 2) {
showToast('请输入至少2个字搜索');
enterpriseOptions.value = [];
enterpriseFinished.value = true;
enterpriseSearched.value = false;
return;
}
enterprisePageNum.value = 1;
enterpriseFinished.value = false;
enterpriseOptions.value = [];
enterpriseLoading.value = true;
enterpriseSearched.value = true;
fetchEnterpriseList(keyword);
};
//
const clearEnterpriseSearch = () => {
enterpriseSearchKeyword.value = '';
enterpriseOptions.value = [];
enterprisePageNum.value = 1;
enterpriseFinished.value = true;
enterpriseLoading.value = false;
enterpriseSearched.value = false;
};
// van-list
const onEnterpriseLoad = () => {
fetchEnterpriseList(enterpriseSearchKeyword.value.trim());
};
// ()
const fetchEnterpriseList = (keyword) => {
if ((keyword || '').trim().length < 2) {
enterpriseFinished.value = true;
enterpriseLoading.value = false;
return;
}
enterpriseSearchTimer = setTimeout(() => {
const seq = ++enterpriseSearchSeq;
enterpriseSearching.value = true;
searchUnionByEnterpriseName(keyword, (res) => {
const seq = ++enterpriseSearchSeq;
enterpriseLoading.value = true;
queryEnterpriseListAndQrInfo(
{
pageNum: enterprisePageNum.value,
pageSize: enterprisePageSize,
searchValue: keyword,
},
(res) => {
if (seq !== enterpriseSearchSeq) return;
enterpriseSearching.value = false;
if (res && res.code === 200 && Array.isArray(res.data)) {
enterpriseOptions.value = res.data;
enterpriseLoading.value = false;
if (res && res.code === 200 && Array.isArray(res.rows)) {
const data = res.rows;
if (enterprisePageNum.value === 1) {
enterpriseOptions.value = data;
} else {
enterpriseOptions.value = [...enterpriseOptions.value, ...data];
}
const total = res.total || 0;
if (total <= enterprisePageSize * enterprisePageNum.value) {
enterpriseFinished.value = true;
} else {
enterprisePageNum.value++;
}
} else {
enterpriseOptions.value = [];
if (enterprisePageNum.value === 1) enterpriseOptions.value = [];
enterpriseFinished.value = true;
}
}, () => {
},
() => {
if (seq !== enterpriseSearchSeq) return;
enterpriseSearching.value = false;
enterpriseOptions.value = [];
});
}, 350);
enterpriseLoading.value = false;
enterpriseFinished.value = true;
}
);
};
//
@ -993,6 +1062,23 @@ const doSubmit = () => {
}
}
.search-bar {
display: flex;
align-items: center;
margin: 0.3rem;
:deep(.van-search) {
padding-right: 0px;
flex: 1;
height: 34px;
}
.search-btn {
flex: none;
height: 34px;
}
}
.enterprise-picker-body {
flex: 1;
overflow-y: auto;
@ -1106,8 +1192,7 @@ const doSubmit = () => {
.person-item {
padding: 12px 14px;
background: #fff;
border: 1px solid #e6edf5;
border-radius: 10px;
border-bottom: 1px solid #f5f5f5;
margin-bottom: 8px;
cursor: pointer;
@ -1124,7 +1209,7 @@ const doSubmit = () => {
.person-item-meta {
display: flex;
gap: 12px;
margin-top: 4px;
margin-top: 8px;
font-size: 12px;
color: #999;

14
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/task/cp_task_mine.vue

@ -63,7 +63,7 @@
<div class="task-content-col">
<div class="task-title-row">
<span class="task-title">{{ item.enterpriseName || '-' }}</span>
<span v-if="item.isUnion === 1" class="union-badge"></span>
<span v-if="item.isUnion === 1 && item.associatedPlans && item.associatedPlans.length" class="union-badge"></span>
</div>
<div class="task-time-info">
<van-icon name="clock-o" size="14" color="#999" />
@ -302,6 +302,7 @@ const getTimeStart = (item) => {
const time = item.planActualTime || item.planTime;
if (time === 1) return '09:00';
if (time === 2) return '14:00';
if (time === 3) return '18:00';
return '';
};
@ -309,12 +310,13 @@ const getTimeEnd = (item) => {
const time = item.planActualTime || item.planTime;
if (time === 1) return '12:00';
if (time === 2) return '18:00';
if (time === 3) return '21:00';
return '';
};
const getTimeRange = (item) => {
const time = item.planActualTime || item.planTime;
if (time === 3) return '其他';
// if (time === 3) return '';
return `${getTimeStart(item)}-${getTimeEnd(item)}`;
};
@ -371,6 +373,14 @@ const loadTaskList = () => {
loading.value = false;
if (res.code === 200 && res.data) {
taskList.value = res.data;
// (1) (2)
taskList.value.sort((a, b) => {
const ta = a.planActualTime || a.planTime;
const tb = b.planActualTime || b.planTime;
const ra = ta === 1 ? 0 : ta === 2 ? 1 : 2;
const rb = tb === 1 ? 0 : tb === 2 ? 1 : 2;
return ra - rb;
});
//
loadAssociatedPlans();
} else {

114
zdxt-web-server/zdxt-admin-web-server/src/main/resources/businessdatasyn/sys_dept.json

@ -0,0 +1,114 @@
{
"configKey": "sys_dept",
"description": "部门表双向同步",
"enabled": true,
"v1": {
"table": "sys_dept",
"primaryKey": ["dept_id"],
"updateTimeColumn": "update_time",
"deleteFlagColumn": "del_flag",
"columns": [
"dept_id", "parent_id", "ancestors", "dept_name", "order_num",
"phone", "email", "status", "del_flag",
"create_time", "update_time",
"dept_type",
"zzLevel", "code", "mappingUnitParentId", "updateAt", "createAt",
"effectOn", "organizationId", "sequence", "isDeleted", "zzDisplayPath",
"name", "guid", "zzIsLeaf", "isDisabled", "fullname", "isMappingUnit",
"srzUnitId", "taskId", "organizationParentId", "systemId", "creditcode",
"zone", "unitStatusCode", "unitStatus", "unitTypeCode", "area_node"
]
},
"v2": {
"table": "sys_dept",
"primaryKey": ["dept_id"],
"updateTimeColumn": "update_time",
"deleteFlagColumn": "del_flag",
"columns": [
"dept_id", "parent_id", "ancestors", "dept_name", "order_num",
"phone", "email", "status", "del_flag",
"create_time", "update_time",
"dept_type",
"zzLevel", "code", "mappingUnitParentId", "updateAt", "createAt",
"effectOn", "organizationId", "sequence", "isDeleted", "zzDisplayPath",
"name", "guid", "zzIsLeaf", "isDisabled", "fullname", "isMappingUnit",
"srzUnitId", "taskId", "organizationParentId", "systemId", "creditcode",
"zone", "unitStatusCode", "unitStatus", "unitTypeCode", "area_node",
"tenant_id", "create_dept"
]
},
"columnMapping": {
"dept_id": "dept_id",
"parent_id": "parent_id",
"ancestors": "ancestors",
"dept_name": "dept_name",
"order_num": "order_num",
"phone": "phone",
"email": "email",
"status": "status",
"del_flag": "del_flag",
"create_time": "create_time",
"update_time": "update_time",
"dept_type": "dept_type",
"zzLevel": "zzLevel",
"code": "code",
"mappingUnitParentId": "mappingUnitParentId",
"updateAt": "updateAt",
"createAt": "createAt",
"effectOn": "effectOn",
"organizationId": "organizationId",
"sequence": "sequence",
"isDeleted": "isDeleted",
"zzDisplayPath": "zzDisplayPath",
"name": "name",
"guid": "guid",
"zzIsLeaf": "zzIsLeaf",
"isDisabled": "isDisabled",
"fullname": "fullname",
"isMappingUnit": "isMappingUnit",
"srzUnitId": "srzUnitId",
"taskId": "taskId",
"organizationParentId": "organizationParentId",
"systemId": "systemId",
"creditcode": "creditcode",
"zone": "zone",
"unitStatusCode": "unitStatusCode",
"unitStatus": "unitStatus",
"unitTypeCode": "unitTypeCode",
"area_node": "area_node"
},
"hashColumns": [
"parent_id", "ancestors", "dept_name", "order_num",
"phone", "email", "status",
"dept_type",
"zzLevel", "code", "mappingUnitParentId", "updateAt", "createAt",
"effectOn", "organizationId", "sequence", "isDeleted", "zzDisplayPath",
"name", "guid", "zzIsLeaf", "isDisabled", "fullname", "isMappingUnit",
"srzUnitId", "taskId", "organizationParentId", "systemId", "creditcode",
"zone", "unitStatusCode", "unitStatus", "unitTypeCode", "area_node"
],
"typeConverters": {},
"v2OnlyColumnsIgnoredOnV1": ["tenant_id", "create_dept"],
"v2OnlyColumnsDefaults": {
"tenant_id": "000000",
"create_dept": null
},
"firstOwnerFallback": "V1",
"deleteMode": "logical",
"logicalDelete": {
"v1": { "column": "del_flag", "value": 1 },
"v2": { "column": "del_flag", "value": 1 }
},
"strictOwnerMode": false,
"scanBatchSize": 1000,
"maxRetry": 5
}

122
zdxt-web-server/zdxt-admin-web-server/src/main/resources/businessdatasyn/sys_user.json

@ -0,0 +1,122 @@
{
"configKey": "sys_user",
"description": "用户表双向同步",
"enabled": true,
"v1": {
"table": "sys_user",
"primaryKey": ["user_id"],
"updateTimeColumn": "update_time",
"deleteFlagColumn": "del_flag",
"columns": [
"user_id", "dept_id", "login_name", "user_name",
"email", "phonenumber", "sex", "avatar", "salt",
"status", "del_flag", "login_ip", "login_date",
"create_time", "update_time", "remark",
"type", "law_certificate_num",
"fullname", "taskId", "systemId", "effectOn",
"isDeleted", "isDisabled", "createAt", "updateAt",
"mobileNumber", "certificateNumber", "srzUserid",
"isMappingPerson", "units", "organizationId",
"certificateTypeId", "certificateTypeIdCode", "strUserId",
"user_source", "rylbCode", "rylb"
]
},
"v2": {
"table": "sys_user",
"primaryKey": ["user_id"],
"updateTimeColumn": "update_time",
"deleteFlagColumn": "del_flag",
"columns": [
"user_id", "dept_id", "login_name", "user_name",
"email", "phonenumber", "sex", "avatar", "salt",
"status", "del_flag", "login_ip", "login_date",
"create_time", "update_time", "remark",
"type", "law_certificate_num",
"fullname", "taskId", "systemId", "effectOn",
"isDeleted", "isDisabled", "createAt", "updateAt",
"mobileNumber", "certificateNumber", "srzUserid",
"isMappingPerson", "units", "organizationId",
"certificateTypeId", "certificateTypeIdCode", "strUserId",
"user_source", "rylbCode", "rylb",
"tenant_id", "nick_name", "user_type", "create_dept"
]
},
"columnMapping": {
"user_id": "user_id",
"dept_id": "dept_id",
"login_name": "login_name",
"user_name": "user_name",
"email": "email",
"phonenumber": "phonenumber",
"sex": "sex",
"avatar": "avatar",
"salt": "salt",
"status": "status",
"del_flag": "del_flag",
"login_ip": "login_ip",
"login_date": "login_date",
"create_time": "create_time",
"update_time": "update_time",
"remark": "remark",
"type": "type",
"law_certificate_num": "law_certificate_num",
"fullname": "fullname",
"taskId": "taskId",
"systemId": "systemId",
"effectOn": "effectOn",
"isDeleted": "isDeleted",
"isDisabled": "isDisabled",
"createAt": "createAt",
"updateAt": "updateAt",
"mobileNumber": "mobileNumber",
"certificateNumber": "certificateNumber",
"srzUserid": "srzUserid",
"isMappingPerson": "isMappingPerson",
"units": "units",
"organizationId": "organizationId",
"certificateTypeId": "certificateTypeId",
"certificateTypeIdCode": "certificateTypeIdCode",
"strUserId": "strUserId",
"user_source": "user_source",
"rylbCode": "rylbCode",
"rylb": "rylb"
},
"hashColumns": [
"dept_id", "login_name", "user_name",
"email", "phonenumber", "sex", "avatar", "salt",
"status", "login_ip", "login_date", "remark",
"type", "law_certificate_num",
"fullname", "taskId", "systemId", "effectOn",
"isDeleted", "isDisabled", "createAt", "updateAt",
"mobileNumber", "certificateNumber", "srzUserid",
"isMappingPerson", "units", "organizationId",
"certificateTypeId", "certificateTypeIdCode", "strUserId",
"user_source", "rylbCode", "rylb"
],
"typeConverters": {},
"v2OnlyColumnsIgnoredOnV1": ["tenant_id", "nick_name", "user_type", "create_dept"],
"v2OnlyColumnsDefaults": {
"tenant_id": "000000",
"nick_name": "${v1.user_name}",
"user_type": "sys_user",
"create_dept": null
},
"firstOwnerFallback": "V1",
"deleteMode": "logical",
"logicalDelete": {
"v1": { "column": "del_flag", "value": 1 },
"v2": { "column": "del_flag", "value": 1 }
},
"strictOwnerMode": false,
"scanBatchSize": 1000,
"maxRetry": 5
}
Loading…
Cancel
Save