324 changed files with 12383 additions and 955 deletions
@ -0,0 +1,21 @@ |
|||
package com.epmet.dto; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @Author zxc |
|||
* @DateTime 2022/10/20 14:21 |
|||
* @DESC |
|||
*/ |
|||
@Data |
|||
public class ComplementLogOperationDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 7563210356670229204L; |
|||
|
|||
private String staffId; |
|||
|
|||
private String orgId; |
|||
private String orgIdPath; |
|||
} |
|||
@ -0,0 +1,122 @@ |
|||
package com.epmet.mq.listener.listener; |
|||
|
|||
import com.alibaba.fastjson.JSON; |
|||
import com.epmet.auth.constants.AuthOperationEnum; |
|||
import com.epmet.commons.rocketmq.constants.MQUserPropertys; |
|||
import com.epmet.commons.rocketmq.messages.CheckMQMsg; |
|||
import com.epmet.commons.rocketmq.messages.LoginMQMsg; |
|||
import com.epmet.commons.tools.distributedlock.DistributedLock; |
|||
import com.epmet.commons.tools.exception.ExceptionUtils; |
|||
import com.epmet.commons.tools.exception.RenException; |
|||
import com.epmet.commons.tools.redis.RedisKeys; |
|||
import com.epmet.commons.tools.redis.RedisUtils; |
|||
import com.epmet.commons.tools.utils.SpringContextUtils; |
|||
import com.epmet.entity.LogOperationEntity; |
|||
import com.epmet.mq.listener.bean.log.LogOperationHelper; |
|||
import com.epmet.mq.listener.bean.log.OperatorInfo; |
|||
import com.epmet.service.LogOperationService; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; |
|||
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; |
|||
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; |
|||
import org.apache.rocketmq.common.message.MessageExt; |
|||
import org.redisson.api.RLock; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
|
|||
import java.util.List; |
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
/** |
|||
* @author zxc |
|||
* @Description 查询明文或者导出操作日志监听器 |
|||
*/ |
|||
public class CheckAndExportOperationLogListener implements MessageListenerConcurrently { |
|||
|
|||
private Logger logger = LoggerFactory.getLogger(getClass()); |
|||
|
|||
private RedisUtils redisUtils; |
|||
|
|||
@Override |
|||
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { |
|||
|
|||
if (redisUtils == null) { |
|||
redisUtils = SpringContextUtils.getBean(RedisUtils.class); |
|||
} |
|||
|
|||
try { |
|||
msgs.forEach(msg -> consumeMessage(msg)); |
|||
} catch (Exception e) { |
|||
logger.error(ExceptionUtils.getErrorStackTrace(e)); |
|||
return ConsumeConcurrentlyStatus.RECONSUME_LATER; |
|||
} |
|||
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; |
|||
} |
|||
|
|||
private void consumeMessage(MessageExt messageExt) { |
|||
String tags = messageExt.getTags(); |
|||
String msg = new String(messageExt.getBody()); |
|||
String pendingMsgLabel = messageExt.getUserProperty(MQUserPropertys.BLOCKED_MSG_LABEL); |
|||
logger.info("查询明文或者导出操作日志监听器-收到消息内容:{}", msg); |
|||
CheckMQMsg msgObj = JSON.parseObject(msg, CheckMQMsg.class); |
|||
|
|||
//获取操作人信息
|
|||
OperatorInfo operatorInfo = LogOperationHelper.getInstance().getOperatorInfo(msgObj.getUserId()); |
|||
LogOperationEntity logEntity = new LogOperationEntity(); |
|||
logEntity.setCategory("data_tm"); |
|||
logEntity.setType(msgObj.getType()); |
|||
logEntity.setTypeDisplay(msgObj.getTypeDisplay()); |
|||
logEntity.setIp(msgObj.getIp()); |
|||
logEntity.setFromApp(msgObj.getFromApp()); |
|||
logEntity.setFromClient(msgObj.getFromClient()); |
|||
logEntity.setTargetId(""); |
|||
logEntity.setCustomerId(operatorInfo.getCustomerId()); |
|||
logEntity.setOperatorId(msgObj.getUserId()); |
|||
logEntity.setOperatorName(operatorInfo.getName()); |
|||
logEntity.setOperatorMobile(operatorInfo.getMobile()); |
|||
logEntity.setOperatingTime(msgObj.getOperateTime()); |
|||
logEntity.setContent(msgObj.getContent()); |
|||
logEntity.setOrgId(msgObj.getOrgId()); |
|||
logEntity.setOrgIdPath(msgObj.getOrgIdPath()); |
|||
|
|||
DistributedLock distributedLock = null; |
|||
RLock lock = null; |
|||
try { |
|||
distributedLock = SpringContextUtils.getBean(DistributedLock.class); |
|||
lock = distributedLock.getLock(String.format("lock:auth_operation_log:%s:%s", logEntity.getType(), logEntity.getOperatorId()), |
|||
30L, 30L, TimeUnit.SECONDS); |
|||
SpringContextUtils.getBean(LogOperationService.class).log(logEntity); |
|||
} catch (RenException e) { |
|||
// 如果是我们手动抛出的异常,说明在业务可控范围内。目前不需要MQ重试
|
|||
logger.error("【RocketMQ】添加操作日志失败:".concat(ExceptionUtils.getErrorStackTrace(e))); |
|||
} catch (Exception e) { |
|||
// 不是我们自己抛出的异常,可以让MQ重试
|
|||
logger.error("【RocketMQ】添加操作日志失败:".concat(ExceptionUtils.getErrorStackTrace(e))); |
|||
throw e; |
|||
} finally { |
|||
distributedLock.unLock(lock); |
|||
} |
|||
|
|||
if (StringUtils.isNotBlank(pendingMsgLabel)) { |
|||
try { |
|||
removePendingMqMsgCache(pendingMsgLabel); |
|||
} catch (Exception e) { |
|||
logger.error("【查询明文或者导出操作日志监听器】-删除mq阻塞消息缓存失败:{}", ExceptionUtils.getErrorStackTrace(e)); |
|||
} |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* @description |
|||
* |
|||
* @param pendingMsgLabel |
|||
* @return |
|||
* @author wxz |
|||
* @date 2021.10.14 16:32:32 |
|||
*/ |
|||
private void removePendingMqMsgCache(String pendingMsgLabel) { |
|||
String key = RedisKeys.blockedMqMsgKey(pendingMsgLabel); |
|||
redisUtils.delete(key); |
|||
//logger.info("【登录操作事件监听器】删除pendingMsgLabel成功:{}", pendingMsgLabel);
|
|||
} |
|||
} |
|||
@ -0,0 +1,2 @@ |
|||
|
|||
ALTER TABLE log_operation MODIFY COLUMN CATEGORY varchar(64) not null COMMENT '操作类型大类。例如login和logout都属于login大类。项目立项,项目流转,项目结案都属于项目大类;data_tm:数据脱敏;'; |
|||
@ -0,0 +1,3 @@ |
|||
|
|||
alter table log_operation add COLUMN ORG_ID VARCHAR(32) comment '组织ID' AFTER ID; |
|||
alter table log_operation add COLUMN ORG_ID_PATH VARCHAR(255) comment '组织ID全路径,包括组织ID' AFTER ORG_ID; |
|||
@ -0,0 +1,33 @@ |
|||
package com.epmet.commons.rocketmq.messages; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.util.Date; |
|||
|
|||
@Data |
|||
public class CheckMQMsg { |
|||
|
|||
/** |
|||
* 谁登录 |
|||
*/ |
|||
private String userId; |
|||
|
|||
private String content; |
|||
|
|||
private String typeDisplay; |
|||
private String type; |
|||
|
|||
/** |
|||
* 操作时间 |
|||
*/ |
|||
private Date operateTime; |
|||
|
|||
private String ip; |
|||
|
|||
private String fromApp; |
|||
|
|||
private String fromClient; |
|||
private String orgId; |
|||
private String orgIdPath; |
|||
|
|||
} |
|||
@ -0,0 +1,38 @@ |
|||
package com.epmet.commons.tools.dto.commondto; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @Description |
|||
* @Author yzm |
|||
* @Date 2022/10/11 13:08 |
|||
*/ |
|||
@Data |
|||
public class IcEventComDTO implements Serializable { |
|||
private static final long serialVersionUID = -5166489408303997740L; |
|||
/** |
|||
* 事件Id |
|||
*/ |
|||
private String icEventId; |
|||
/** |
|||
* 事件内容 |
|||
*/ |
|||
private String eventContent; |
|||
/** |
|||
* 处理中:processing;已办结:closed_case |
|||
*/ |
|||
private String status; |
|||
|
|||
/** |
|||
* 0:已回复 1:已转项目 2:已转需求3:转议题 |
|||
*/ |
|||
private String operationType; |
|||
|
|||
/** |
|||
* 项目、需求ID、议题id |
|||
*/ |
|||
private String operationId; |
|||
} |
|||
|
|||
@ -0,0 +1,65 @@ |
|||
package com.epmet.commons.tools.dto.commondto; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @Description |
|||
* @Author yzm |
|||
* @Date 2022/10/11 13:06 |
|||
*/ |
|||
@Data |
|||
public class TopicInfoComDTO implements Serializable { |
|||
private static final long serialVersionUID = 4242861917113716511L; |
|||
/** |
|||
* 话题id |
|||
*/ |
|||
private String topicId; |
|||
|
|||
/** |
|||
* 话题内容 |
|||
*/ |
|||
private String topicContent; |
|||
|
|||
/** |
|||
* 图片列表 |
|||
*/ |
|||
private List<String> topicImgs; |
|||
|
|||
/** |
|||
* 话题语音-2022.10.10 |
|||
*/ |
|||
private List<String> topicVoices; |
|||
|
|||
/** |
|||
* 话题发表人(山东路168-尹女士) |
|||
*/ |
|||
private String publishedUser; |
|||
|
|||
/** |
|||
* 话题发表时间 (时间戳 毫秒级) |
|||
*/ |
|||
private Long publishedTime; |
|||
|
|||
|
|||
private String releaseTime; |
|||
|
|||
/** |
|||
* 小组类型(ordinary:楼院小组 branch:支部小组) |
|||
*/ |
|||
private String groupType; |
|||
|
|||
/** |
|||
* 话题所属小组id |
|||
*/ |
|||
private String groupId; |
|||
|
|||
/** |
|||
* 话题所属小组名称 |
|||
*/ |
|||
private String groupName; |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,28 @@ |
|||
package com.epmet.commons.tools.dto.result; |
|||
|
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
|
|||
/** |
|||
* @Description |
|||
* @Author yzm |
|||
* @Date 2022/9/26 17:04 |
|||
*/ |
|||
@NoArgsConstructor |
|||
@Data |
|||
public class YtDataSyncResDTO { |
|||
private int code = 200; |
|||
private String msg = "请求成功"; |
|||
/** |
|||
* 响应数据 |
|||
*/ |
|||
private String data; |
|||
private int total; |
|||
|
|||
public YtDataSyncResDTO(int code, String msg, String data) { |
|||
this.code = code; |
|||
this.msg = msg; |
|||
this.data = data; |
|||
} |
|||
} |
|||
@ -0,0 +1,80 @@ |
|||
package com.epmet.commons.tools.dto.result; |
|||
|
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.List; |
|||
|
|||
|
|||
/** |
|||
* @Description 核算采样结果 |
|||
* @Author yzm |
|||
* @Date 2022/9/26 17:04 |
|||
*/ |
|||
@NoArgsConstructor |
|||
@Data |
|||
public class YtHscyResDTO { |
|||
private int code = 200; |
|||
private String msg = "请求成功"; |
|||
/** |
|||
* 响应数据 |
|||
*/ |
|||
private List<YtHscyResDetail> data; |
|||
private int total; |
|||
|
|||
@Data |
|||
public static class YtHscyResDetail { |
|||
private String id; |
|||
private String name; |
|||
private String card_type; |
|||
private String card_no; |
|||
private String create_by; |
|||
/** |
|||
* 采样时间 |
|||
*/ |
|||
private String create_time; |
|||
private String sys_org_code; |
|||
private String sample_tube; |
|||
private String package_id; |
|||
private String city; |
|||
private String uuid; |
|||
private String county; |
|||
private String depart_ids; |
|||
private Object depart_name; |
|||
/** |
|||
* 采样点名称 |
|||
*/ |
|||
private String realname; |
|||
private String upload_time; |
|||
private Object sd_id; |
|||
private Object sd_batch; |
|||
private Object sd_operation; |
|||
private Object sd_time; |
|||
private String inserttime; |
|||
} |
|||
|
|||
/*{ |
|||
"id":"1570924677539635484", |
|||
"name":"杨XX",//姓名
|
|||
"card_type":"1",//证件类型
|
|||
"card_no":"37************0813",//证件号码
|
|||
"create_by":"370613594",//采样点账号
|
|||
"create_time":"2022-09-17 07:15:22",//采样时间
|
|||
"sys_org_code":"370613",//部门代码
|
|||
"sample_tube":"GCJ-0825-0441",//采样管号
|
|||
"package_id":"bcj00208083952",//采样包号
|
|||
"city":"烟台市",//城市
|
|||
"uuid":"6225684525062602095",//
|
|||
"county":"莱山区",//区县
|
|||
"depart_ids":"未填写",//街道
|
|||
"depart_name":null,//部门名称
|
|||
"realname":"采样点327",//采样点名称
|
|||
"upload_time":"2022-09-17 07:56:45",//自增时间戳
|
|||
"sd_id":null, |
|||
"sd_batch":null, |
|||
"sd_operation":null, |
|||
"sd_time":null, |
|||
"inserttime":"2022-09-17 09:36:20"//省大数据局返还烟台入库时间
|
|||
}*/ |
|||
|
|||
} |
|||
@ -0,0 +1,133 @@ |
|||
package com.epmet.commons.tools.redis.common.bean; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @Author zxc |
|||
* @DateTime 2022/10/19 14:26 |
|||
* @DESC |
|||
*/ |
|||
@Data |
|||
public class CustomerStaffInfoDTOCache implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 6967736754443092229L; |
|||
|
|||
|
|||
/** |
|||
* ID |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 关联User表的主键Id |
|||
*/ |
|||
private String userId; |
|||
|
|||
/** |
|||
* 账户 |
|||
*/ |
|||
private String userAccount; |
|||
|
|||
/** |
|||
* 真实姓名 |
|||
*/ |
|||
private String realName; |
|||
|
|||
/** |
|||
* 性别0.未知,1男,2.女 |
|||
*/ |
|||
private Integer gender; |
|||
|
|||
/** |
|||
* 邮箱 |
|||
*/ |
|||
private String email; |
|||
|
|||
/** |
|||
* 手机号-唯一键 |
|||
*/ |
|||
private String mobile; |
|||
|
|||
/** |
|||
* 地址 |
|||
*/ |
|||
private String address; |
|||
|
|||
/** |
|||
* 删除标识 |
|||
*/ |
|||
private Integer delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
/** |
|||
* fulltime专职parttime兼职 |
|||
*/ |
|||
private String workType; |
|||
|
|||
/** |
|||
* 头像 |
|||
*/ |
|||
private String headPhoto; |
|||
|
|||
/** |
|||
* inactive未激活,active已激活 |
|||
*/ |
|||
private String activeFlag; |
|||
|
|||
/** |
|||
* 激活时间 |
|||
*/ |
|||
private Date activeTime; |
|||
|
|||
/** |
|||
* 未禁用enable,已禁用diabled |
|||
*/ |
|||
private String enableFlag; |
|||
|
|||
/** |
|||
* 客户id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 角色名称 |
|||
*/ |
|||
private String roleName; |
|||
|
|||
/** |
|||
* 登录密码 |
|||
*/ |
|||
private String password; |
|||
|
|||
/** |
|||
* 身份证号 |
|||
*/ |
|||
private String idCard; |
|||
} |
|||
@ -0,0 +1,539 @@ |
|||
package com.epmet.commons.tools.redis.common.bean; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @Author zxc |
|||
* @DateTime 2022/10/17 15:40 |
|||
* @DESC |
|||
*/ |
|||
@Data |
|||
public class IcResiUserInfoCache implements Serializable { |
|||
|
|||
private static final long serialVersionUID = -3644143706074015380L; |
|||
|
|||
|
|||
/** |
|||
* 主键 |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 客户Id customer.id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String agencyId; |
|||
|
|||
/** |
|||
* |
|||
*/ |
|||
private String pids; |
|||
|
|||
/** |
|||
* 网格ID |
|||
*/ |
|||
private String gridId; |
|||
|
|||
/** |
|||
* 所属小区ID |
|||
*/ |
|||
private String villageId; |
|||
|
|||
/** |
|||
* 所属楼宇Id |
|||
*/ |
|||
private String buildId; |
|||
|
|||
/** |
|||
* 单元id |
|||
*/ |
|||
private String unitId; |
|||
|
|||
/** |
|||
* 所属家庭Id |
|||
*/ |
|||
private String homeId; |
|||
|
|||
/** |
|||
* 是否本地户籍 |
|||
*/ |
|||
private String isBdhj; |
|||
|
|||
/** |
|||
* 姓名 |
|||
*/ |
|||
private String name; |
|||
|
|||
/** |
|||
* 手机号 |
|||
*/ |
|||
private String mobile; |
|||
|
|||
/** |
|||
* 性别 |
|||
*/ |
|||
private String gender; |
|||
|
|||
/** |
|||
* 身份证号 |
|||
*/ |
|||
private String idCard; |
|||
|
|||
/** |
|||
* 出生日期 |
|||
*/ |
|||
private String birthday; |
|||
|
|||
/** |
|||
* 备注 |
|||
*/ |
|||
private String remarks; |
|||
|
|||
/** |
|||
* 联系人 |
|||
*/ |
|||
private String contacts; |
|||
|
|||
/** |
|||
* 联系人电话 |
|||
*/ |
|||
private String contactsMobile; |
|||
|
|||
/** |
|||
* 九小场所url |
|||
*/ |
|||
private String ninePlace; |
|||
|
|||
/** |
|||
* 是否党员 |
|||
*/ |
|||
private String isParty; |
|||
|
|||
/** |
|||
* 是否低保户 |
|||
*/ |
|||
private String isDbh; |
|||
|
|||
/** |
|||
* 是否保障房 |
|||
*/ |
|||
private String isEnsureHouse; |
|||
|
|||
/** |
|||
* 是否失业 |
|||
*/ |
|||
private String isUnemployed; |
|||
|
|||
/** |
|||
* 是否育龄妇女 |
|||
*/ |
|||
private String isYlfn; |
|||
|
|||
/** |
|||
* 是否退役军人 |
|||
*/ |
|||
private String isVeterans; |
|||
|
|||
/** |
|||
* 是否统战人员 |
|||
*/ |
|||
private String isUnitedFront; |
|||
|
|||
/** |
|||
* 是否信访人员 |
|||
*/ |
|||
private String isXfry; |
|||
|
|||
/** |
|||
* 是否志愿者 |
|||
*/ |
|||
private String isVolunteer; |
|||
|
|||
/** |
|||
* 是否老年人 |
|||
*/ |
|||
private String isOldPeople; |
|||
|
|||
/** |
|||
* 是否空巢 |
|||
*/ |
|||
private String isKc; |
|||
|
|||
/** |
|||
* 是否失独 |
|||
*/ |
|||
private String isSd; |
|||
|
|||
/** |
|||
* 是否失能 |
|||
*/ |
|||
private String isSn; |
|||
|
|||
/** |
|||
* 是否失智 |
|||
*/ |
|||
private String isSz; |
|||
|
|||
/** |
|||
* 是否残疾 |
|||
*/ |
|||
private String isCj; |
|||
|
|||
/** |
|||
* 是否大病 |
|||
*/ |
|||
private String isDb; |
|||
|
|||
/** |
|||
* 是否慢病 |
|||
*/ |
|||
private String isMb; |
|||
|
|||
/** |
|||
* 是否特殊人群 |
|||
*/ |
|||
private String isSpecial; |
|||
|
|||
/** |
|||
* 是否租户【是:1 否:0】 |
|||
*/ |
|||
private String isTenant; |
|||
|
|||
/** |
|||
* 是否是流动人口【是:1 否:0】 |
|||
*/ |
|||
private String isFloating; |
|||
|
|||
/** |
|||
* 是否新阶层人士【是:1 否:0】 |
|||
*/ |
|||
private String isXjc; |
|||
|
|||
/** |
|||
* 文化程度【字典表】 |
|||
*/ |
|||
private String culture; |
|||
|
|||
/** |
|||
* 文化程度备注 |
|||
*/ |
|||
private String cultureRemakes; |
|||
|
|||
/** |
|||
* 特长【字典表】 |
|||
*/ |
|||
private String specialSkill; |
|||
|
|||
/** |
|||
* 兴趣爱好 |
|||
*/ |
|||
private String hobby; |
|||
|
|||
/** |
|||
* 兴趣爱好备注 |
|||
*/ |
|||
private String hobbyRemakes; |
|||
|
|||
/** |
|||
* 宗教信仰 |
|||
*/ |
|||
private String faith; |
|||
|
|||
/** |
|||
* 宗教信仰备注 |
|||
*/ |
|||
private String faithRemakes; |
|||
|
|||
/** |
|||
* 残疾类别【字典表】 |
|||
*/ |
|||
private String cjlb; |
|||
|
|||
/** |
|||
* 残疾登记(状况)【字典表】 |
|||
*/ |
|||
private String cjzk; |
|||
|
|||
/** |
|||
* 残疾证号 |
|||
*/ |
|||
private String cjzh; |
|||
|
|||
/** |
|||
* 残疾说明 |
|||
*/ |
|||
private String cjsm; |
|||
|
|||
/** |
|||
* 有无监护人【yes no】 |
|||
*/ |
|||
private String ynJdr; |
|||
|
|||
/** |
|||
* 有无技能特长【yes no】 |
|||
*/ |
|||
private String ynJntc; |
|||
|
|||
/** |
|||
* 有无劳动能力 |
|||
*/ |
|||
private String ynLdnl; |
|||
|
|||
/** |
|||
* 有无非义务教育阶段助学【yes no】 |
|||
*/ |
|||
private String ynFywjyjdzx; |
|||
|
|||
/** |
|||
* 所患大病 |
|||
*/ |
|||
private String shdb; |
|||
|
|||
/** |
|||
* 患大病时间 |
|||
*/ |
|||
private String dbsj; |
|||
|
|||
/** |
|||
* 所患慢性病 |
|||
*/ |
|||
private String shmxb; |
|||
|
|||
/** |
|||
* 患慢性病时间 |
|||
*/ |
|||
private String mxbsj; |
|||
|
|||
/** |
|||
* 是否参保 |
|||
*/ |
|||
private String isCb; |
|||
|
|||
/** |
|||
* 自付金额 |
|||
*/ |
|||
private String zfje; |
|||
|
|||
/** |
|||
* 救助金额 |
|||
*/ |
|||
private String jzje; |
|||
|
|||
/** |
|||
* 救助时间[yyyy-MM-dd] |
|||
*/ |
|||
private String jzsj; |
|||
|
|||
/** |
|||
* 享受救助明细序号 |
|||
*/ |
|||
private String jzmxxh; |
|||
|
|||
/** |
|||
* 健康信息备注 |
|||
*/ |
|||
private String healthRemakes; |
|||
|
|||
/** |
|||
* 工作单位 |
|||
*/ |
|||
private String gzdw; |
|||
|
|||
/** |
|||
* 职业 |
|||
*/ |
|||
private String zy; |
|||
|
|||
/** |
|||
* 离退休时间 |
|||
*/ |
|||
private String ltxsj; |
|||
|
|||
/** |
|||
* 工作信息备注 |
|||
*/ |
|||
private String workRemake; |
|||
|
|||
/** |
|||
* 退休金额 |
|||
*/ |
|||
private String txje; |
|||
|
|||
/** |
|||
* 月收入 |
|||
*/ |
|||
private String ysr; |
|||
|
|||
/** |
|||
* 是否经济低保 |
|||
*/ |
|||
private String isJjdb; |
|||
|
|||
/** |
|||
* 籍贯 |
|||
*/ |
|||
private String jg; |
|||
|
|||
/** |
|||
* 户籍所在地 |
|||
*/ |
|||
private String hjszd; |
|||
|
|||
/** |
|||
* 现居住地 |
|||
*/ |
|||
private String xjzd; |
|||
|
|||
/** |
|||
* 人户情况 |
|||
*/ |
|||
private String rhzk; |
|||
|
|||
/** |
|||
* 居住信息备注 |
|||
*/ |
|||
private String jzxxRemakes; |
|||
|
|||
/** |
|||
* 民族【字典表】 |
|||
*/ |
|||
private String mz; |
|||
|
|||
/** |
|||
* 与户主关系【字典表】 |
|||
*/ |
|||
private String yhzgx; |
|||
|
|||
/** |
|||
* 居住情况【字典表】 |
|||
*/ |
|||
private String jzqk; |
|||
|
|||
/** |
|||
* 婚姻状况【字典表】 |
|||
*/ |
|||
private String hyzk; |
|||
|
|||
/** |
|||
* 配偶情况【字典表】 |
|||
*/ |
|||
private String poqk; |
|||
|
|||
/** |
|||
* 有无赡养人 |
|||
*/ |
|||
private String ynSyr; |
|||
|
|||
/** |
|||
* 与赡养人关系【字典表】 |
|||
*/ |
|||
private String ysyrgx; |
|||
|
|||
/** |
|||
* 赡养人电话 |
|||
*/ |
|||
private String syrMobile; |
|||
|
|||
/** |
|||
* 家庭信息备注 |
|||
*/ |
|||
private String jtxxRemakes; |
|||
|
|||
/** |
|||
* 用户状态【0:正常;1:迁出;2:注销】 |
|||
*/ |
|||
private String status; |
|||
|
|||
/** |
|||
* 用户详细状态:01:新增、02:导入、03:迁入、04:新生、11:迁出、21死亡 |
|||
*/ |
|||
private String subStatus; |
|||
|
|||
|
|||
/** |
|||
* 删除标识 0.未删除 1.已删除 |
|||
*/ |
|||
private Integer delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
/** |
|||
* 预留字段1 |
|||
*/ |
|||
private String field1; |
|||
|
|||
/** |
|||
* 预留字段2 |
|||
*/ |
|||
private String field2; |
|||
|
|||
/** |
|||
* 预留字段3 |
|||
*/ |
|||
private String field3; |
|||
|
|||
/** |
|||
* 预留字段4 |
|||
*/ |
|||
private String field4; |
|||
|
|||
/** |
|||
* 预留字段5 |
|||
*/ |
|||
private String field5; |
|||
|
|||
/** |
|||
* 预留字段6 |
|||
*/ |
|||
private String field6; |
|||
|
|||
/** |
|||
* 预留字段7 |
|||
*/ |
|||
private String field7; |
|||
|
|||
/** |
|||
* 预留字段8 |
|||
*/ |
|||
private String field8; |
|||
|
|||
/** |
|||
* 预留字段9 |
|||
*/ |
|||
private String field9; |
|||
|
|||
/** |
|||
* 预留字段10 |
|||
*/ |
|||
private String field10; |
|||
} |
|||
@ -0,0 +1,79 @@ |
|||
|
|||
package com.epmet.commons.tools.utils.api.yt; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* desc:组织机构数据 实体类 |
|||
* @author liujianjun |
|||
*/ |
|||
@Data |
|||
public class OrgData implements Serializable { |
|||
|
|||
/** |
|||
* 联系人姓名 |
|||
*/ |
|||
private String contact; |
|||
/** |
|||
* 联系电话号码 |
|||
*/ |
|||
private String contactTelephoneNumber; |
|||
|
|||
/** |
|||
* 详细地址 |
|||
*/ |
|||
private String detailAddress; |
|||
|
|||
/** |
|||
* 组织机构第一名称 |
|||
*/ |
|||
private String firstNameOfOrganization; |
|||
|
|||
/** |
|||
* 组织机构全称 |
|||
*/ |
|||
private String nameOfOrganization; |
|||
|
|||
/** |
|||
* 排序号码 |
|||
*/ |
|||
private String orderNumber; |
|||
|
|||
/** |
|||
* 组织机构简称 |
|||
*/ |
|||
private String organizatioNabbreviation; |
|||
|
|||
/** |
|||
* 组织机构ID |
|||
*/ |
|||
private String organizationId; |
|||
|
|||
/** |
|||
* 组织机构级别 |
|||
*/ |
|||
private String organizationLevel; |
|||
|
|||
/** |
|||
* 组织机构路径 |
|||
*/ |
|||
private String organizationPath; |
|||
|
|||
/** |
|||
* 组织机构类型 |
|||
*/ |
|||
private String organizationType; |
|||
/** |
|||
* 注册类型 |
|||
*/ |
|||
private String registrationType; |
|||
/** |
|||
* 统一社会信用代码 |
|||
*/ |
|||
private String unifiedSocialCreditId; |
|||
|
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,199 @@ |
|||
package com.epmet.commons.tools.utils.api.yt; |
|||
|
|||
import com.fasterxml.jackson.core.JsonProcessingException; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import org.apache.commons.codec.binary.Base64; |
|||
import org.bouncycastle.jce.provider.BouncyCastleProvider; |
|||
|
|||
import javax.crypto.BadPaddingException; |
|||
import javax.crypto.Cipher; |
|||
import javax.crypto.IllegalBlockSizeException; |
|||
import javax.crypto.SecretKey; |
|||
import javax.crypto.spec.SecretKeySpec; |
|||
import java.nio.charset.Charset; |
|||
import java.nio.charset.StandardCharsets; |
|||
import java.security.InvalidKeyException; |
|||
import java.security.Security; |
|||
|
|||
/** |
|||
* 烟台的认证中心-国密sm4加解密 |
|||
*/ |
|||
public class SM4UtilsForYanTai { |
|||
private static String SM4_KEY = "yaweisoftware@xy"; |
|||
//编码格式
|
|||
private static final Charset encryptCharset = StandardCharsets.UTF_8; |
|||
|
|||
public enum Algorithm { |
|||
SM4("SM4","SM4","国密四,key长16byte"); |
|||
private String keyAlgorithm; |
|||
private String transformation; |
|||
private String description;//描述
|
|||
Algorithm(String keyAlgorithm, String transformation, String description) { |
|||
this.keyAlgorithm = keyAlgorithm; |
|||
this.transformation = transformation; |
|||
this.description = description; |
|||
} |
|||
public String getKeyAlgorithm() { |
|||
return this.keyAlgorithm; |
|||
} |
|||
public String getTransformation() { |
|||
return this.transformation; |
|||
} |
|||
public String getDescription() { |
|||
return this.description; |
|||
} |
|||
} |
|||
|
|||
private static final String PROVIDER_NAME = "BC"; |
|||
static { |
|||
Security.addProvider(new BouncyCastleProvider()); |
|||
} |
|||
|
|||
/** |
|||
* 自定字符串产生密钥 |
|||
* @param algorithm 加解密算法 |
|||
* @param keyStr 密钥字符串 |
|||
* @param charset 编码字符集 |
|||
* @return 密钥 |
|||
*/ |
|||
public static SecretKey genKeyByStr(Algorithm algorithm, String keyStr, Charset charset) { |
|||
return readKeyFromBytes(algorithm, keyStr.getBytes(charset)); |
|||
} |
|||
|
|||
/** |
|||
* 根据指定字节数组产生密钥 |
|||
* @param algorithm 加解密算法 |
|||
* @param keyBytes 密钥字节数组 |
|||
* @return 密钥 |
|||
*/ |
|||
public static SecretKey readKeyFromBytes(Algorithm algorithm, byte[] keyBytes) { |
|||
return new SecretKeySpec(keyBytes, algorithm.getKeyAlgorithm()); |
|||
} |
|||
|
|||
/****************************加密*********************************/ |
|||
/** |
|||
* 加密字符串,并进行base64编码 |
|||
* @param algorithm 加解密算法 |
|||
* @param key 密钥 |
|||
* @param data 明文 |
|||
* @param charset 编码字符集 |
|||
* @return 密文 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
*/ |
|||
public static String encryptBase64(Algorithm algorithm, SecretKey key, String data, Charset charset) throws InvalidKeyException { |
|||
return Base64.encodeBase64String(encrypt(algorithm, key, data.getBytes(charset))); |
|||
} |
|||
|
|||
/** |
|||
* 加密字节数组 |
|||
* @param algorithm 加解密算法 |
|||
* @param key 密钥 |
|||
* @param data 明文 |
|||
* @return 密文 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
*/ |
|||
public static byte[] encrypt(Algorithm algorithm, SecretKey key, byte[] data) throws InvalidKeyException { |
|||
try { |
|||
return cipherDoFinal(algorithm, Cipher.ENCRYPT_MODE, key, data); |
|||
} catch (BadPaddingException e) { |
|||
throw new RuntimeException(e);//明文没有具体格式要求,不会出错。所以这个异常不需要外部捕获。
|
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 加解密字节数组 |
|||
* @param algorithm 加解密算法 |
|||
* @param opmode 操作:1加密,2解密 |
|||
* @param key 密钥 |
|||
* @param data 数据 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
* @throws BadPaddingException 解密密文错误(加密模式没有) |
|||
*/ |
|||
private static byte[] cipherDoFinal(Algorithm algorithm, int opmode, SecretKey key, byte[] data) throws InvalidKeyException, BadPaddingException { |
|||
Cipher cipher; |
|||
try { |
|||
cipher = Cipher.getInstance(algorithm.getTransformation(), PROVIDER_NAME); |
|||
} catch (Exception e) { |
|||
//NoSuchAlgorithmException:加密算法名是本工具类提供的,如果错了业务没有办法处理。所以这个异常不需要外部捕获。
|
|||
//NoSuchProviderException:Provider是本工具类提供的,如果错了业务没有办法处理。所以这个异常不需要外部捕获。
|
|||
//NoSuchPaddingException:没有特定的填充机制,与环境有关,业务没有办法处理。所以这个异常不需要外部捕获。
|
|||
throw new RuntimeException(e); |
|||
} |
|||
cipher.init(opmode, key); |
|||
try { |
|||
return cipher.doFinal(data); |
|||
} catch (IllegalBlockSizeException e) { |
|||
throw new RuntimeException(e);//业务不需要将数据分块(好像由底层处理了),如果错了业务没有办法处理。所以这个异常不需要外部捕获。
|
|||
} |
|||
} |
|||
|
|||
/****************************解密*********************************/ |
|||
/** |
|||
* 对字符串先进行base64解码,再解密 |
|||
* @param algorithm 加解密算法 |
|||
* @param key 密钥 |
|||
* @param data 密文 |
|||
* @param charset 编码字符集 |
|||
* @return 明文 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
* @throws BadPaddingException 密文错误 |
|||
*/ |
|||
public static String decryptBase64(Algorithm algorithm, SecretKey key, String data, Charset charset) |
|||
throws InvalidKeyException, BadPaddingException { |
|||
return new String(decrypt(algorithm, key, Base64.decodeBase64(data)), charset); |
|||
} |
|||
|
|||
/** |
|||
* 解密字节数组 |
|||
* @param algorithm 加解密算法 |
|||
* @param key 密钥 |
|||
* @param data 密文 |
|||
* @return 明文 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
* @throws BadPaddingException 密文错误 |
|||
*/ |
|||
public static byte[] decrypt(Algorithm algorithm, SecretKey key, byte[] data) throws InvalidKeyException, BadPaddingException { |
|||
return cipherDoFinal(algorithm, Cipher.DECRYPT_MODE, key, data); |
|||
} |
|||
|
|||
public static String Encrypt(String data) throws InvalidKeyException { |
|||
SecretKey key = genKeyByStr(Algorithm.SM4, SM4_KEY, encryptCharset); |
|||
return encryptBase64(Algorithm.SM4, key, data, encryptCharset); |
|||
} |
|||
public static String Decrypt(String data) throws BadPaddingException, InvalidKeyException { |
|||
SecretKey key = genKeyByStr(Algorithm.SM4, SM4_KEY, encryptCharset); |
|||
return decryptBase64(Algorithm.SM4, key, data, encryptCharset); |
|||
} |
|||
//加密
|
|||
public static String dealEncryptData(Object data) throws JsonProcessingException, InvalidKeyException { |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
String dataString = ""; |
|||
try { |
|||
if(data instanceof String){ |
|||
dataString = (String) data; |
|||
}else { |
|||
dataString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data); |
|||
} |
|||
String dataEncrypt = Encrypt(dataString); |
|||
return dataEncrypt; |
|||
}catch (Exception e){ |
|||
return dataString; |
|||
} |
|||
} |
|||
//解密
|
|||
public static String dealDecryptData(Object data) throws JsonProcessingException, BadPaddingException, InvalidKeyException { |
|||
String dataString = ""; |
|||
try { |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
if (data instanceof String) { |
|||
dataString = (String) data; |
|||
} else { |
|||
dataString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data); |
|||
} |
|||
String dataDecrypt = Decrypt(dataString); |
|||
return dataDecrypt; |
|||
}catch (Exception e){ |
|||
return dataString; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,184 @@ |
|||
package com.epmet.commons.tools.utils.api.yt; |
|||
|
|||
|
|||
import org.bouncycastle.jce.provider.BouncyCastleProvider; |
|||
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; |
|||
|
|||
import javax.crypto.Cipher; |
|||
import javax.crypto.KeyGenerator; |
|||
import javax.crypto.spec.SecretKeySpec; |
|||
import java.security.*; |
|||
import java.util.Arrays; |
|||
|
|||
/** |
|||
* sm4加密算法工具类 |
|||
* |
|||
* @explain sm4加密、解密与加密结果验证 可逆算法 |
|||
* @Autor:jingyao |
|||
*/ |
|||
public class TestMs4 { |
|||
static { |
|||
Security.addProvider(new BouncyCastleProvider()); |
|||
} |
|||
|
|||
private static final String ENCODING = "UTF-8"; |
|||
public static final String ALGORITHM_NAME = "SM4"; |
|||
// 加密算法/分组加密模式/分组填充方式
|
|||
// PKCS5Padding-以8个字节为一组进行分组加密
|
|||
// 定义分组加密模式使用:PKCS5Padding
|
|||
public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding"; |
|||
// 128-32位16进制;256-64位16进制
|
|||
public static final int DEFAULT_KEY_SIZE = 128; |
|||
|
|||
/** |
|||
* 生成ECB暗号 |
|||
* |
|||
* @param algorithmName 算法名称 |
|||
* @param mode 模式 |
|||
* @param key |
|||
* @return |
|||
* @throws Exception |
|||
* @explain ECB模式(电子密码本模式:Electronic codebook) |
|||
*/ |
|||
private static Cipher generateEcbCipher(String algorithmName, int mode, byte[] key) throws Exception { |
|||
Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME); |
|||
Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME); |
|||
cipher.init(mode, sm4Key); |
|||
return cipher; |
|||
} |
|||
|
|||
/** |
|||
* 自动生成密钥 |
|||
* |
|||
* @return |
|||
* @throws NoSuchAlgorithmException |
|||
* @throws NoSuchProviderException |
|||
* @explain |
|||
*/ |
|||
public static byte[] generateKey() throws Exception { |
|||
return generateKey(DEFAULT_KEY_SIZE); |
|||
} |
|||
|
|||
|
|||
//加密******************************************
|
|||
|
|||
/** |
|||
* @param keySize |
|||
* @return |
|||
* @throws Exception |
|||
* @explain 系统产生秘钥 |
|||
*/ |
|||
public static byte[] generateKey(int keySize) throws Exception { |
|||
KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, BouncyCastleProvider.PROVIDER_NAME); |
|||
kg.init(keySize, new SecureRandom()); |
|||
return kg.generateKey().getEncoded(); |
|||
} |
|||
|
|||
/** |
|||
* sm4加密 |
|||
* |
|||
* @param hexKey 16进制密钥(忽略大小写) |
|||
* @param paramStr 待加密字符串 |
|||
* @return 返回16进制的加密字符串 |
|||
* @throws Exception |
|||
* @explain 加密模式:ECB 密文长度不固定,会随着被加密字符串长度的变化而变化 |
|||
*/ |
|||
public static String encryptEcb(String hexKey, String paramStr) throws Exception { |
|||
String cipherText = ""; |
|||
// 16进制字符串-->byte[]
|
|||
byte[] keyData = ByteUtils.fromHexString(hexKey); |
|||
// String-->byte[]
|
|||
byte[] srcData = paramStr.getBytes(ENCODING); |
|||
// 加密后的数组
|
|||
byte[] cipherArray = encrypt_Ecb_Padding(keyData, srcData); |
|||
// byte[]-->hexString
|
|||
cipherText = ByteUtils.toHexString(cipherArray); |
|||
return cipherText; |
|||
} |
|||
|
|||
/** |
|||
* 加密模式之Ecb |
|||
* |
|||
* @param key |
|||
* @param data |
|||
* @return |
|||
* @throws Exception |
|||
*/ |
|||
public static byte[] encrypt_Ecb_Padding(byte[] key, byte[] data) throws Exception { |
|||
Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key);//声称Ecb暗号,通过第二个参数判断加密还是解密
|
|||
return cipher.doFinal(data); |
|||
} |
|||
|
|||
//解密****************************************
|
|||
|
|||
/** |
|||
* sm4解密 |
|||
* |
|||
* @param hexKey 16进制密钥 |
|||
* @param cipherText 16进制的加密字符串(忽略大小写) |
|||
* @return 解密后的字符串 |
|||
* @throws Exception |
|||
* @explain 解密模式:采用ECB |
|||
*/ |
|||
public static String decryptEcb(String hexKey, String cipherText) throws Exception { |
|||
// 用于接收解密后的字符串
|
|||
String decryptStr = ""; |
|||
// hexString-->byte[]
|
|||
byte[] keyData = ByteUtils.fromHexString(hexKey); |
|||
// hexString-->byte[]
|
|||
byte[] cipherData = ByteUtils.fromHexString(cipherText); |
|||
// 解密
|
|||
byte[] srcData = decrypt_Ecb_Padding(keyData, cipherData); |
|||
// byte[]-->String
|
|||
decryptStr = new String(srcData, ENCODING); |
|||
return decryptStr; |
|||
} |
|||
|
|||
/** |
|||
* 解密 |
|||
* |
|||
* @param key |
|||
* @param cipherText |
|||
* @return |
|||
* @throws Exception |
|||
* @explain |
|||
*/ |
|||
public static byte[] decrypt_Ecb_Padding(byte[] key, byte[] cipherText) throws Exception { |
|||
Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, key);//生成Ecb暗号,通过第二个参数判断加密还是解密
|
|||
return cipher.doFinal(cipherText); |
|||
} |
|||
|
|||
/** |
|||
* 校验加密前后的字符串是否为同一数据 |
|||
* |
|||
* @param hexKey 16进制密钥(忽略大小写) |
|||
* @param cipherText 16进制加密后的字符串 |
|||
* @param paramStr 加密前的字符串 |
|||
* @return 是否为同一数据 |
|||
* @throws Exception |
|||
* @explain |
|||
*/ |
|||
public static boolean verifyEcb(String hexKey, String cipherText, String paramStr) throws Exception { |
|||
// 用于接收校验结果
|
|||
boolean flag = false; |
|||
// hexString-->byte[]
|
|||
byte[] keyData = ByteUtils.fromHexString(hexKey); |
|||
// 将16进制字符串转换成数组
|
|||
byte[] cipherData = ByteUtils.fromHexString(cipherText); |
|||
// 解密
|
|||
byte[] decryptData = decrypt_Ecb_Padding(keyData, cipherData); |
|||
// 将原字符串转换成byte[]
|
|||
byte[] srcData = paramStr.getBytes(ENCODING); |
|||
// 判断2个数组是否一致
|
|||
flag = Arrays.equals(decryptData, srcData); |
|||
return flag; |
|||
} |
|||
|
|||
public static void main(String[] args) throws Exception { |
|||
String text = "5d22ea44c7599a48f0d4446b1b7fbb4bb8353922df437d39c3a38549c0f2549cbd021ada00a8be83027ae06203c3daea2eedc5bd0875c7e509c7049045c5349577f2c21bcec328a5ea0bf341191e5bdba978566dddd16f1cf1928ff5cbd826dd33289fb45a8a04585f1f24ab04f59426371a5a0a0f2ee3e7b00d2bdfba7810524ce4c33130eda077546fa4c4191d0117f7a44e1cadac6c69a7d437653be1f958a459e0f025d471e09ab4636c38013032948ffb0827040ed6f3436be090f545186928a7b0b2bfc65782452606607ce8555ba130caacad73998da704428a07276a2699889c9872eebba5de8b72cdbe88705483293b00ab3ecb3aa57d283a4ecab40b71bc0a10e9ec626f07b2293255349fb2270d37e81c5c3d0de0b0f0706ed1872f60f039ce2e51effc39aef9747d67457e072cf3170a9c19589c1bab1a7d9d80"; |
|||
String s = TestMs4.decryptEcb("dbcff4c9f4774e6cb56080f279149d59", text); |
|||
System.out.println(s); |
|||
} |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,50 @@ |
|||
|
|||
package com.epmet.commons.tools.utils.api.yt; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* desc:认证中心-用户信息 |
|||
* @author liujianjun |
|||
*/ |
|||
@Data |
|||
public class UserData implements Serializable { |
|||
|
|||
/** |
|||
* 性别:todo 不知道是什么值 |
|||
*/ |
|||
private String gender; |
|||
/** |
|||
* 手机号码 |
|||
*/ |
|||
private String mobileTelephoneNumber; |
|||
private String orderNumber; |
|||
/** |
|||
* 职务 |
|||
*/ |
|||
private String position; |
|||
/** |
|||
* 职级 |
|||
*/ |
|||
private String positionLevel; |
|||
/** |
|||
* 电话号码 |
|||
*/ |
|||
private String telephoneNumber; |
|||
/** |
|||
* 用户编码/id |
|||
*/ |
|||
private String userGuid; |
|||
/** |
|||
* 用户姓名 |
|||
*/ |
|||
private String userName; |
|||
/** |
|||
* 人员路径 |
|||
*/ |
|||
private String userPath; |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,282 @@ |
|||
package com.epmet.commons.tools.utils.api.yt; |
|||
|
|||
import com.alibaba.fastjson.JSON; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.epmet.commons.tools.constant.NumConstant; |
|||
import com.epmet.commons.tools.exception.EpmetErrorCode; |
|||
import com.epmet.commons.tools.exception.EpmetException; |
|||
import com.epmet.commons.tools.utils.HttpClientManager; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.fasterxml.jackson.core.JsonProcessingException; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.jetbrains.annotations.NotNull; |
|||
|
|||
import javax.crypto.BadPaddingException; |
|||
import java.security.InvalidKeyException; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* desc: |
|||
* |
|||
* @author: LiuJanJun |
|||
* @date: 2022/10/17 3:57 下午 |
|||
* @version: 1.0 |
|||
*/ |
|||
@Slf4j |
|||
public class YantaiApi { |
|||
private static final String SSO_SERVER = "http://172.20.46.155:8080/sso/"; |
|||
/** |
|||
* 相当于 appKey |
|||
*/ |
|||
private static final String CLIENT_ID = "1000009"; |
|||
/** |
|||
* 相当于 appSecret 用于解密 他们重定向回来的code 解密他们的token 获取用户嘻嘻 |
|||
*/ |
|||
private static final String CLIENT_SECRET = "a1f9879119bc4080ab5575f832b7d98b"; |
|||
/** |
|||
* 调用sso后台api接口的 秘钥 |
|||
*/ |
|||
private static final String SSO_API_TOKEN = "iJCDUgCBV/Zk5FkkaxLypA=="; |
|||
/** |
|||
* 政务网地址 |
|||
*/ |
|||
private static final String SSO_BACKGROUND_SERVER_URL = "http://172.20.46.155:8082/"; |
|||
/** |
|||
* 互联网地址 |
|||
*/ |
|||
//private static final String SSO_BACKGROUND_SERVER_URL = "http://120.220.248.247:8081/";
|
|||
|
|||
/** |
|||
* desc:根据组织id获取下级组织 |
|||
* |
|||
* @param organizationId |
|||
* @return |
|||
*/ |
|||
public static List<OrgData> getChildOuInfoByGuid(String organizationId) { |
|||
try { |
|||
if (StringUtils.isBlank(organizationId)) { |
|||
throw new EpmetException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg()); |
|||
} |
|||
//加密
|
|||
String organizationIdEn = SM4UtilsForYanTai.dealEncryptData(organizationId); |
|||
//pwd = URLEncoder.encode(pwd, "UTF-8");
|
|||
String url = SSO_BACKGROUND_SERVER_URL + "person/ouinfo/getChildOuInfoByGuid"; |
|||
|
|||
Map<String, Object> paramMap = new HashMap<>(); |
|||
paramMap.put("organizationId",organizationIdEn); |
|||
|
|||
log.info("getChildOuInfoByGuid request param:{} url:{}",paramMap, url); |
|||
Result<String> result = HttpClientManager.getInstance().sendGet(url, paramMap, getApiHeaderMap()); |
|||
log.info("getChildOuInfoByGuid request result:{}", result); |
|||
if (!result.success()){ |
|||
return new ArrayList<>(); |
|||
} |
|||
JSONObject jsonObject = JSONObject.parseObject(result.getData()); |
|||
String secondCode = jsonObject.getString("code"); |
|||
String secondMessage = jsonObject.getString("message"); |
|||
if (!"200".equals(secondCode)) { |
|||
log.warn("getChildOuInfoByGuid 接口错误"); |
|||
return new ArrayList<>(); |
|||
} |
|||
//解密
|
|||
String data = SM4UtilsForYanTai.dealDecryptData(jsonObject.getString("data")); |
|||
List<OrgData> orgData = JSON.parseArray(data, OrgData.class); |
|||
log.info("getChildOuInfoByGuid request real result:{}", JSON.toJSONString(orgData)); |
|||
return orgData; |
|||
} catch (Exception e) { |
|||
log.error("getChildOuInfoByGuid exception", e); |
|||
} |
|||
return new ArrayList<>(); |
|||
} |
|||
|
|||
/** |
|||
* desc:根据组织id获取下级组织 |
|||
* |
|||
* @param organizationId |
|||
* @return |
|||
*/ |
|||
public static List<UserData> getUserByOuGuid(String organizationId) { |
|||
try { |
|||
if (StringUtils.isBlank(organizationId)) { |
|||
throw new EpmetException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg()); |
|||
} |
|||
//加密
|
|||
String organizationIdEn = SM4UtilsForYanTai.dealEncryptData(organizationId); |
|||
//pwd = URLEncoder.encode(pwd, "UTF-8");
|
|||
String url = SSO_BACKGROUND_SERVER_URL + "person/userInfo/getUserByOuGuid"; |
|||
|
|||
|
|||
Map<String, Object> paramMap = new HashMap<>(); |
|||
paramMap.put("organizationId",organizationIdEn); |
|||
log.info("getUserByOuGuid request param: url:{},param:{}", url, paramMap); |
|||
Result<String> result = HttpClientManager.getInstance().sendGet(url, paramMap, getApiHeaderMap()); |
|||
log.info("getUserByOuGuid request result:{}", result); |
|||
if (!result.success()){ |
|||
return new ArrayList<>(); |
|||
} |
|||
JSONObject jsonObject = JSONObject.parseObject(result.getData()); |
|||
String secondCode = jsonObject.getString("code"); |
|||
String secondMessage = jsonObject.getString("message"); |
|||
if (!"200".equals(secondCode)) { |
|||
log.warn("getUserByOuGuid 接口错误"); |
|||
return new ArrayList<>(); |
|||
} |
|||
//解密
|
|||
String data = SM4UtilsForYanTai.dealDecryptData(jsonObject.getString("data")); |
|||
List<UserData> userData = JSON.parseArray(data, UserData.class); |
|||
log.info("getUserByOuGuid request real result:{}", JSON.toJSONString(userData)); |
|||
return userData; |
|||
} catch (Exception e) { |
|||
log.error("getUserByOuGuid exception", e); |
|||
} |
|||
return new ArrayList<>(); |
|||
} |
|||
|
|||
/** |
|||
* desc:根据组织id获取下级组织 |
|||
* |
|||
* @param code |
|||
* @return |
|||
*/ |
|||
public static YantaiSSOUser getLoginToken(String code) { |
|||
try { |
|||
if (StringUtils.isBlank(code)) { |
|||
throw new EpmetException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg(), EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg()); |
|||
} |
|||
//加密
|
|||
String organizationIdEn = SM4UtilsForYanTai.dealEncryptData(code); |
|||
//pwd = URLEncoder.encode(pwd, "UTF-8");
|
|||
log.info("getLoginToken加密组织Id = " + organizationIdEn); |
|||
String url = SSO_SERVER + "logintoken?client_id=" + CLIENT_ID + "&client_code=" + code; |
|||
|
|||
Map<String, Object> headerMap = new HashMap<>(); |
|||
Map<String, Object> paramMap = new HashMap<>(); |
|||
log.info("getUserByOuGuid request param: url:{},header:{}", url, headerMap); |
|||
Result<String> result = HttpClientManager.getInstance().sendGet(url, paramMap, headerMap); |
|||
if (!result.success() || StringUtils.isBlank(result.getData())) { |
|||
log.info("getUserByOuGuid fail result:{}", JSON.toJSONString(result)); |
|||
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取token为空", "获取token为空"); |
|||
} |
|||
log.info("getUserByOuGuid request result:{}", result); |
|||
JSONObject jsonObject = JSONObject.parseObject(result.getData()); |
|||
//解密
|
|||
String errcode = jsonObject.getString("errcode"); |
|||
if (!NumConstant.ZERO_STR.equals(errcode)) { |
|||
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取token失败", "获取token失败"); |
|||
} |
|||
String sencondData = jsonObject.getString("data"); |
|||
log.info("getLoginToken jiami data:{}", sencondData); |
|||
//String data = SM4UtilsForYanTai.dealDecryptData(sencondData);
|
|||
|
|||
|
|||
String data = TestMs4.decryptEcb(CLIENT_SECRET, sencondData); |
|||
log.info("getLoginToken jiemi data:{}", sencondData); |
|||
YantaiSSOUser userData = JSON.parseObject(data, YantaiSSOUser.class); |
|||
log.info("getUserByOuGuid request real result:{}", JSON.toJSONString(userData)); |
|||
String userInfoMobile = getUserInfoMobile(userData.getUserGuid()); |
|||
userData.setMobile(userInfoMobile); |
|||
return userData; |
|||
} catch (Exception e) { |
|||
log.error("getUserByOuGuid exception", e); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
public static String getUserInfoMobile(String userId) { |
|||
try { |
|||
|
|||
String userIdEn = SM4UtilsForYanTai.dealEncryptData(userId); |
|||
|
|||
String serverUrl = SSO_BACKGROUND_SERVER_URL + "person/userInfo/getUserByUserGuid"; |
|||
//String serverUrl = "http://120.220.248.247:8081/person/userInfo/getUserByUserGuid";
|
|||
Map<String, Object> param = new HashMap<>(); |
|||
param.put("userGuid", userIdEn); |
|||
|
|||
Result<String> result = HttpClientManager.getInstance().sendGet(serverUrl, param, getApiHeaderMap()); |
|||
System.out.println(JSON.toJSONString(result)); |
|||
if (!result.success() || StringUtils.isBlank(result.getData())) { |
|||
log.info("getUserInfoMobile fail result:{}", JSON.toJSONString(result)); |
|||
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取用户信息失败", "获取用户信息失败"); |
|||
} |
|||
String data = result.getData(); |
|||
log.info("getUserInfoMobile jiami data:{}", JSON.parseObject(data)); |
|||
JSONObject jsonObject = JSON.parseObject(data); |
|||
String secondCode = jsonObject.getString("code"); |
|||
String secondMessage = jsonObject.getString("message"); |
|||
if (!"200".equals(secondCode)) { |
|||
throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "获取人员信息接口返回失败" + secondMessage, "获取人员信息接口返回失败" + secondMessage); |
|||
} |
|||
String data1 = SM4UtilsForYanTai.dealDecryptData(jsonObject.getString("data")); |
|||
String telephoneNumber = JSON.parseObject(data1).getString("mobileTelephoneNumber"); |
|||
log.info("getUserInfoMobile jiemi data:{}", telephoneNumber); |
|||
return telephoneNumber; |
|||
} catch (Exception e) { |
|||
log.error("getUserInfoMobile exception", e); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
@NotNull |
|||
private static Map<String, Object> getApiHeaderMap() { |
|||
Map<String, Object> headerMap = new HashMap<>(); |
|||
try { |
|||
JSONObject token = new JSONObject(); |
|||
token.put("token", SSO_API_TOKEN); |
|||
// token.put("token","iJCDUgCBV/Zk5FkkaxLypA==");
|
|||
token.put("expiration", System.currentTimeMillis()); |
|||
|
|||
String tokanStr = SM4UtilsForYanTai.dealEncryptData(token.toString()); |
|||
headerMap.put("Authorization", "Bearer " + tokanStr); |
|||
} catch (Exception e) { |
|||
log.error("getApiHeaderMap exception", e); |
|||
} |
|||
return headerMap; |
|||
} |
|||
|
|||
public static void main(String[] args) throws BadPaddingException, InvalidKeyException, JsonProcessingException { |
|||
|
|||
//testGetUserByUserId();
|
|||
|
|||
//code只能用一次
|
|||
//getLoginToken("0d554bccfbac4be3846d643252daf92b");
|
|||
|
|||
String organizationId = "44e05de9-34fa-48f6-b89f-02838d792cf9"; |
|||
List<OrgData> childOuInfoByGuid = getChildOuInfoByGuid(organizationId); |
|||
System.out.println("childOuInfoByGuid:"+JSON.toJSONString(childOuInfoByGuid)); |
|||
//先用他说的有人的组织id联调
|
|||
//String orgId = "2b271845-ed51-48aa-9935-00b9e7e06311";
|
|||
//orgId = "2b271845-ed51-48aa-9935-00b9e7e05778";
|
|||
List<UserData> userByOuGuid = getUserByOuGuid(organizationId); |
|||
System.out.println("getUserByOuGuid:"+JSON.toJSONString(userByOuGuid)); |
|||
|
|||
Map<String, Object> apiHeaderMap = getApiHeaderMap(); |
|||
System.out.println(apiHeaderMap); |
|||
//testGetUserByUserId();
|
|||
} |
|||
|
|||
private static void testGetUserByUserId() throws JsonProcessingException, InvalidKeyException, BadPaddingException { |
|||
String testUserId = "0ffd76e2-27b5-4b33-be9a-186f9f878bf1"; |
|||
|
|||
String serverUrl = SSO_BACKGROUND_SERVER_URL +"person/userInfo/getUserByUserGuid"; |
|||
//String serverUrl = "http://120.220.248.247:8081/person/userInfo/getUserByUserGuid";
|
|||
Map<String, Object> param = new HashMap<>(); |
|||
param.put("userGuid", SM4UtilsForYanTai.dealEncryptData(testUserId)); |
|||
Result<String> stringResult = HttpClientManager.getInstance().sendGet(serverUrl, param, getApiHeaderMap()); |
|||
System.out.println(JSON.toJSONString(stringResult)); |
|||
|
|||
String data = stringResult.getData(); |
|||
JSONObject jsonObject = JSON.parseObject(data); |
|||
String secondCode = jsonObject.getString("code"); |
|||
String secondMessage = jsonObject.getString("message"); |
|||
System.out.println(secondCode); |
|||
System.out.println(secondMessage); |
|||
String data1 = SM4UtilsForYanTai.dealDecryptData(jsonObject.getString("data")); |
|||
System.out.println("======" + data1); |
|||
String s = SM4UtilsForYanTai.dealDecryptData("EsOeQX+A8+GG26lzLnuKeuylkBDRFcTbF+gE/jURIzddlVI8RToQQhzK4EHy0WfpS/L4dSAJC93UyVLJhj+r/pup2RFq/GjpH7Md+1Mjg3dM+eyDuGql71bUrldQwJXYnHrQm3Mn7tk5m2eLhEVNkFvdELjuy3Kg8YihZXf2Sox+kxtmK4DSIn/gxhVCoUneWeL0cA6JGHI6jNuq97rzgcNK3Mwen8MxOoWP3n3r+kIpwZCwIlL70MrBjIZ6FHIhcxpqL82gpLSe1K0TFgeWw+9PMo1yv4cGZn7rU86TDlQFoDP86dVa1jrBoyUmW/vvLXrMKwfBaiv9/EUzcCLZWYxEwH93n0X/NYCYem3pfv4uXk5A7/D+Npgj9OKCEIz0ROn0UW5NiXI5Vibz0dywaq4sfsR/LiwjV81QOGY9tsHzN2+MnyTVpQg1l7looNnq1j+wwLneS0aDmbTqBLEn/baph/Hnr2L/9HYpWfXkhz93XRNAdsbxhXdG5ZIiJSwNasHinPR3e2Hmn/02GOsBPFUifbyNUtslt4RS/gwboonBoXz8wrmXi+PfzUXwN8f2CKdBNEHl72USp70NtBSJUPAkHdXZEQPgGRped63Z9GA="); |
|||
System.out.println("sssssss:" + s); |
|||
} |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
|
|||
package com.epmet.commons.tools.utils.api.yt; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* sso:认证中心 用户信息 |
|||
* @author liujianjun |
|||
*/ |
|||
@Data |
|||
public class YantaiSSOUser implements Serializable { |
|||
|
|||
private static final long serialVersionUID = -2794280342919451106L; |
|||
|
|||
/** |
|||
* 他说这个是手机号 |
|||
*/ |
|||
private String clientId; |
|||
private String departmentCode; |
|||
private String expirationTime; |
|||
private String ip; |
|||
private String issueTime; |
|||
private String registerGuid; |
|||
private String registerName; |
|||
private String userGuid; |
|||
private String userName; |
|||
|
|||
/** |
|||
* 二次请求结果 |
|||
*/ |
|||
private String mobile; |
|||
|
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
package com.epmet.task; |
|||
|
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.feign.ThirdOpenFeignClient; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
/** |
|||
* @author zxc |
|||
* @dscription 拉取yt用户信息和组织信息 |
|||
*/ |
|||
@Slf4j |
|||
@Component("YTUserAndOrgPullTask") |
|||
public class YTUserAndOrgPullTask implements ITask { |
|||
|
|||
@Autowired |
|||
private ThirdOpenFeignClient thirdOpenFeignClient; |
|||
|
|||
@Override |
|||
public void run(String params) { |
|||
Result<Boolean> yanTaiOrgInfo = thirdOpenFeignClient.getYanTaiOrgInfo("44e05de9-34fa-48f6-b89f-02838d792cf9"); |
|||
if (yanTaiOrgInfo.success()) { |
|||
log.info("yt拉取组织信息定时任务执行成功"); |
|||
} else { |
|||
log.error("yt拉取组织信息定时任务执行失败:" + yanTaiOrgInfo.getMsg()); |
|||
} |
|||
|
|||
Result<Boolean> yanTaiUserInfo = thirdOpenFeignClient.getYanTaiUserInfo("44e05de9-34fa-48f6-b89f-02838d792cf9"); |
|||
if (yanTaiUserInfo.success()) { |
|||
log.info("yt拉取用户信息定时任务执行成功"); |
|||
} else { |
|||
log.error("yt拉取用户信息定时任务执行失败:" + yanTaiUserInfo.getMsg()); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,139 @@ |
|||
package com.epmet.dto; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
import lombok.Data; |
|||
|
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
@Data |
|||
public class DataSyncOrgDataDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键ID |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 联系人姓名 |
|||
*/ |
|||
private String contact; |
|||
|
|||
/** |
|||
* 联系电话号码 |
|||
*/ |
|||
private String contacttelephoneNumber; |
|||
|
|||
/** |
|||
* 详细地址 |
|||
*/ |
|||
private String detailAddress; |
|||
|
|||
/** |
|||
* 组织机构第一名称 |
|||
*/ |
|||
private String firstnameofOrganization; |
|||
|
|||
/** |
|||
* 组织机构全称 |
|||
*/ |
|||
private String nameofOrganization; |
|||
|
|||
/** |
|||
* 排序号码 |
|||
*/ |
|||
private String orderNumber; |
|||
|
|||
/** |
|||
* 组织机构简称 |
|||
*/ |
|||
private String organizatioNabbreviation; |
|||
|
|||
/** |
|||
* 组织机构ID |
|||
*/ |
|||
private String organizationId; |
|||
|
|||
/** |
|||
* 组织机构级别 |
|||
*/ |
|||
private String organizationLevel; |
|||
|
|||
/** |
|||
* 组织机构路径 |
|||
*/ |
|||
private String organizationPath; |
|||
|
|||
/** |
|||
* 组织机构类型 |
|||
*/ |
|||
private String organizationType; |
|||
|
|||
/** |
|||
* 注册类型 |
|||
*/ |
|||
private String registrationType; |
|||
|
|||
/** |
|||
* 统一社会信用代码 |
|||
*/ |
|||
private String unifiedsocialcreditId; |
|||
|
|||
/** |
|||
* 删除标识 0.未删除 1.已删除 |
|||
*/ |
|||
private Integer delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
/** |
|||
* 客户id;烟台id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 上级组织机构id:ORGANIZATION_ID; 根级组织赋值0 |
|||
*/ |
|||
private String pid; |
|||
|
|||
/** |
|||
* 上级组织机构名称:ORGANIZATIO_NABBREVIATION |
|||
*/ |
|||
private String parentOrgName; |
|||
|
|||
/** |
|||
* 所有上级组织。不包含本身! |
|||
*/ |
|||
private String pids; |
|||
|
|||
} |
|||
@ -0,0 +1,124 @@ |
|||
package com.epmet.dto; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
import lombok.Data; |
|||
|
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
@Data |
|||
public class DataSyncUserDataDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键ID |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 性别:0未知1男2女 |
|||
*/ |
|||
private String gender; |
|||
|
|||
/** |
|||
* 手机号码 |
|||
*/ |
|||
private String mobileTelephoneNumber; |
|||
|
|||
/** |
|||
* 排序号码 |
|||
*/ |
|||
private String orderNumber; |
|||
|
|||
/** |
|||
* 职务 |
|||
*/ |
|||
private String position; |
|||
|
|||
/** |
|||
* 职级 |
|||
*/ |
|||
private String positionLevel; |
|||
|
|||
/** |
|||
* 电话号码 |
|||
*/ |
|||
private String telephoneNumber; |
|||
|
|||
/** |
|||
* 统一用户编码 |
|||
*/ |
|||
private String userGuid; |
|||
|
|||
/** |
|||
* 用户姓名 |
|||
*/ |
|||
private String userName; |
|||
|
|||
/** |
|||
* 人员路径 |
|||
*/ |
|||
private String userPath; |
|||
|
|||
/** |
|||
* data_sync_org_data.组织机构ID; |
|||
*/ |
|||
private String organizationId; |
|||
|
|||
/** |
|||
* 删除标识 0.未删除 1.已删除 |
|||
*/ |
|||
private Integer delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
/** |
|||
* 客户id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 0未创建、1已创建 |
|||
*/ |
|||
private String status; |
|||
|
|||
/** |
|||
* customer_staff.userId |
|||
*/ |
|||
private String staffId; |
|||
|
|||
/** |
|||
* 备注;目前为空 |
|||
*/ |
|||
private String remark; |
|||
|
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
package com.epmet.dto.form.yantai; |
|||
|
|||
import com.epmet.commons.tools.validator.group.AddGroup; |
|||
import lombok.Data; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
|
|||
/** |
|||
* @Description 工作端新增完用户后,需要调用此接口,更新data_sync_user_data |
|||
* @Author yzm |
|||
* @Date 2022/10/18 13:54 |
|||
*/ |
|||
@Data |
|||
public class YtSyncStaffIdFormDTO { |
|||
/** |
|||
* 客户ID |
|||
*/ |
|||
@NotBlank(message = "customerId不能为空",groups = AddGroup.class) |
|||
private String customerId; |
|||
/** |
|||
* 人员ID |
|||
*/ |
|||
@NotBlank(message = "staffId不能为空",groups = AddGroup.class) |
|||
private String staffId; |
|||
|
|||
@NotBlank(message = "name不能为空",groups = AddGroup.class) |
|||
private String name; |
|||
|
|||
@NotBlank(message = "mobile不能为空",groups = AddGroup.class) |
|||
private String mobile; |
|||
|
|||
@NotBlank(message = "当前操作人id不能为空",groups = AddGroup.class) |
|||
private String operUserId; |
|||
|
|||
} |
|||
|
|||
@ -0,0 +1,36 @@ |
|||
package com.epmet.dto.form.yantai; |
|||
|
|||
import com.epmet.commons.tools.dto.form.PageFormDTO; |
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @Description 运营端,统一认证 列表查询入参 |
|||
* @Author yzm |
|||
* @Date 2022/10/18 11:12 |
|||
*/ |
|||
@Data |
|||
public class YtUserPageFormDTO extends PageFormDTO { |
|||
/** |
|||
* 0本机 |
|||
* 1本级及下级 |
|||
*/ |
|||
private String type; |
|||
/** |
|||
* 组织id |
|||
* data_sync_org_data.ORGANIZATION_ID |
|||
*/ |
|||
private String orgId; |
|||
/** |
|||
* 姓名 |
|||
*/ |
|||
private String name; |
|||
/** |
|||
* 手机号 |
|||
*/ |
|||
private String mobile; |
|||
/** |
|||
* 0未创建、已创建 |
|||
*/ |
|||
private String status; |
|||
} |
|||
|
|||
@ -0,0 +1,23 @@ |
|||
package com.epmet.dto.result.yantai; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @Description |
|||
* @Author yzm |
|||
* @Date 2022/10/18 14:21 |
|||
*/ |
|||
@Data |
|||
public class DataSyncOrgDataDTO implements Serializable { |
|||
private static final long serialVersionUID = -3011177998045994250L; |
|||
private String orgId; |
|||
private String orgName; |
|||
private String pid; |
|||
/** |
|||
* true代表有下级 |
|||
*/ |
|||
private Boolean haveChild; |
|||
} |
|||
|
|||
@ -0,0 +1,56 @@ |
|||
package com.epmet.dto.result.yantai; |
|||
|
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @Description 运营端,统一认证 列表返参 |
|||
* @Author yzm |
|||
* @Date 2022/10/18 11:53 |
|||
*/ |
|||
@Data |
|||
public class YtUserPageResDTO { |
|||
/** |
|||
* 统一用户编码 |
|||
*/ |
|||
private String userGuid; |
|||
/** |
|||
* data_sync_org_data.组织机构ID; |
|||
*/ |
|||
private String organizationId; |
|||
/** |
|||
* XXX-XXX |
|||
*/ |
|||
private String orgName; |
|||
/** |
|||
* 用户姓名 |
|||
*/ |
|||
private String userName; |
|||
|
|||
/** |
|||
* 电话号码 |
|||
*/ |
|||
private String telephoneNumber; |
|||
|
|||
/** |
|||
* 性别:0未知1男2女 |
|||
*/ |
|||
private String gender; |
|||
|
|||
/** |
|||
* 0未创建、已创建 |
|||
*/ |
|||
private String status; |
|||
|
|||
/** |
|||
* customer_staff.userId |
|||
*/ |
|||
private String staffId; |
|||
|
|||
/** |
|||
* 备注;目前为空 |
|||
*/ |
|||
private String remark; |
|||
|
|||
private String customerId; |
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
package com.epmet.constant; |
|||
|
|||
/** |
|||
* @Author zxc |
|||
* @DateTime 2022/10/18 16:43 |
|||
* @DESC |
|||
*/ |
|||
public interface YanTaiConstant { |
|||
|
|||
String YT_CUSTOMER_ID = "1535072605621841922"; |
|||
|
|||
} |
|||
@ -0,0 +1,84 @@ |
|||
package com.epmet.controller.yantai; |
|||
|
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.commons.tools.validator.ValidatorUtils; |
|||
import com.epmet.commons.tools.validator.group.AddGroup; |
|||
import com.epmet.dto.form.yantai.YtSyncStaffIdFormDTO; |
|||
import com.epmet.dto.form.yantai.YtUserPageFormDTO; |
|||
import com.epmet.dto.result.yantai.DataSyncOrgDataDTO; |
|||
import com.epmet.dto.result.yantai.YtUserPageResDTO; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* desc: 从各个平台-同步用户和组织数据到本地 用于生成本系统账号 |
|||
* |
|||
* @author LiuJanJun |
|||
* @date 2022/10/17 3:41 下午 |
|||
*/ |
|||
@RestController |
|||
@RequestMapping("dataSync") |
|||
public class DataSyncUserAndOrgController { |
|||
|
|||
@Autowired |
|||
private DataSyncUserAndOrgService dataSyncUserAndOrgService; |
|||
|
|||
/** |
|||
* desc:从统一认证中心 拉取用户信息 |
|||
* @return |
|||
*/ |
|||
@PostMapping("yanTai/sync/user") |
|||
public Result<Boolean> getYanTaiUserInfo(@RequestParam("orgId")String orgId) { |
|||
Boolean flag = dataSyncUserAndOrgService.yanTaiSyncUser(orgId); |
|||
return new Result<Boolean>().ok(flag); |
|||
} |
|||
|
|||
/** |
|||
* desc:从统一认证中心 拉取组织信息 |
|||
* @return |
|||
*/ |
|||
@PostMapping("yanTai/sync/org") |
|||
public Result<Boolean> getYanTaiOrgInfo(@RequestParam("orgId")String orgId) { |
|||
Boolean extJson = dataSyncUserAndOrgService.yanTaiSyncOrg(orgId); |
|||
return new Result<Boolean>().ok(extJson); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 运营端,统一认证 列表查询 |
|||
* |
|||
* @param formDTO |
|||
* @return |
|||
*/ |
|||
@PostMapping("page-user") |
|||
public Result<PageData<YtUserPageResDTO>> pageUser(@RequestBody YtUserPageFormDTO formDTO) { |
|||
return new Result<PageData<YtUserPageResDTO>>().ok(dataSyncUserAndOrgService.pageUser(formDTO)); |
|||
} |
|||
|
|||
/** |
|||
* 工作端新增完用户后,需要调用此接口,更新data_sync_user_data |
|||
* |
|||
* @param formDTO |
|||
* @return |
|||
*/ |
|||
@PostMapping("update-staff") |
|||
public Result updateStaff(@RequestBody YtSyncStaffIdFormDTO formDTO) { |
|||
ValidatorUtils.validateEntity(formDTO, AddGroup.class); |
|||
dataSyncUserAndOrgService.updateStaff(formDTO.getCustomerId(),formDTO.getOperUserId(),formDTO.getStaffId(),formDTO.getName(),formDTO.getMobile()); |
|||
return new Result(); |
|||
} |
|||
|
|||
/** |
|||
* 运营端,统一认证 列表查询条件 那颗树 调用此接口 |
|||
* @param formDTO |
|||
* @return |
|||
*/ |
|||
@PostMapping("ytorglist") |
|||
public Result<List<DataSyncOrgDataDTO>> ytOrgList(@RequestBody YtUserPageFormDTO formDTO){ |
|||
List<DataSyncOrgDataDTO> list=dataSyncUserAndOrgService.ytOrgList(formDTO.getOrgId()); |
|||
return new Result<List<DataSyncOrgDataDTO>>().ok(list); |
|||
} |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
package com.epmet.controller.yantai; |
|||
|
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.dto.form.yantai.YtUserPageFormDTO; |
|||
import com.epmet.dto.result.yantai.DataSyncOrgDataDTO; |
|||
import com.epmet.dto.result.yantai.YtUserPageResDTO; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author liujianjun |
|||
*/ |
|||
public interface DataSyncUserAndOrgService { |
|||
Boolean yanTaiSyncUser(String organizationId); |
|||
|
|||
Boolean yanTaiSyncOrg(String organizationId); |
|||
|
|||
/** |
|||
* 运营端-统一认证 |
|||
* 用户列表 |
|||
* @param formDTO |
|||
* @return |
|||
*/ |
|||
PageData<YtUserPageResDTO> pageUser(YtUserPageFormDTO formDTO); |
|||
|
|||
/** |
|||
* 工作端新增完用户后,需要调用此接口,更新data_sync_user_data |
|||
* @param customerId |
|||
* @param staffId |
|||
* @param name |
|||
* @param mobile |
|||
*/ |
|||
int updateStaff(String customerId,String operUserId, String staffId, String name, String mobile); |
|||
|
|||
/** |
|||
* 根据组织id查询下级组织 |
|||
* @param pid |
|||
* @return |
|||
*/ |
|||
List<DataSyncOrgDataDTO> ytOrgList(String pid); |
|||
} |
|||
@ -0,0 +1,180 @@ |
|||
package com.epmet.controller.yantai; |
|||
|
|||
import com.epmet.commons.tools.constant.NumConstant; |
|||
import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.commons.tools.redis.common.CustomerStaffRedis; |
|||
import com.epmet.commons.tools.redis.common.bean.CustomerStaffInfoDTOCache; |
|||
import com.epmet.commons.tools.utils.ConvertUtils; |
|||
import com.epmet.commons.tools.utils.api.yt.OrgData; |
|||
import com.epmet.commons.tools.utils.api.yt.UserData; |
|||
import com.epmet.commons.tools.utils.api.yt.YantaiApi; |
|||
import com.epmet.dao.yantai.DataSyncOrgDataDao; |
|||
import com.epmet.dao.yantai.DataSyncUserDataDao; |
|||
import com.epmet.dto.CustomerStaffDTO; |
|||
import com.epmet.dto.form.yantai.YtUserPageFormDTO; |
|||
import com.epmet.dto.result.yantai.DataSyncOrgDataDTO; |
|||
import com.epmet.dto.result.yantai.YtUserPageResDTO; |
|||
import com.epmet.entity.yantai.DataSyncOrgDataEntity; |
|||
import com.epmet.entity.yantai.DataSyncUserDataEntity; |
|||
import com.epmet.feign.EpmetUserOpenFeignClient; |
|||
import com.epmet.service.DataSyncOrgDataService; |
|||
import com.epmet.service.DataSyncUserDataService; |
|||
import com.github.pagehelper.PageHelper; |
|||
import com.github.pagehelper.PageInfo; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.apache.commons.collections4.CollectionUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.stream.Collectors; |
|||
|
|||
import static com.epmet.constant.YanTaiConstant.YT_CUSTOMER_ID; |
|||
|
|||
/** |
|||
* desc:烟台 从认证中心同步组织和用户信息 到本地 |
|||
* |
|||
* @author: LiuJanJun |
|||
* @date: 2022/10/17 3:42 下午 |
|||
* @version: 1.0 |
|||
*/ |
|||
@Service |
|||
@Slf4j |
|||
public class DataSyncUserAndOrgServiceImpl implements DataSyncUserAndOrgService { |
|||
@Autowired |
|||
private DataSyncUserDataDao dataSyncUserDataDao; |
|||
@Autowired |
|||
private DataSyncOrgDataDao dataSyncOrgDataDao; |
|||
@Autowired |
|||
private DataSyncOrgDataService dataSyncOrgDataService; |
|||
@Autowired |
|||
private DataSyncUserDataService dataSyncUserDataService; |
|||
@Autowired |
|||
private EpmetUserOpenFeignClient epmetUserOpenFeignClient; |
|||
|
|||
/** |
|||
* Desc: 从org表查询组织,在根据组织去查询用户 |
|||
* @param organizationId |
|||
* @author zxc |
|||
* @date 2022/10/19 13:27 |
|||
*/ |
|||
@Override |
|||
public Boolean yanTaiSyncUser(String organizationId) { |
|||
String customerId = YT_CUSTOMER_ID; |
|||
// 缓存初始化staffs
|
|||
epmetUserOpenFeignClient.allCustomerStaffInCache(customerId); |
|||
Integer no = NumConstant.ONE; |
|||
Integer size; |
|||
do { |
|||
// 分批获取org
|
|||
PageInfo<com.epmet.dto.DataSyncOrgDataDTO> pageInfo = PageHelper.startPage(no, NumConstant.ONE_HUNDRED).doSelectPageInfo(() -> dataSyncOrgDataDao.getAllList(customerId)); |
|||
size = pageInfo.getList().size(); |
|||
if (CollectionUtils.isNotEmpty(pageInfo.getList())){ |
|||
List<DataSyncUserDataEntity> needInsert = new ArrayList<>(); |
|||
pageInfo.getList().forEach(org -> { |
|||
// 根据org查用户
|
|||
List<UserData> data = YantaiApi.getUserByOuGuid(org.getOrganizationId()); |
|||
if (CollectionUtils.isNotEmpty(data)){ |
|||
for (UserData u : data) { |
|||
CustomerStaffInfoDTOCache staffInfo = CustomerStaffRedis.getStaffInfoByMobile(customerId, u.getMobileTelephoneNumber()); |
|||
DataSyncUserDataEntity entity = ConvertUtils.sourceToTarget(u, DataSyncUserDataEntity.class); |
|||
entity.setCustomerId(customerId); |
|||
entity.setRemark(""); |
|||
if (null == staffInfo){ |
|||
entity.setStatus(NumConstant.ZERO_STR); |
|||
entity.setOrganizationId(""); |
|||
entity.setStaffId(""); |
|||
}else { |
|||
CustomerStaffInfoCacheResult staffInfo1 = CustomerStaffRedis.getStaffInfo(customerId, staffInfo.getUserId()); |
|||
entity.setStatus(NumConstant.ONE_STR); |
|||
entity.setOrganizationId(null == staffInfo1 ? "" : staffInfo1.getAgencyId()); |
|||
entity.setStaffId(staffInfo.getUserId()); |
|||
} |
|||
needInsert.add(entity); |
|||
} |
|||
} |
|||
}); |
|||
dataSyncUserDataService.insertBatch(needInsert,NumConstant.FIVE_HUNDRED); |
|||
} |
|||
no++; |
|||
}while (size == NumConstant.ONE_HUNDRED); |
|||
// 删除staffs缓存
|
|||
CustomerStaffRedis.delAllCustomerStaff(customerId); |
|||
return false; |
|||
} |
|||
|
|||
@Override |
|||
public Boolean yanTaiSyncOrg(String organizationId) { |
|||
List<OrgData> data = YantaiApi.getChildOuInfoByGuid(organizationId); |
|||
if (CollectionUtils.isNotEmpty(data)){ |
|||
List<OrgData> needInsert = new ArrayList<>(); |
|||
data.forEach(d -> { |
|||
needInsert.add(d); |
|||
disposeYanTaiSyncOrg(d.getOrganizationId(),needInsert); |
|||
}); |
|||
List<DataSyncOrgDataEntity> entities = needInsert.stream().map(m -> { |
|||
DataSyncOrgDataEntity entity = ConvertUtils.sourceToTarget(m, DataSyncOrgDataEntity.class); |
|||
entity.setCustomerId(YT_CUSTOMER_ID); |
|||
entity.setPid(""); |
|||
entity.setParentOrgName(""); |
|||
entity.setPids(""); |
|||
return entity; |
|||
}).collect(Collectors.toList()); |
|||
dataSyncOrgDataService.insertBatch(entities, NumConstant.ONE_HUNDRED); |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
public void disposeYanTaiSyncOrg(String organizationId, List<OrgData> needInsert){ |
|||
List<OrgData> data = YantaiApi.getChildOuInfoByGuid(organizationId); |
|||
if (CollectionUtils.isNotEmpty(data)){ |
|||
needInsert.addAll(data); |
|||
data.forEach(d -> { |
|||
disposeYanTaiSyncOrg(d.getOrganizationId(),needInsert); |
|||
}); |
|||
} |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 运营端-统一认证 |
|||
* 用户列表 |
|||
* |
|||
* @param formDTO |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public PageData<YtUserPageResDTO> pageUser(YtUserPageFormDTO formDTO) { |
|||
PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(), formDTO.getIsPage()); |
|||
List<YtUserPageResDTO> list = dataSyncUserDataDao.pageUser(formDTO); |
|||
PageInfo<YtUserPageResDTO> pageInfo = new PageInfo<>(list); |
|||
return new PageData<>(list, pageInfo.getTotal()); |
|||
} |
|||
|
|||
/** |
|||
* 工作端新增完用户后,需要调用此接口,更新data_sync_user_data |
|||
* |
|||
* @param customerId |
|||
* @param staffId |
|||
* @param name |
|||
* @param mobile |
|||
*/ |
|||
@Override |
|||
public int updateStaff(String customerId, String operUserId,String staffId, String name, String mobile) { |
|||
return dataSyncUserDataDao.updateStaff(customerId,operUserId,staffId,name,mobile); |
|||
} |
|||
|
|||
/** |
|||
* 根据组织id查询下级组织 |
|||
* |
|||
* @param pid |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public List<DataSyncOrgDataDTO> ytOrgList(String pid) { |
|||
List<DataSyncOrgDataDTO> list=dataSyncOrgDataDao.queryList(pid); |
|||
return list; |
|||
} |
|||
} |
|||
@ -0,0 +1,199 @@ |
|||
package com.epmet.controller.yantai; |
|||
|
|||
import com.fasterxml.jackson.core.JsonProcessingException; |
|||
import com.fasterxml.jackson.databind.ObjectMapper; |
|||
import org.apache.commons.codec.binary.Base64; |
|||
import org.bouncycastle.jce.provider.BouncyCastleProvider; |
|||
|
|||
import javax.crypto.BadPaddingException; |
|||
import javax.crypto.Cipher; |
|||
import javax.crypto.IllegalBlockSizeException; |
|||
import javax.crypto.SecretKey; |
|||
import javax.crypto.spec.SecretKeySpec; |
|||
import java.nio.charset.Charset; |
|||
import java.nio.charset.StandardCharsets; |
|||
import java.security.InvalidKeyException; |
|||
import java.security.Security; |
|||
|
|||
/** |
|||
* 烟台的认证中心-国密sm4加解密 |
|||
*/ |
|||
public class SM4UtilsForYanTai { |
|||
private static String SM4_KEY = "yaweisoftware@xy"; |
|||
//编码格式
|
|||
private static final Charset encryptCharset = StandardCharsets.UTF_8; |
|||
|
|||
public enum Algorithm { |
|||
SM4("SM4","SM4","国密四,key长16byte"); |
|||
private String keyAlgorithm; |
|||
private String transformation; |
|||
private String description;//描述
|
|||
Algorithm(String keyAlgorithm, String transformation, String description) { |
|||
this.keyAlgorithm = keyAlgorithm; |
|||
this.transformation = transformation; |
|||
this.description = description; |
|||
} |
|||
public String getKeyAlgorithm() { |
|||
return this.keyAlgorithm; |
|||
} |
|||
public String getTransformation() { |
|||
return this.transformation; |
|||
} |
|||
public String getDescription() { |
|||
return this.description; |
|||
} |
|||
} |
|||
|
|||
private static final String PROVIDER_NAME = "BC"; |
|||
static { |
|||
Security.addProvider(new BouncyCastleProvider()); |
|||
} |
|||
|
|||
/** |
|||
* 自定字符串产生密钥 |
|||
* @param algorithm 加解密算法 |
|||
* @param keyStr 密钥字符串 |
|||
* @param charset 编码字符集 |
|||
* @return 密钥 |
|||
*/ |
|||
public static SecretKey genKeyByStr(Algorithm algorithm, String keyStr, Charset charset) { |
|||
return readKeyFromBytes(algorithm, keyStr.getBytes(charset)); |
|||
} |
|||
|
|||
/** |
|||
* 根据指定字节数组产生密钥 |
|||
* @param algorithm 加解密算法 |
|||
* @param keyBytes 密钥字节数组 |
|||
* @return 密钥 |
|||
*/ |
|||
public static SecretKey readKeyFromBytes(Algorithm algorithm, byte[] keyBytes) { |
|||
return new SecretKeySpec(keyBytes, algorithm.getKeyAlgorithm()); |
|||
} |
|||
|
|||
/****************************加密*********************************/ |
|||
/** |
|||
* 加密字符串,并进行base64编码 |
|||
* @param algorithm 加解密算法 |
|||
* @param key 密钥 |
|||
* @param data 明文 |
|||
* @param charset 编码字符集 |
|||
* @return 密文 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
*/ |
|||
public static String encryptBase64(Algorithm algorithm, SecretKey key, String data, Charset charset) throws InvalidKeyException { |
|||
return Base64.encodeBase64String(encrypt(algorithm, key, data.getBytes(charset))); |
|||
} |
|||
|
|||
/** |
|||
* 加密字节数组 |
|||
* @param algorithm 加解密算法 |
|||
* @param key 密钥 |
|||
* @param data 明文 |
|||
* @return 密文 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
*/ |
|||
public static byte[] encrypt(Algorithm algorithm, SecretKey key, byte[] data) throws InvalidKeyException { |
|||
try { |
|||
return cipherDoFinal(algorithm, Cipher.ENCRYPT_MODE, key, data); |
|||
} catch (BadPaddingException e) { |
|||
throw new RuntimeException(e);//明文没有具体格式要求,不会出错。所以这个异常不需要外部捕获。
|
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 加解密字节数组 |
|||
* @param algorithm 加解密算法 |
|||
* @param opmode 操作:1加密,2解密 |
|||
* @param key 密钥 |
|||
* @param data 数据 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
* @throws BadPaddingException 解密密文错误(加密模式没有) |
|||
*/ |
|||
private static byte[] cipherDoFinal(Algorithm algorithm, int opmode, SecretKey key, byte[] data) throws InvalidKeyException, BadPaddingException { |
|||
Cipher cipher; |
|||
try { |
|||
cipher = Cipher.getInstance(algorithm.getTransformation(), PROVIDER_NAME); |
|||
} catch (Exception e) { |
|||
//NoSuchAlgorithmException:加密算法名是本工具类提供的,如果错了业务没有办法处理。所以这个异常不需要外部捕获。
|
|||
//NoSuchProviderException:Provider是本工具类提供的,如果错了业务没有办法处理。所以这个异常不需要外部捕获。
|
|||
//NoSuchPaddingException:没有特定的填充机制,与环境有关,业务没有办法处理。所以这个异常不需要外部捕获。
|
|||
throw new RuntimeException(e); |
|||
} |
|||
cipher.init(opmode, key); |
|||
try { |
|||
return cipher.doFinal(data); |
|||
} catch (IllegalBlockSizeException e) { |
|||
throw new RuntimeException(e);//业务不需要将数据分块(好像由底层处理了),如果错了业务没有办法处理。所以这个异常不需要外部捕获。
|
|||
} |
|||
} |
|||
|
|||
/****************************解密*********************************/ |
|||
/** |
|||
* 对字符串先进行base64解码,再解密 |
|||
* @param algorithm 加解密算法 |
|||
* @param key 密钥 |
|||
* @param data 密文 |
|||
* @param charset 编码字符集 |
|||
* @return 明文 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
* @throws BadPaddingException 密文错误 |
|||
*/ |
|||
public static String decryptBase64(Algorithm algorithm, SecretKey key, String data, Charset charset) |
|||
throws InvalidKeyException, BadPaddingException { |
|||
return new String(decrypt(algorithm, key, Base64.decodeBase64(data)), charset); |
|||
} |
|||
|
|||
/** |
|||
* 解密字节数组 |
|||
* @param algorithm 加解密算法 |
|||
* @param key 密钥 |
|||
* @param data 密文 |
|||
* @return 明文 |
|||
* @throws InvalidKeyException 密钥错误 |
|||
* @throws BadPaddingException 密文错误 |
|||
*/ |
|||
public static byte[] decrypt(Algorithm algorithm, SecretKey key, byte[] data) throws InvalidKeyException, BadPaddingException { |
|||
return cipherDoFinal(algorithm, Cipher.DECRYPT_MODE, key, data); |
|||
} |
|||
|
|||
public static String Encrypt(String data) throws InvalidKeyException { |
|||
SecretKey key = genKeyByStr(Algorithm.SM4, SM4_KEY, encryptCharset); |
|||
return encryptBase64(Algorithm.SM4, key, data, encryptCharset); |
|||
} |
|||
public static String Decrypt(String data) throws BadPaddingException, InvalidKeyException { |
|||
SecretKey key = genKeyByStr(Algorithm.SM4, SM4_KEY, encryptCharset); |
|||
return decryptBase64(Algorithm.SM4, key, data, encryptCharset); |
|||
} |
|||
//加密
|
|||
public static String dealEncryptData(Object data) throws JsonProcessingException, InvalidKeyException { |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
String dataString = ""; |
|||
try { |
|||
if(data instanceof String){ |
|||
dataString = (String) data; |
|||
}else { |
|||
dataString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data); |
|||
} |
|||
String dataEncrypt = Encrypt(dataString); |
|||
return dataEncrypt; |
|||
}catch (Exception e){ |
|||
return dataString; |
|||
} |
|||
} |
|||
//解密
|
|||
public static String dealDecryptData(Object data) throws JsonProcessingException, BadPaddingException, InvalidKeyException { |
|||
String dataString = ""; |
|||
try { |
|||
ObjectMapper objectMapper = new ObjectMapper(); |
|||
if (data instanceof String) { |
|||
dataString = (String) data; |
|||
} else { |
|||
dataString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data); |
|||
} |
|||
String dataDecrypt = Decrypt(dataString); |
|||
return dataDecrypt; |
|||
}catch (Exception e){ |
|||
return dataString; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
package com.epmet.dao.yantai; |
|||
|
|||
import com.epmet.commons.mybatis.dao.BaseDao; |
|||
import com.epmet.dto.result.yantai.DataSyncOrgDataDTO; |
|||
import com.epmet.entity.yantai.DataSyncOrgDataEntity; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
@Mapper |
|||
public interface DataSyncOrgDataDao extends BaseDao<DataSyncOrgDataEntity> { |
|||
/** |
|||
* 根据pid查询下一级组织列表 |
|||
* @param pid |
|||
* @return |
|||
*/ |
|||
List<DataSyncOrgDataDTO> queryList(@Param("pid") String pid); |
|||
|
|||
List<com.epmet.dto.DataSyncOrgDataDTO> getAllList(@Param("customerId") String customerId); |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
package com.epmet.dao.yantai; |
|||
|
|||
import com.epmet.commons.mybatis.dao.BaseDao; |
|||
import com.epmet.dto.form.yantai.YtUserPageFormDTO; |
|||
import com.epmet.dto.result.yantai.YtUserPageResDTO; |
|||
import com.epmet.entity.yantai.DataSyncUserDataEntity; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
@Mapper |
|||
public interface DataSyncUserDataDao extends BaseDao<DataSyncUserDataEntity> { |
|||
/** |
|||
* 运营端,统一认证 列表查询 |
|||
* @param formDTO |
|||
* @return |
|||
*/ |
|||
List<YtUserPageResDTO> pageUser(YtUserPageFormDTO formDTO); |
|||
|
|||
/** |
|||
* 更新data_sync_user_data 为已创建、记录staffId |
|||
* @param customerId |
|||
* @param operUserId |
|||
* @param staffId |
|||
* @param name |
|||
* @param mobile |
|||
* @return |
|||
*/ |
|||
int updateStaff(@Param("customerId") String customerId, |
|||
@Param("operUserId")String operUserId, |
|||
@Param("staffId")String staffId, |
|||
@Param("name")String name, |
|||
@Param("mobile")String mobile); |
|||
} |
|||
@ -0,0 +1,106 @@ |
|||
package com.epmet.entity.yantai; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
@Data |
|||
@EqualsAndHashCode(callSuper=false) |
|||
@TableName("data_sync_org_data") |
|||
public class DataSyncOrgDataEntity extends BaseEpmetEntity { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 联系人姓名 |
|||
*/ |
|||
private String contact; |
|||
|
|||
/** |
|||
* 联系电话号码 |
|||
*/ |
|||
private String contacttelephoneNumber; |
|||
|
|||
/** |
|||
* 详细地址 |
|||
*/ |
|||
private String detailAddress; |
|||
|
|||
/** |
|||
* 组织机构第一名称 |
|||
*/ |
|||
private String firstnameofOrganization; |
|||
|
|||
/** |
|||
* 组织机构全称 |
|||
*/ |
|||
private String nameofOrganization; |
|||
|
|||
/** |
|||
* 排序号码 |
|||
*/ |
|||
private String orderNumber; |
|||
|
|||
/** |
|||
* 组织机构简称 |
|||
*/ |
|||
private String organizatioNabbreviation; |
|||
|
|||
/** |
|||
* 组织机构ID |
|||
*/ |
|||
private String organizationId; |
|||
|
|||
/** |
|||
* 组织机构级别 |
|||
*/ |
|||
private String organizationLevel; |
|||
|
|||
/** |
|||
* 组织机构路径 |
|||
*/ |
|||
private String organizationPath; |
|||
|
|||
/** |
|||
* 组织机构类型 |
|||
*/ |
|||
private String organizationType; |
|||
|
|||
/** |
|||
* 注册类型 |
|||
*/ |
|||
private String registrationType; |
|||
|
|||
/** |
|||
* 统一社会信用代码 |
|||
*/ |
|||
private String unifiedsocialcreditId; |
|||
|
|||
/** |
|||
* 客户id;烟台id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 上级组织机构id:ORGANIZATION_ID; 根级组织赋值0 |
|||
*/ |
|||
private String pid; |
|||
|
|||
/** |
|||
* 上级组织机构名称:ORGANIZATIO_NABBREVIATION |
|||
*/ |
|||
private String parentOrgName; |
|||
|
|||
/** |
|||
* 所有上级组织。不包含本身! |
|||
*/ |
|||
private String pids; |
|||
|
|||
} |
|||
@ -0,0 +1,91 @@ |
|||
package com.epmet.entity.yantai; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
@Data |
|||
@EqualsAndHashCode(callSuper=false) |
|||
@TableName("data_sync_user_data") |
|||
public class DataSyncUserDataEntity extends BaseEpmetEntity { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 性别:0未知1男2女 |
|||
*/ |
|||
private String gender; |
|||
|
|||
/** |
|||
* 手机号码 |
|||
*/ |
|||
private String mobileTelephoneNumber; |
|||
|
|||
/** |
|||
* 排序号码 |
|||
*/ |
|||
private String orderNumber; |
|||
|
|||
/** |
|||
* 职务 |
|||
*/ |
|||
private String position; |
|||
|
|||
/** |
|||
* 职级 |
|||
*/ |
|||
private String positionLevel; |
|||
|
|||
/** |
|||
* 电话号码 |
|||
*/ |
|||
private String telephoneNumber; |
|||
|
|||
/** |
|||
* 统一用户编码 |
|||
*/ |
|||
private String userGuid; |
|||
|
|||
/** |
|||
* 用户姓名 |
|||
*/ |
|||
private String userName; |
|||
|
|||
/** |
|||
* 人员路径 |
|||
*/ |
|||
private String userPath; |
|||
|
|||
/** |
|||
* data_sync_org_data.组织机构ID; |
|||
*/ |
|||
private String organizationId; |
|||
|
|||
/** |
|||
* 客户id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 0未创建、已创建 |
|||
*/ |
|||
private String status; |
|||
|
|||
/** |
|||
* customer_staff.userId |
|||
*/ |
|||
private String staffId; |
|||
|
|||
/** |
|||
* 备注;目前为空 |
|||
*/ |
|||
private String remark; |
|||
|
|||
} |
|||
@ -0,0 +1,78 @@ |
|||
package com.epmet.service; |
|||
|
|||
import com.epmet.commons.mybatis.service.BaseService; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.dto.DataSyncOrgDataDTO; |
|||
import com.epmet.entity.yantai.DataSyncOrgDataEntity; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
public interface DataSyncOrgDataService extends BaseService<DataSyncOrgDataEntity> { |
|||
|
|||
/** |
|||
* 默认分页 |
|||
* |
|||
* @param params |
|||
* @return PageData<DataSyncOrgDataDTO> |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
PageData<DataSyncOrgDataDTO> page(Map<String, Object> params); |
|||
|
|||
/** |
|||
* 默认查询 |
|||
* |
|||
* @param params |
|||
* @return java.util.List<DataSyncOrgDataDTO> |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
List<DataSyncOrgDataDTO> list(Map<String, Object> params); |
|||
|
|||
/** |
|||
* 单条查询 |
|||
* |
|||
* @param id |
|||
* @return DataSyncOrgDataDTO |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
DataSyncOrgDataDTO get(String id); |
|||
|
|||
/** |
|||
* 默认保存 |
|||
* |
|||
* @param dto |
|||
* @return void |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
void save(DataSyncOrgDataDTO dto); |
|||
|
|||
/** |
|||
* 默认更新 |
|||
* |
|||
* @param dto |
|||
* @return void |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
void update(DataSyncOrgDataDTO dto); |
|||
|
|||
/** |
|||
* 批量删除 |
|||
* |
|||
* @param ids |
|||
* @return void |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
void delete(String[] ids); |
|||
} |
|||
@ -0,0 +1,78 @@ |
|||
package com.epmet.service; |
|||
|
|||
import com.epmet.commons.mybatis.service.BaseService; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.dto.DataSyncUserDataDTO; |
|||
import com.epmet.entity.yantai.DataSyncUserDataEntity; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
public interface DataSyncUserDataService extends BaseService<DataSyncUserDataEntity> { |
|||
|
|||
/** |
|||
* 默认分页 |
|||
* |
|||
* @param params |
|||
* @return PageData<DataSyncUserDataDTO> |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
PageData<DataSyncUserDataDTO> page(Map<String, Object> params); |
|||
|
|||
/** |
|||
* 默认查询 |
|||
* |
|||
* @param params |
|||
* @return java.util.List<DataSyncUserDataDTO> |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
List<DataSyncUserDataDTO> list(Map<String, Object> params); |
|||
|
|||
/** |
|||
* 单条查询 |
|||
* |
|||
* @param id |
|||
* @return DataSyncUserDataDTO |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
DataSyncUserDataDTO get(String id); |
|||
|
|||
/** |
|||
* 默认保存 |
|||
* |
|||
* @param dto |
|||
* @return void |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
void save(DataSyncUserDataDTO dto); |
|||
|
|||
/** |
|||
* 默认更新 |
|||
* |
|||
* @param dto |
|||
* @return void |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
void update(DataSyncUserDataDTO dto); |
|||
|
|||
/** |
|||
* 批量删除 |
|||
* |
|||
* @param ids |
|||
* @return void |
|||
* @author generator |
|||
* @date 2022-10-18 |
|||
*/ |
|||
void delete(String[] ids); |
|||
} |
|||
@ -0,0 +1,83 @@ |
|||
package com.epmet.service.impl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.commons.tools.utils.ConvertUtils; |
|||
import com.epmet.commons.tools.constant.FieldConstant; |
|||
import com.epmet.dao.yantai.DataSyncOrgDataDao; |
|||
import com.epmet.dto.DataSyncOrgDataDTO; |
|||
import com.epmet.entity.yantai.DataSyncOrgDataEntity; |
|||
import com.epmet.service.DataSyncOrgDataService; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
@Service |
|||
public class DataSyncOrgDataServiceImpl extends BaseServiceImpl<DataSyncOrgDataDao, DataSyncOrgDataEntity> implements DataSyncOrgDataService { |
|||
|
|||
@Override |
|||
public PageData<DataSyncOrgDataDTO> page(Map<String, Object> params) { |
|||
IPage<DataSyncOrgDataEntity> page = baseDao.selectPage( |
|||
getPage(params, FieldConstant.CREATED_TIME, false), |
|||
getWrapper(params) |
|||
); |
|||
return getPageData(page, DataSyncOrgDataDTO.class); |
|||
} |
|||
|
|||
@Override |
|||
public List<DataSyncOrgDataDTO> list(Map<String, Object> params) { |
|||
List<DataSyncOrgDataEntity> entityList = baseDao.selectList(getWrapper(params)); |
|||
|
|||
return ConvertUtils.sourceToTarget(entityList, DataSyncOrgDataDTO.class); |
|||
} |
|||
|
|||
private QueryWrapper<DataSyncOrgDataEntity> getWrapper(Map<String, Object> params){ |
|||
String id = (String)params.get(FieldConstant.ID_HUMP); |
|||
|
|||
QueryWrapper<DataSyncOrgDataEntity> wrapper = new QueryWrapper<>(); |
|||
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id); |
|||
|
|||
return wrapper; |
|||
} |
|||
|
|||
@Override |
|||
public DataSyncOrgDataDTO get(String id) { |
|||
DataSyncOrgDataEntity entity = baseDao.selectById(id); |
|||
return ConvertUtils.sourceToTarget(entity, DataSyncOrgDataDTO.class); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void save(DataSyncOrgDataDTO dto) { |
|||
DataSyncOrgDataEntity entity = ConvertUtils.sourceToTarget(dto, DataSyncOrgDataEntity.class); |
|||
insert(entity); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void update(DataSyncOrgDataDTO dto) { |
|||
DataSyncOrgDataEntity entity = ConvertUtils.sourceToTarget(dto, DataSyncOrgDataEntity.class); |
|||
updateById(entity); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void delete(String[] ids) { |
|||
// 逻辑删除(@TableLogic 注解)
|
|||
baseDao.deleteBatchIds(Arrays.asList(ids)); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,83 @@ |
|||
package com.epmet.service.impl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.commons.tools.utils.ConvertUtils; |
|||
import com.epmet.commons.tools.constant.FieldConstant; |
|||
import com.epmet.dao.yantai.DataSyncUserDataDao; |
|||
import com.epmet.dto.DataSyncUserDataDTO; |
|||
import com.epmet.entity.yantai.DataSyncUserDataEntity; |
|||
import com.epmet.service.DataSyncUserDataService; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-10-18 |
|||
*/ |
|||
@Service |
|||
public class DataSyncUserDataServiceImpl extends BaseServiceImpl<DataSyncUserDataDao, DataSyncUserDataEntity> implements DataSyncUserDataService { |
|||
|
|||
@Override |
|||
public PageData<DataSyncUserDataDTO> page(Map<String, Object> params) { |
|||
IPage<DataSyncUserDataEntity> page = baseDao.selectPage( |
|||
getPage(params, FieldConstant.CREATED_TIME, false), |
|||
getWrapper(params) |
|||
); |
|||
return getPageData(page, DataSyncUserDataDTO.class); |
|||
} |
|||
|
|||
@Override |
|||
public List<DataSyncUserDataDTO> list(Map<String, Object> params) { |
|||
List<DataSyncUserDataEntity> entityList = baseDao.selectList(getWrapper(params)); |
|||
|
|||
return ConvertUtils.sourceToTarget(entityList, DataSyncUserDataDTO.class); |
|||
} |
|||
|
|||
private QueryWrapper<DataSyncUserDataEntity> getWrapper(Map<String, Object> params){ |
|||
String id = (String)params.get(FieldConstant.ID_HUMP); |
|||
|
|||
QueryWrapper<DataSyncUserDataEntity> wrapper = new QueryWrapper<>(); |
|||
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id); |
|||
|
|||
return wrapper; |
|||
} |
|||
|
|||
@Override |
|||
public DataSyncUserDataDTO get(String id) { |
|||
DataSyncUserDataEntity entity = baseDao.selectById(id); |
|||
return ConvertUtils.sourceToTarget(entity, DataSyncUserDataDTO.class); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void save(DataSyncUserDataDTO dto) { |
|||
DataSyncUserDataEntity entity = ConvertUtils.sourceToTarget(dto, DataSyncUserDataEntity.class); |
|||
insert(entity); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void update(DataSyncUserDataDTO dto) { |
|||
DataSyncUserDataEntity entity = ConvertUtils.sourceToTarget(dto, DataSyncUserDataEntity.class); |
|||
updateById(entity); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void delete(String[] ids) { |
|||
// 逻辑删除(@TableLogic 注解)
|
|||
baseDao.deleteBatchIds(Arrays.asList(ids)); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,55 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
|
|||
<mapper namespace="com.epmet.dao.yantai.DataSyncOrgDataDao"> |
|||
|
|||
<resultMap type="com.epmet.entity.yantai.DataSyncOrgDataEntity" id="dataSyncOrgDataMap"> |
|||
<result property="id" column="ID"/> |
|||
<result property="contact" column="CONTACT"/> |
|||
<result property="contacttelephoneNumber" column="CONTACTTELEPHONE_NUMBER"/> |
|||
<result property="detailAddress" column="DETAIL_ADDRESS"/> |
|||
<result property="firstnameofOrganization" column="FIRSTNAMEOF_ORGANIZATION"/> |
|||
<result property="nameofOrganization" column="NAMEOF_ORGANIZATION"/> |
|||
<result property="orderNumber" column="ORDER_NUMBER"/> |
|||
<result property="organizatioNabbreviation" column="ORGANIZATIO_NABBREVIATION"/> |
|||
<result property="organizationId" column="ORGANIZATION_ID"/> |
|||
<result property="organizationLevel" column="ORGANIZATION_LEVEL"/> |
|||
<result property="organizationPath" column="ORGANIZATION_PATH"/> |
|||
<result property="organizationType" column="ORGANIZATION_TYPE"/> |
|||
<result property="registrationType" column="REGISTRATION_TYPE"/> |
|||
<result property="unifiedsocialcreditId" column="UNIFIEDSOCIALCREDIT_ID"/> |
|||
<result property="delFlag" column="DEL_FLAG"/> |
|||
<result property="revision" column="REVISION"/> |
|||
<result property="createdBy" column="CREATED_BY"/> |
|||
<result property="createdTime" column="CREATED_TIME"/> |
|||
<result property="updatedBy" column="UPDATED_BY"/> |
|||
<result property="updatedTime" column="UPDATED_TIME"/> |
|||
<result property="customerId" column="CUSTOMER_ID"/> |
|||
<result property="pid" column="PID"/> |
|||
<result property="parentOrgName" column="PARENT_ORG_NAME"/> |
|||
<result property="pids" column="PIDS"/> |
|||
</resultMap> |
|||
|
|||
<select id="queryList" parameterType="map" resultType="com.epmet.dto.result.yantai.DataSyncOrgDataDTO"> |
|||
select |
|||
d.ORGANIZATION_ID as orgId, |
|||
d.ORGANIZATIO_NABBREVIATION as orgName, |
|||
d.PID, |
|||
( |
|||
case when (select count(1) from data_sync_org_data d1 where d1.pid=d.ORGANIZATION_ID)>0 then 1 else 0 |
|||
end |
|||
)as haveChild |
|||
From data_sync_org_data d |
|||
where d.del_flag='0' |
|||
<if test='null != pid and "" != pid'> |
|||
and d.pid = #{pid} |
|||
</if> |
|||
order by d.ORDER_NUMBER asc |
|||
</select> |
|||
<select id="getAllList" resultType="com.epmet.dto.DataSyncOrgDataDTO"> |
|||
select * from data_sync_org_data |
|||
where del_flag = '0' |
|||
and CUSTOMER_ID = #{customerId} |
|||
order by ORDER_NUMBER asc |
|||
</select> |
|||
</mapper> |
|||
@ -0,0 +1,90 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
|
|||
<mapper namespace="com.epmet.dao.yantai.DataSyncUserDataDao"> |
|||
|
|||
<resultMap type="com.epmet.entity.yantai.DataSyncUserDataEntity" id="dataSyncUserDataMap"> |
|||
<result property="id" column="ID"/> |
|||
<result property="gender" column="GENDER"/> |
|||
<result property="mobileTelephoneNumber" column="MOBILE_TELEPHONE_NUMBER"/> |
|||
<result property="orderNumber" column="ORDER_NUMBER"/> |
|||
<result property="position" column="POSITION"/> |
|||
<result property="positionLevel" column="POSITION_LEVEL"/> |
|||
<result property="telephoneNumber" column="TELEPHONE_NUMBER"/> |
|||
<result property="userGuid" column="USER_GUID"/> |
|||
<result property="userName" column="USER_NAME"/> |
|||
<result property="userPath" column="USER_PATH"/> |
|||
<result property="organizationId" column="ORGANIZATION_ID"/> |
|||
<result property="delFlag" column="DEL_FLAG"/> |
|||
<result property="revision" column="REVISION"/> |
|||
<result property="createdBy" column="CREATED_BY"/> |
|||
<result property="createdTime" column="CREATED_TIME"/> |
|||
<result property="updatedBy" column="UPDATED_BY"/> |
|||
<result property="updatedTime" column="UPDATED_TIME"/> |
|||
<result property="customerId" column="CUSTOMER_ID"/> |
|||
<result property="status" column="STATUS"/> |
|||
<result property="staffId" column="STAFF_ID"/> |
|||
<result property="remark" column="REMARK"/> |
|||
</resultMap> |
|||
|
|||
<!-- 运营端,统一认证 列表返参 --> |
|||
<select id="pageUser" parameterType="com.epmet.dto.form.yantai.YtUserPageFormDTO" resultType="com.epmet.dto.result.yantai.YtUserPageResDTO"> |
|||
SELECT |
|||
u.USER_GUID AS userGuid, |
|||
u.ORGANIZATION_ID AS organizationId, |
|||
(case when o.PARENT_ORG_NAME is not null and LENGTH(o.PARENT_ORG_NAME)>0 |
|||
then concat(o.PARENT_ORG_NAME,'-',o.ORGANIZATIO_NABBREVIATION) |
|||
else o.ORGANIZATIO_NABBREVIATION |
|||
end)as orgName, |
|||
u.USER_NAME AS userName, |
|||
u.TELEPHONE_NUMBER AS telephoneNumber, |
|||
u.GENDER AS gender, |
|||
u.`STATUS` AS status, |
|||
IFNULL(u.STAFF_ID,'') AS staffId, |
|||
IFNULL(u.REMARK, '' ) AS remark, |
|||
u.CUSTOMER_ID as customerId |
|||
FROM |
|||
data_sync_user_data u |
|||
LEFT JOIN data_sync_org_data o ON ( u.ORGANIZATION_ID = o.ORGANIZATION_ID ) |
|||
WHERE |
|||
u.DEL_FLAG = '0' |
|||
AND o.DEL_FLAG = '0' |
|||
<if test="null != type and type ==0"> |
|||
<if test='null != orgId and "" != orgId'> |
|||
AND u.ORGANIZATION_ID = #{orgId} |
|||
</if> |
|||
</if> |
|||
|
|||
<if test="null != type and type ==1"> |
|||
<if test='null != orgId and "" != orgId'> |
|||
AND (o.ORGANIZATION_ID = #{orgId} OR o.pids LIKE concat( '%', #{orgId}, '%' ) ) |
|||
</if> |
|||
</if> |
|||
|
|||
<if test='null != name and "" != name'> |
|||
AND u.USER_NAME LIKE concat( '%', #{name}, '%' ) |
|||
</if> |
|||
|
|||
<if test='null != mobile and "" != mobile'> |
|||
AND u.MOBILE_TELEPHONE_NUMBER LIKE concat( '%', #{mobile}, '%' ) |
|||
</if> |
|||
|
|||
<if test='null != status and "" != status'> |
|||
AND u.`STATUS` = #{status} |
|||
</if> |
|||
order by o.ORDER_NUMBER asc,u.ORDER_NUMBER asc |
|||
</select> |
|||
|
|||
<update id="updateStaff" parameterType="map"> |
|||
UPDATE data_sync_user_data |
|||
SET UPDATED_BY = #{operUserId}, |
|||
UPDATED_TIME = NOW(), |
|||
`STATUS` = '1', |
|||
STAFF_ID = #{staffId}, |
|||
CUSTOMER_ID = #{customerId} |
|||
WHERE |
|||
MOBILE_TELEPHONE_NUMBER = #{mobile} |
|||
AND USER_NAME = #{name} |
|||
AND del_flag = '0' |
|||
</update> |
|||
</mapper> |
|||
@ -0,0 +1,116 @@ |
|||
package com.epmet.dto; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
|
|||
/** |
|||
* issue库附件表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2022-09-30 |
|||
*/ |
|||
@Data |
|||
public class IssueAttachmentDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 主键 |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 客户ID |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 业务id |
|||
*/ |
|||
private String businessId; |
|||
|
|||
/** |
|||
* 议题:issue |
|||
*/ |
|||
private String attachTo; |
|||
|
|||
/** |
|||
* 附件名 |
|||
*/ |
|||
private String name; |
|||
|
|||
/** |
|||
* 文件格式(JPG、PNG、PDF、JPEG、BMP、MP4、WMA、M4A、MP3、DOC、DOCX、XLS) |
|||
*/ |
|||
private String format; |
|||
|
|||
/** |
|||
* 附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc)) |
|||
*/ |
|||
private String type; |
|||
|
|||
/** |
|||
* 附件地址 |
|||
*/ |
|||
private String url; |
|||
|
|||
/** |
|||
* 排序字段 |
|||
*/ |
|||
private Integer sort; |
|||
|
|||
/** |
|||
* 附件状态(审核中:auditing; |
|||
auto_passed: 自动通过; |
|||
review:结果不确定,需要人工审核; |
|||
block: 结果违规; |
|||
rejected:人工审核驳回; |
|||
approved:人工审核通过) |
|||
现在图片是同步审核的,所以图片只有auto_passed一种状态 |
|||
*/ |
|||
private String status; |
|||
|
|||
/** |
|||
* 失败原因 |
|||
*/ |
|||
private String reason; |
|||
|
|||
/** |
|||
* 语音或视频时长,秒 |
|||
*/ |
|||
private Integer duration; |
|||
|
|||
/** |
|||
* 删除标记 0:未删除,1:已删除 |
|||
*/ |
|||
private String delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue