Commit e6d15810 authored by KeYong's avatar KeYong

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

parents 25626401 b888df83
package com.yeejoin.amos.boot.module.common.api.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class OrgUsrSyncDto {
protected Long sequenceNbr;
protected Date recDate;
protected String recUserId;
protected String recUserName;
/**
* 是否删除
*/
public Boolean isDelete = false;
@ApiModelProperty(value = "机构/部门名称")
private String bizOrgName;
@ApiModelProperty(value = "机构编码")
private String bizOrgCode;
@ApiModelProperty(value = "amos中公司/部门ID")
private String amosOrgId;
@ApiModelProperty(value = "amos中公司/部门编码")
private String amosOrgCode;
@ApiModelProperty(value = "机构类型`")
private String bizOrgType;
@ApiModelProperty(value = "所属建筑名称")
private String buildName;
@ApiModelProperty(value = "所属建筑ID")
private String buildId;
@ApiModelProperty(value = "归属机构/部门/人员")
private String parentId;
@ApiModelProperty(value = "扩展属性1")
private String orgExpandAttr1;
@ApiModelProperty(value = "扩展属性2")
private String orgExpandAttr2;
@ApiModelProperty(value = "扩展属性3")
private String orgExpandAttr3;
@ApiModelProperty(value = "扩展属性4")
private String orgExpandAttr4;
private String orgExpandAttr5;
private String orgExpandAttr6;
private String orgExpandAttr7;
private String orgExpandAttr8;
@ApiModelProperty(value = "省市区code,用逗号分隔")
private String pczCode;
@ApiModelProperty(value = "省市区名称,用逗号分隔")
private String pczName;
@ApiModelProperty(value = "省市区名称,用逗号分隔")
private String parentName;
@ApiModelProperty(value = "唯一编号")
private String code;
private String companyBizName;
private String companyBizCode;
private String fireManagementPost;
private String typeCode;
private String certificatesNumber;
private String employeeNumber;
private String telephone;
private String isCertificate;
private String isFirefighters;
private String personImg;
private String jobTitle;
}
package com.yeejoin.amos.boot.module.common.api.enums;
public enum DataSyncTopicEnum {
EQM_PATROL_CREATED("user", "emq.user.created"),
ORG_USR("orgUsr", "user/sync/orgUsr");
private String type;
private String topic;
DataSyncTopicEnum(String type, String topic) {
this.type = type;
this.topic = topic;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
}
...@@ -133,4 +133,6 @@ public interface OrgUsrMapper extends BaseMapper<OrgUsr> { ...@@ -133,4 +133,6 @@ public interface OrgUsrMapper extends BaseMapper<OrgUsr> {
List<DynamicFormInstance> checkCertificatesNumber(String certificatesNumber, Long orgUserId); List<DynamicFormInstance> checkCertificatesNumber(String certificatesNumber, Long orgUserId);
OrgUsr queryByCompanyCode(@Param("companyCode") String companyCode); OrgUsr queryByCompanyCode(@Param("companyCode") String companyCode);
List<OrgUsrSyncDto> getOrgUsrSyncDataList(Map<String, Object> map);
} }
package com.yeejoin.amos.boot.module.common.api.service;
/**
* <h1>数据消息数据同步</h1>
*
* @Author Jianqiang Gao
* @Date 2022-11-03 14:27
*/
public interface IDataSyncService {
void OrgUsrSyncDtoDataSync(Long id);
}
...@@ -1064,4 +1064,124 @@ LEFT JOIN ( ...@@ -1064,4 +1064,124 @@ LEFT JOIN (
AND code = #{companyCode} AND code = #{companyCode}
</if> </if>
</select> </select>
<select id="getOrgUsrSyncDataList" resultType="com.yeejoin.amos.boot.module.common.api.dto.OrgUsrSyncDto">
SELECT
u.*,
case
when u.biz_org_type = 'person'
and (
SELECT
s.biz_org_type
from
cb_org_usr s
WHERE
s.sequence_nbr = u.parent_id) = 'DEPARTMENT'
then (
SELECT
s.biz_org_name
from
cb_org_usr s
WHERE
s.sequence_nbr = (
SELECT
s.parent_id
from
cb_org_usr s
WHERE
s.sequence_nbr = u.parent_id))
when u.biz_org_type = 'person'
and (
SELECT
s.biz_org_type
from
cb_org_usr s
WHERE
s.sequence_nbr = u.parent_id) = 'COMPANY'
then u.parent_name
else u.biz_org_name
end as company_biz_name,
case
when u.biz_org_type = 'person'
and (
SELECT
s.biz_org_type
from
cb_org_usr s
WHERE
s.sequence_nbr = u.parent_id) = 'DEPARTMENT'
then (
SELECT
s.biz_org_code
from
cb_org_usr s
WHERE
s.sequence_nbr = (
SELECT
s.parent_id
from
cb_org_usr s
WHERE
s.sequence_nbr = u.parent_id))
when u.biz_org_type = 'person'
and (
SELECT
s.biz_org_type
from
cb_org_usr s
WHERE
s.sequence_nbr = u.parent_id) = 'COMPANY'
then (
SELECT
s.biz_org_code
from
cb_org_usr s
WHERE
s.sequence_nbr = u.parent_id)
else u.biz_org_code
end as company_biz_code,
cfp.fire_management_post,
cft.type_code,
cf.certificate_number certificatesNumber,
cf.employee_number ,
cf.mobile_phone telephone,
( CASE
WHEN cfp.post_qualification IS NULL THEN 0
ELSE 1
END ) AS is_certificate,
IF
((
SELECT
field_value
FROM
cb_dynamic_form_instance dfi
WHERE
dfi.field_code = 'peopleType'
AND dfi.instance_id = u.sequence_nbr )= 2,
1,
0 ) AS is_firefighters,
(
SELECT
field_value
FROM
cb_dynamic_form_instance dfi
WHERE
dfi.field_code = 'personImg'
AND dfi.instance_id = u.sequence_nbr ) AS personImg,
cfp.job_title
FROM
cb_org_usr u
LEFT JOIN cb_firefighters_post cfp ON
cfp.org_usr_id = u.sequence_nbr
LEFT JOIN cb_firefighters cf ON
cf.org_usr_id = u.sequence_nbr
LEFT JOIN cb_fire_team cft ON
cft.sequence_nbr = cf.fire_team_id
WHERE
u.is_delete = 0
<if test="id != null">
AND u.sequence_nbr = #{id}
</if>
GROUP BY
u.sequence_nbr
</select>
</mapper> </mapper>
package com.yeejoin.amos.boot.module.common.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.common.api.dto.OrgUsrSyncDto;
import com.yeejoin.amos.boot.module.common.api.enums.DataSyncTopicEnum;
import com.yeejoin.amos.boot.module.common.api.mapper.OrgUsrMapper;
import com.yeejoin.amos.boot.module.common.api.service.IDataSyncService;
import com.yeejoin.amos.component.rule.config.RuleConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.component.emq.EmqKeeper;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Async
@Slf4j
public class DataSyncServiceImpl implements IDataSyncService {
@Autowired
private EmqKeeper emqKeeper;
@Autowired
private OrgUsrMapper orgUsrMapper;
@Value("${emq.orgUsr.sync.switch}")
private Boolean orgUsrSyncSwitch;
@Override
public void OrgUsrSyncDtoDataSync(Long id) {
try {
if (id != null) {
Map<String, Object> map = new HashMap<>();
map.put("id", id);
List<OrgUsrSyncDto> list = orgUsrMapper.getOrgUsrSyncDataList(map);
if (CollectionUtils.isNotEmpty(list)) {
for (OrgUsrSyncDto x : list) {
String message = buildSyncMessage(DataSyncTopicEnum.ORG_USR.getTopic(), x);
emqKeeper.getMqttClient().publish(DataSyncTopicEnum.EQM_PATROL_CREATED.getTopic(), message.getBytes(), RuleConfig.DEFAULT_QOS, false);
if (orgUsrSyncSwitch) {
emqKeeper.getMqttClient().publish(DataSyncTopicEnum.ORG_USR.getTopic(), JSONObject.toJSONString(x).getBytes(), RuleConfig.DEFAULT_QOS, false);
}
}
} else {
// 同步删除人员信息
OrgUsrSyncDto orgUsrSyncDto = new OrgUsrSyncDto();
orgUsrSyncDto.setSequenceNbr(id);
String message = buildSyncMessage(DataSyncTopicEnum.ORG_USR.getTopic(), orgUsrSyncDto);
emqKeeper.getMqttClient().publish(DataSyncTopicEnum.EQM_PATROL_CREATED.getTopic(), message.getBytes(), RuleConfig.DEFAULT_QOS, false);
if (orgUsrSyncSwitch) {
emqKeeper.getMqttClient().publish(DataSyncTopicEnum.ORG_USR.getTopic(), JSONObject.toJSONString(orgUsrSyncDto).getBytes(), RuleConfig.DEFAULT_QOS, false);
}
}
}
} catch (Exception e) {
log.error("站端与中心级人员数据【OrgUsrSyncDto】同步推送失败-----------" + e.getMessage());
}
}
public String buildSyncMessage(String topic, Object object) {
Map<String, Object> map = new HashMap<>();
map.put("topic", topic);
map.put("data", object);
return JSONObject.toJSONString(map);
}
}
package com.yeejoin.amos.boot.module.common.biz.service.impl; package com.yeejoin.amos.boot.module.common.biz.service.impl;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import com.yeejoin.amos.boot.biz.common.dao.mapper.DataDictionaryMapper; import com.yeejoin.amos.boot.biz.common.dao.mapper.DataDictionaryMapper;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.module.common.api.dto.*; import com.yeejoin.amos.boot.module.common.api.dto.*;
import com.yeejoin.amos.boot.module.common.api.entity.*; import com.yeejoin.amos.boot.module.common.api.entity.*;
import com.yeejoin.amos.boot.module.common.api.mapper.OrgUsrMapper; import com.yeejoin.amos.boot.module.common.api.mapper.OrgUsrMapper;
import com.yeejoin.amos.component.feign.model.Page; import com.yeejoin.amos.boot.module.common.api.service.IDataSyncService;
import com.yeejoin.amos.feign.privilege.Privilege; import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.RoleModel;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.annotation.Condition; import org.typroject.tyboot.core.rdbms.annotation.Condition;
import org.typroject.tyboot.core.rdbms.annotation.Operator; import org.typroject.tyboot.core.rdbms.annotation.Operator;
...@@ -35,7 +34,6 @@ import com.yeejoin.amos.boot.module.common.api.service.IFirefightersService; ...@@ -35,7 +34,6 @@ import com.yeejoin.amos.boot.module.common.api.service.IFirefightersService;
import com.yeejoin.amos.component.feign.model.FeignClientResult; import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.systemctl.Systemctl; import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.RegionModel; import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
/** /**
* 消防队员 服务实现类 * 消防队员 服务实现类
...@@ -62,6 +60,9 @@ public class FirefightersServiceImpl extends BaseService<FirefightersDto, Firefi ...@@ -62,6 +60,9 @@ public class FirefightersServiceImpl extends BaseService<FirefightersDto, Firefi
@Autowired @Autowired
private OrgUsrMapper orgUsrMapper; private OrgUsrMapper orgUsrMapper;
@Autowired
private IDataSyncService dataSyncService;
@Override @Override
public List<FirefightersZhDto> getFirefighters(int pageNum, int pageSize, FirefightersDto par) { public List<FirefightersZhDto> getFirefighters(int pageNum, int pageSize, FirefightersDto par) {
return firefightersMapper.getFirefighters(pageNum, pageSize, par); return firefightersMapper.getFirefighters(pageNum, pageSize, par);
...@@ -256,6 +257,14 @@ public class FirefightersServiceImpl extends BaseService<FirefightersDto, Firefi ...@@ -256,6 +257,14 @@ public class FirefightersServiceImpl extends BaseService<FirefightersDto, Firefi
// 更新紧急联系人 // 更新紧急联系人
ifirefightersContactsService.updateById(peopleInfoDto.getFirefightersContacts()); ifirefightersContactsService.updateById(peopleInfoDto.getFirefightersContacts());
} }
// 巡检站端与中心级数据同步
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
// 事物提交后业务逻辑
dataSyncService.OrgUsrSyncDtoDataSync(id);
}
});
return peopleInfoDto; return peopleInfoDto;
} }
......
...@@ -27,12 +27,12 @@ import com.yeejoin.amos.boot.module.common.api.enums.UserRolesEnum; ...@@ -27,12 +27,12 @@ import com.yeejoin.amos.boot.module.common.api.enums.UserRolesEnum;
import com.yeejoin.amos.boot.module.common.api.enums.UserUnitTypeEnum; import com.yeejoin.amos.boot.module.common.api.enums.UserUnitTypeEnum;
import com.yeejoin.amos.boot.module.common.api.feign.AmosTrainingFeignClient; import com.yeejoin.amos.boot.module.common.api.feign.AmosTrainingFeignClient;
import com.yeejoin.amos.boot.module.common.api.mapper.*; import com.yeejoin.amos.boot.module.common.api.mapper.*;
import com.yeejoin.amos.boot.module.common.api.service.IDataSyncService;
import com.yeejoin.amos.boot.module.common.api.service.IMaintenanceCompanyService; import com.yeejoin.amos.boot.module.common.api.service.IMaintenanceCompanyService;
import com.yeejoin.amos.boot.module.common.api.service.IOrgUsrService; import com.yeejoin.amos.boot.module.common.api.service.IOrgUsrService;
import com.yeejoin.amos.component.feign.model.FeignClientResult; import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege; import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.privilege.model.RoleModel; import com.yeejoin.amos.feign.privilege.model.RoleModel;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -43,6 +43,8 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -43,6 +43,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.component.emq.EmqKeeper; import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.context.RequestContext; import org.typroject.tyboot.core.foundation.context.RequestContext;
...@@ -160,6 +162,9 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp ...@@ -160,6 +162,9 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp
FirefightersContactsServiceImpl ifirefightersContactsService; FirefightersContactsServiceImpl ifirefightersContactsService;
@Autowired @Autowired
private IDataSyncService dataSyncService;
@Autowired
RedisUtils redisUtils; RedisUtils redisUtils;
public static List<OrgMenuDto> buildTreeParallel(List<OrgUsr> list) { public static List<OrgMenuDto> buildTreeParallel(List<OrgUsr> list) {
...@@ -2985,14 +2990,14 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp ...@@ -2985,14 +2990,14 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp
// 2.保存cb_dynamic_form_instance表 人员基本信息 // 2.保存cb_dynamic_form_instance表 人员基本信息
OrgUsrDto orgUsrDto = saveDynamicformInstance(orgUsr, peopleInfoDto.getFirefighters()); OrgUsrDto orgUsrDto = saveDynamicformInstance(orgUsr, peopleInfoDto.getFirefighters());
Long sequenceNbr = orgUsrDto.getSequenceNbr();
if (!ObjectUtils.isEmpty(orgUsrDto.getSequenceNbr())) { if (!ObjectUtils.isEmpty(sequenceNbr)) {
peopleInfoDto.getFirefightersContacts().setOrgUsrId(orgUsrDto.getSequenceNbr().toString()); peopleInfoDto.getFirefightersContacts().setOrgUsrId(sequenceNbr.toString());
peopleInfoDto.getFirefighters().setOrgUsrId(orgUsrDto.getSequenceNbr().toString()); peopleInfoDto.getFirefighters().setOrgUsrId(sequenceNbr.toString());
peopleInfoDto.getPostEduDtoObj().getFirefightersWorkexperience().setOrgUsrId(orgUsrDto.getSequenceNbr().toString()); peopleInfoDto.getPostEduDtoObj().getFirefightersWorkexperience().setOrgUsrId(sequenceNbr.toString());
peopleInfoDto.getPostEduDtoObj().getFirefightersEducation().setOrgUsrId(orgUsrDto.getSequenceNbr().toString()); peopleInfoDto.getPostEduDtoObj().getFirefightersEducation().setOrgUsrId(sequenceNbr.toString());
peopleInfoDto.getPostEduDtoObj().getFirefightersPost().setOrgUsrId(orgUsrDto.getSequenceNbr().toString()); peopleInfoDto.getPostEduDtoObj().getFirefightersPost().setOrgUsrId(sequenceNbr.toString());
peopleInfoDto.getFirefighters().setSequenceNbr(orgUsrDto.getSequenceNbr().toString()); peopleInfoDto.getFirefighters().setSequenceNbr(sequenceNbr.toString());
} }
if (peopleInfoDto.getFirefighters() != null && "1601".equals(peopleInfoDto.getFirefighters().getPeopleType())) { if (peopleInfoDto.getFirefighters() != null && "1601".equals(peopleInfoDto.getFirefighters().getPeopleType())) {
...@@ -3004,6 +3009,14 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp ...@@ -3004,6 +3009,14 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp
} }
// 4.保存岗位信息 // 4.保存岗位信息
saveFirefightersPost(peopleInfoDto.getPostEduDtoObj(), orgUsrDto.getSequenceNbr()); saveFirefightersPost(peopleInfoDto.getPostEduDtoObj(), orgUsrDto.getSequenceNbr());
// 巡检站端与中心级数据同步
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
// 事物提交后业务逻辑
dataSyncService.OrgUsrSyncDtoDataSync(sequenceNbr);
}
});
return peopleInfoDto; return peopleInfoDto;
} }
...@@ -3106,7 +3119,7 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp ...@@ -3106,7 +3119,7 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp
PeopleBasicInfoDto firefighters = peopleInfoDto.getFirefighters(); PeopleBasicInfoDto firefighters = peopleInfoDto.getFirefighters();
Firefighters firefightersNew = new Firefighters(); Firefighters firefightersNew = new Firefighters();
BeanUtils.copyProperties(firefighters, firefightersNew); BeanUtils.copyProperties(firefighters, firefightersNew);
firefightersNew.setOfficeTelephone(firefighters.getTelephone()); firefightersNew.setMobilePhone(firefighters.getTelephone());
firefightersNew.setEmployeeNumber(firefighters.getPersonNumber()); firefightersNew.setEmployeeNumber(firefighters.getPersonNumber());
firefightersNew.setCertificateNumber(firefighters.getCertificatesNumber()); firefightersNew.setCertificateNumber(firefighters.getCertificatesNumber());
firefightersNew.setAmosName(firefighters.getAmosName()); firefightersNew.setAmosName(firefighters.getAmosName());
...@@ -3322,7 +3335,14 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp ...@@ -3322,7 +3335,14 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp
if ("1601".equals(type)) { if ("1601".equals(type)) {
deleteFirefighters(id); deleteFirefighters(id);
} }
// 巡检站端与中心级数据同步
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
// 事物提交后业务逻辑
dataSyncService.OrgUsrSyncDtoDataSync(id);
}
});
return "0"; return "0";
} }
......
...@@ -46,3 +46,5 @@ video.url=https://11.11.16.4:443/ ...@@ -46,3 +46,5 @@ video.url=https://11.11.16.4:443/
ifc.url=http://11.11.16.17/IFCInterface ifc.url=http://11.11.16.17/IFCInterface
ifc.call-back.localIp=11.11.16.1 ifc.call-back.localIp=11.11.16.1
#人员消息数据同步开关
emq.orgUsr.sync.switch=true
\ No newline at end of file
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