一基的服务与模板重新建立一个环境

This commit is contained in:
daihh
2022-10-15 11:54:53 +08:00
commit e8cb8ff892
1902 changed files with 111094 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
package com.xboe;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;
@Configuration
@SpringBootApplication
@EnableCaching
public class BoeBasicApplication {
public static void main(String[] args) {
System.setProperty("jasypt.encryptor.password","jasypt");
SpringApplication.run(BoeBasicApplication.class, args);
}
}

View File

@@ -0,0 +1,38 @@
package com.xboe;
import java.io.IOException;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
/**
* 返回的数据中如果是null 就会转化成空字符串
*
*/
@Configuration
public class ResultNullToEmptyConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
jsonGenerator.writeString("");
}
});
return objectMapper;
}
}

View File

@@ -0,0 +1,286 @@
package com.xboe.api;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xboe.basic.entity.ErrorLog;
import com.xboe.basic.service.IBasicDataSyncService;
import com.xboe.common.PageList;
import com.xboe.common.Pagination;
import com.xboe.core.JsonResponse;
import com.xboe.core.api.ApiBaseController;
import com.xboe.dto.OrganizationDto;
import com.xboe.dto.UserDto;
import com.xboe.primary.service.IMainDbSyncService;
import lombok.extern.slf4j.Slf4j;
/**
* 机构的API
*/
@Slf4j
@RestController
@RequestMapping(value="/inner/basic/sync")
public class BasicDataSyncApi extends ApiBaseController{
@Autowired
IBasicDataSyncService service;
@Autowired
IMainDbSyncService mainDbService;
/**
* 是否执行内部同步
*/
private static final boolean INNER_SYNC=true;
@GetMapping("/test")
public JsonResponse<String> test(){
return success("success");
}
/**
* 单条数据的全量同步
* @param dto
* @return
*/
@PostMapping("/organization")
public JsonResponse<Boolean> syncOrganization(@RequestBody OrganizationDto dto){
if(StringUtils.isBlank(dto.getKid())) {
return badRequest("机构kid不能为空");
}
ObjectMapper om=new ObjectMapper();
try {
service.syncOrganization(dto);
//同时同步内部的数据
try {
if(INNER_SYNC) {
//System.out.println(dto.getCode());
mainDbService.syncOrganization(dto);
}
}catch(Exception ie) {
log.error("内部同步机构处理失败【"+dto.getId()+"",ie);
ErrorLog error=new ErrorLog();
error.setLogError("内部同步机构处理错误:"+ie.getMessage());
error.setDataId(dto.getKid());
error.setDataType(1);
error.setNewId(dto.getId());
error.setType(2);//内部处理日志
error.setLogObject(om.writeValueAsString(dto));
service.saveError(error);
}
return success(true);
}catch(Exception e) {
log.error("同步处理机构数据错误",e);
try {
ErrorLog error=new ErrorLog();
error.setLogError("保存推送机构信息错误:"+e.getMessage());
error.setType(1);
error.setDataId(dto.getKid());
error.setDataType(1);
error.setLogObject(om.writeValueAsString(dto));
service.saveError(error);
}catch(Exception ee) {
log.error("保存错误日志失败",ee);
}
return error("同步处理机构数据错误",e.getMessage(),false);
}
}
@PostMapping("/organization-delete")
public JsonResponse<Boolean> deleteOrganization(String kid){
if(StringUtils.isBlank(kid)) {
return badRequest("机构kid不能为空");
}
try {
String orgId=service.syncDeleteOrganization(kid);
if(StringUtils.isBlank(orgId)) {
log.error("删除失败,无此机构信息【"+kid+"");
ErrorLog error=new ErrorLog();
error.setLogError("同步删除机构处理错误【"+kid+"】,本地无此机构信息");
error.setDataId(kid);
error.setDataType(3);
error.setNewId(orgId);
error.setType(1);//内部处理日志
error.setLogObject("{}");
service.saveError(error);
return success(false);
}
//同时同步内部的数据
try {
if(INNER_SYNC) {
mainDbService.syncDeleteOrganization(orgId);
}
}catch(Exception ex) {
log.error("内部同步删除机构【"+kid+"】基础数据处理错误",ex);
ErrorLog error=new ErrorLog();
error.setLogError("同步删除机构处理错误【"+kid+""+ex.getMessage());
error.setDataId(kid);
error.setDataType(3);
error.setNewId(orgId);
error.setType(2);//内部处理日志
error.setLogObject("{}");
service.saveError(error);
}
return success(true);
}catch(Exception e) {
log.error("同步删除机构数据错误",e);
ErrorLog error=new ErrorLog();
error.setLogError("同步删除机构处理错误【"+kid+""+e.getMessage());
error.setDataId(kid);
error.setDataType(3);
error.setType(1);//内部处理日志
error.setLogObject("{}");
service.saveError(error);
return error("同步删除机构数据错误",e.getMessage(),false);
}
}
/**
* 单条数据的全量同步
* @param dto
* @return
*/
@PostMapping("/user")
public JsonResponse<Boolean> syncUser(@RequestBody UserDto dto){
if(StringUtils.isBlank(dto.getKid())) {
return badRequest("用户kid不能为空");
}
if(StringUtils.isBlank(dto.getLoginName())) {
return badRequest("登录用户名不能为空");
}
if(StringUtils.isBlank(dto.getUserNo())) {
dto.setUserNo(dto.getLoginName());//设置员工号和登录名一致
}
ObjectMapper om=new ObjectMapper();
try {
service.syncUser(dto);
//同时同步内部的数据
try {
if(INNER_SYNC) {
mainDbService.syncUser(dto);
}
}catch(Exception ex) {
log.error("内部同步推送用户【"+dto.getId()+"】基础信息处理错误",ex);
try {
ErrorLog error=new ErrorLog();
error.setLogError("内部同步处理用户信息错误:"+ex.getMessage());
error.setType(2);
error.setDataId(dto.getKid());
error.setNewId(dto.getId());
error.setDataType(2);
error.setLogObject(om.writeValueAsString(dto));
service.saveError(error);
}catch(Exception ee) {
log.error("保存错误日志失败",ee);
}
}
return success(true);
}catch(Exception e) {
//保存到错误信息队列中
log.error("同步处理用户【"+dto.getKid()+"】数据错误",e);
try {
ErrorLog error=new ErrorLog();
error.setLogError("同步处理用户【"+dto.getKid()+"】数据错误:"+e.getMessage());
error.setDataId(dto.getKid());
error.setNewId(dto.getId());
error.setDataType(2);
error.setType(1);
error.setLogObject(om.writeValueAsString(dto));
service.saveError(error);
}catch(Exception ee) {
log.error("保存错误日志失败",ee);
}
return error("同步处理用户数据错误",e.getMessage(),false);
}
}
/**
* 删除用户
* @param kid
* @param code
* @return
*/
@PostMapping("/user-delete")
public JsonResponse<Boolean> deleteUser(String kid,String code){
if(StringUtils.isBlank(kid)) {
return badRequest("用户kid不能为空");
}
String userId=null;
try {
userId=service.syncDeleteUser(kid, code);
if(StringUtils.isBlank(userId)) {
log.error("删除失败,无此用户信息【"+kid+"");
ErrorLog error=new ErrorLog();
error.setLogError("同步删除用户处理错误【"+kid+"】,本地无此用户信息");
error.setDataId(kid);
error.setDataType(4);
error.setNewId(userId);
error.setType(1);//内部处理日志
error.setLogObject("{\"code\":\""+code+"\"}");
service.saveError(error);
return success(false);
}
//同时同步内部的数据
try {
if(INNER_SYNC) {
mainDbService.syncDeleteUser(userId,code);
}
}catch(Exception ex) {
log.error("内部同步删除用户基础信息处理错误",ex);
ErrorLog error=new ErrorLog();
error.setLogError("内部同步删除用户信息错误:"+ex.getMessage());
error.setDataId(kid);
error.setDataType(4);
error.setNewId(userId);
error.setType(2);
error.setLogObject("{\"code\":\""+code+"\"}");
service.saveError(error);
}
return success(true);
}catch(Exception e) {
//保存到错误信息队列中
log.error("同步删除用户数据错误",e);
ErrorLog error=new ErrorLog();
error.setLogError("同步删除用户信息错误:"+e.getMessage());
error.setDataId(kid);
error.setDataType(4);
error.setNewId(userId);
error.setType(1);
error.setLogObject("{\"code\":\""+code+"\"}");
service.saveError(error);
return error("同步删除用户数据错误",e.getMessage(),false);
}
}
/**
* 查询所有的同步日志
* @param pager
* @return
*/
@PostMapping("/erros")
public JsonResponse<PageList<ErrorLog>> errors(Pagination pager,ErrorLog error){
try {
PageList<ErrorLog> errors=service.findLogs(pager.getPageIndex(),pager.getPageSize(),error);
return success(errors);
}catch(Exception e) {
log.error("查询同步错误信息错误",e);
return error("查询同步错误信息失败",e.getMessage());
}
}
}

View File

@@ -0,0 +1,287 @@
package com.xboe.api;
import java.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.xboe.basic.dao.AccountDao;
import com.xboe.basic.dao.OrgTreeDao;
import com.xboe.basic.dao.OrganizationDao;
import com.xboe.basic.dao.PersonDao;
import com.xboe.basic.dao.UserDao;
import com.xboe.basic.entity.Account;
import com.xboe.basic.entity.ErrorLog;
import com.xboe.basic.entity.OrgTree;
import com.xboe.basic.entity.Organization;
import com.xboe.basic.entity.Person;
import com.xboe.basic.entity.User;
import com.xboe.basic.service.IBasicDataSyncService;
import com.xboe.common.PageList;
import com.xboe.common.Pagination;
import com.xboe.core.JsonResponse;
import com.xboe.core.api.ApiBaseController;
import com.xboe.core.orm.FieldFilters;
import com.xboe.dto.OrganizationDto;
import com.xboe.dto.UserDto;
import com.xboe.primary.service.IMainDbSyncService;
import lombok.extern.slf4j.Slf4j;
/**
* 同步数据管理的api
*/
@Slf4j
@RestController
@RequestMapping(value = "/inner/basic/sync/manage")
public class BasicDataSyncManageApi extends ApiBaseController {
@Autowired
IBasicDataSyncService service;
@Autowired
IMainDbSyncService mainDbService;
@Autowired
UserDao userDao;
@Autowired
PersonDao personDao;
@Autowired
AccountDao accountDao;
@Autowired
OrganizationDao organizationDao;
@Autowired
OrgTreeDao orgTreeDao;
/**
* 查询所有的同步日志
*
* @param pager
* @return
*/
@PostMapping("/erros")
public JsonResponse<PageList<ErrorLog>> errors(Pagination pager, ErrorLog error) {
try {
PageList<ErrorLog> errors = service.findLogs(pager.getPageIndex(), pager.getPageSize(), error);
return success(errors);
} catch (Exception e) {
log.error("查询同步错误信息错误", e);
return error("查询同步错误信息失败", e.getMessage());
}
}
@PostMapping("/erro-detail")
public JsonResponse<ErrorLog> errorDetail(String id) {
return success(null);
}
/**
* 执行内部的同步,在用户内部同步失败的情况下的处理,用于重新执行同步处理
*
* @param id
* @return
*/
@PostMapping("/run-inner")
public JsonResponse<Boolean> runInner(String id, Integer dataType) {
//对于同步失败的数据,可以再次同步,这个执行是两个数据库之间的同步.
//第一步在basic表中查出相应数据查询出来用户数据然后再执行同步操作
System.out.println("再次执行同步," + id + "," + dataType);
String mess = null;
if (dataType == 2) {
String user = this.user(id);
mess = user;
}
if (dataType == 1) {
String org = this.org(id);
mess = org;
}
if (dataType == 3) {
String delOrg = this.delOrg(id);
mess = delOrg;
}
if (dataType == 4) {
String user = this.delUser(id);
mess = user;
}
if (mess == null) {
return success(true);
} else {
return error("同步失败", mess);
}
}
//同步机构
private String org(String id) {
String mess = null;
Organization organization = organizationDao.get(id);
OrganizationDto organizationDto = new OrganizationDto();
OrgTree orgTree = orgTreeDao.findOne(FieldFilters.eq("orgId", id));
organizationDto.setId(organization.getId());
organizationDto.setKid(organization.getKid());
organizationDto.setCode(organization.getCode());
organizationDto.setName(organization.getName());
organizationDto.setNamePath(organization.getNamePath());
organizationDto.setShortName(organization.getShortName());
organizationDto.setSassId(organization.getSassId());
organizationDto.setSysLevel(organization.getSysLevel());
organizationDto.setIsDefault(organization.getIsDefault());
organizationDto.setDescription(organization.getDescription());
organizationDto.setDataFrom(organization.getDataFrom());
organizationDto.setCreateFrom(organization.getCreateFrom());
organizationDto.setCreateTime(organization.getSysCreateTime());
organizationDto.setOrganizationLevel(organization.getOrganizationLevel());
organizationDto.setIsMakeOrg(organization.getIsMakeOrg());
organizationDto.setIsServiceSite(organization.getIsServiceSite());
organizationDto.setStatus(organization.getStatus());
organizationDto.setRemark(organization.getRemark());
organizationDto.setParentId(orgTree.getParentId());
organizationDto.setTreeType(orgTree.getTreeType());
organizationDto.setDeleted(organization.getDeleted());
try {
mainDbService.syncOrganization(organizationDto);
} catch (Exception e) {
e.printStackTrace();
ErrorLog error = new ErrorLog();
error.setLogError("内部同步处理机构信息错误:" + e.getMessage());
error.setType(3);
error.setDataId(organizationDto.getKid());
error.setNewId(organizationDto.getId());
error.setDataType(1);
service.saveError(error);
mess = "再次同步机构错误:" + organizationDto.getKid();
}
return mess;
}
//同步用户
private String user(String id) {
String mess = null;
User user = userDao.get(id);
Person person = personDao.get(id);
Account account = accountDao.get(id);
UserDto userDto = new UserDto();
userDto.setId(user.getId());
userDto.setKid(user.getKid());
userDto.setPersonId(user.getPersonId());
userDto.setName(user.getName());
if (person.getBirthday() != null) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
userDto.setBirthday(dateTimeFormatter.format(person.getBirthday()));
}
userDto.setLoginName(account.getLoginName());
userDto.setAvatar(account.getAvatar());
userDto.setEmail(account.getEmail());
userDto.setStatus(account.getStatus());
if (person.getGender().equals(1)) {
userDto.setGender("male");
}
if (person.getGender().equals(2)) {
userDto.setGender("female");
}
userDto.setIdType(person.getIdType());
userDto.setIdNumber(person.getIdNumber());
userDto.setHomePhoneNo(person.getHomePhoneNo());
userDto.setNationality(person.getNationality());
userDto.setNation(person.getNation());
userDto.setGraduatedFrom(person.getGraduatedFrom());
userDto.setGraduatedMajor(person.getGraduatedMajor());
userDto.setHighestEducation(person.getHighestEducation());
userDto.setDataFrom(person.getDataFrom());
userDto.setLanguage(account.getLanguage());
userDto.setBandCode(user.getBandCode());
userDto.setBandDesc(user.getBandDesc());
userDto.setPayrollPlaceId(user.getPayrollPlaceId());
userDto.setPayrollPlaceName(user.getPayrollPlaceName());
userDto.setPositionMgrLevel(user.getPositionMgrLevel());
userDto.setEmployeeStatus(user.getEmployeeStatus());
userDto.setMobile(user.getMobile());
userDto.setOrgTreeType(user.getOrgTreeType());
userDto.setOldEnterpriseId(user.getOldEnterpriseId());
userDto.setOldDepartId(user.getOldDepartId());
userDto.setUserNo(user.getUserNo());
userDto.setEnterpriseId(user.getEnterpriseId());
userDto.setDepartId(user.getDepartId());
userDto.setOrgNamePath(user.getOrgNamePath());
userDto.setDomainId(user.getDomainId());
userDto.setSassId(user.getSassId());
userDto.setTelephoneNo(user.getTelephoneNo());
userDto.setDuty(user.getDuty());
userDto.setRank(user.getRank());
userDto.setDescription(user.getDescription());
userDto.setLearningDuration(user.getLearningDuration());
try {
mainDbService.syncUser(userDto);
} catch (Exception e) {
e.printStackTrace();
ErrorLog error = new ErrorLog();
error.setLogError("内部同步处理用户信息错误:" + e.getMessage());
error.setType(3);
error.setDataId(userDto.getKid());
error.setNewId(userDto.getId());
error.setDataType(2);
service.saveError(error);
mess = "再次同步用户信息错误:" + userDto.getKid();
}
return mess;
}
//删除机构
private String delOrg(String id) {
String mess = null;
Organization organization = organizationDao.get(id);
try {
mainDbService.syncDeleteOrganization(organization.getId());
} catch (Exception e) {
e.printStackTrace();
ErrorLog error = new ErrorLog();
error.setLogError("内部同步处理机构信息错误:" + e.getMessage());
mess = error.getLogError();
error.setType(3);
error.setDataId(organization.getKid());
error.setNewId(organization.getId());
error.setDataType(3);
service.saveError(error);
}
return mess;
}
//删除用户
private String delUser(String id) {
String mess = null;
User user = userDao.get(id);
try {
mainDbService.syncDeleteUser(id, null);
} catch (Exception e) {
ErrorLog error = new ErrorLog();
error.setLogError("内部同步处理用户信息错误:" + e.getMessage());
mess = error.getLogError();
error.setType(3);
error.setDataId(user.getKid());
error.setNewId(user.getId());
error.setDataType(4);
service.saveError(error);
}
ErrorLog error = new ErrorLog();
error.setLogError("同步删除用户信息错误:基本数据未同步成功");
error.setType(1);
error.setDataId(id);
error.setDataType(4);
mess = error.getLogError();
service.saveError(error);
return mess;
}
}

View File

@@ -0,0 +1,13 @@
package com.xboe.basic.dao;
import org.springframework.stereotype.Repository;
import com.xboe.basic.entity.Account;
import com.xboe.core.orm.BaseDao;
/**
* 账号信息DAO
*/
@Repository
public class AccountDao extends BaseDao<Account> {
}

View File

@@ -0,0 +1,16 @@
package com.xboe.basic.dao;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.xboe.basic.entity.Organization;
@Repository
public interface BasicOrganizationDao extends JpaRepository<Organization,String>{
@Query(value = "from Organization where kid=?1")
public List<Organization> getByKid(String id);
}

View File

@@ -0,0 +1,11 @@
package com.xboe.basic.dao;
import org.springframework.stereotype.Repository;
import com.xboe.basic.entity.ErrorLog;
import com.xboe.core.orm.BaseDao;
@Repository
public class ErrorLogDao extends BaseDao<ErrorLog>{
}

View File

@@ -0,0 +1,12 @@
package com.xboe.basic.dao;
import org.springframework.stereotype.Repository;
import com.xboe.basic.entity.OrgTree;
import com.xboe.core.orm.BaseDao;
@Repository
public class OrgTreeDao extends BaseDao<OrgTree> {
}

View File

@@ -0,0 +1,11 @@
package com.xboe.basic.dao;
import org.springframework.stereotype.Repository;
import com.xboe.basic.entity.Organization;
import com.xboe.core.orm.BaseDao;
@Repository
public class OrganizationDao extends BaseDao<Organization> {
}

View File

@@ -0,0 +1,11 @@
package com.xboe.basic.dao;
import org.springframework.stereotype.Repository;
import com.xboe.basic.entity.Person;
import com.xboe.core.orm.BaseDao;
@Repository
public class PersonDao extends BaseDao<Person>{
}

View File

@@ -0,0 +1,10 @@
package com.xboe.basic.dao;
import org.springframework.stereotype.Repository;
import com.xboe.basic.entity.User;
import com.xboe.core.orm.BaseDao;
@Repository
public class UserDao extends BaseDao<User> {
}

View File

@@ -0,0 +1,10 @@
package com.xboe.basic.dao;
import org.springframework.stereotype.Repository;
import com.xboe.basic.entity.ViewUser;
import com.xboe.core.orm.BaseDao;
//@Repository
public class ViewUserDao extends BaseDao<ViewUser> {
}

View File

@@ -0,0 +1,77 @@
package com.xboe.basic.entity;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity;
import com.xboe.core.orm.annotation.MetaInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDateTime;
/**
* 账号表,只是记录登录的账号信息,无任务业务实名类的信息
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = SysConstant.TABLE_PRE + "account")
public class Account extends IdEntity{
private static final long serialVersionUID = 1L;
/**0 临时数据*/
public static final int STATUS_TEMPORARY=0;
/**1 正常数据*/
public static final int STATUS_NORMAL=1;
/**2 停用数据*/
public static final int STATUS_DEAD=2;
@MetaInfo("人员id")
@Column(name = "person_id", length = 36)
private String personId;
@MetaInfo("登录名")
@Column(name = "login_name", nullable = true, length = 30)
private String loginName;
@MetaInfo("用户头像地址")
@Column(name = "avatar", nullable = true, length = 100)
private String avatar;
@MetaInfo("手机号")
@Column(name = "mobile", length = 11)
private String mobile;
@Column(name = "email", length = 100)
private String email;
@Column(name = "nick_name", length = 20)
private String nickName;
@Column(name = "pass_key", length = 6)
private String passKey;
@Column(name = "pass_value", length = 32)
private String passValue;
@Column(name = "reg_time" )
private LocalDateTime regTime;
@MetaInfo("语言")
@Column(name = "language",length=30)
private String language;
/**
* 0临时1 正常2停用
*/
@Column(name = "status", length = 1)
private Integer status;
@Column(name = "deleted", length = 1)
private Boolean deleted;
}

View File

@@ -0,0 +1,51 @@
package com.xboe.basic.entity;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity;
import com.xboe.core.orm.annotation.MetaInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = SysConstant.TABLE_PRE + "log_error")
public class ErrorLog extends IdEntity{
private static final long serialVersionUID = 1L;
@MetaInfo("日志时间")
@Column(name = "log_time" )
private LocalDateTime logTime;
@MetaInfo("日志对象")
@Column(name = "log_object", columnDefinition = "text")
private String logObject;
@MetaInfo("日志错误内容")
@Column(name = "log_error", length=500)
private String logError;
@MetaInfo("数据的id")
@Column(name = "data_id", length=36)
private String dataId;
@MetaInfo("生成的新的id")
@Column(name = "new_id", length=36)
private String newId;
@MetaInfo("数据类型,1表同步机构2表同步用户3表删除机构4表删除用户")
@Column(name = "data_type", length=1)
private Integer dataType;
@Column(name = "error_type", length=1)
private Integer type;//1是同步2是内部同步
}

View File

@@ -0,0 +1,48 @@
package com.xboe.basic.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=false)
@Entity
@Table(name = SysConstant.TABLE_PRE+"org_tree")
public class OrgTree extends IdEntity {
private static final long serialVersionUID = 1L;
/**
* 机构id
* */
@Column(name = "org_id",length = 18)
private String orgId;
/**
* 上级id
* */
@Column(name = "parent_id",length = 36)
private String parentId;
/**
* 体系标识
* */
@Column(name = "tree_type",length = 20)
private String treeType;
/**
* 备注
* */
@Column(name = "remark",length = 200)
private String remark;
/**机构的路径,下次更新应该加上*/
@Column(name = "name_path",length = 200)
private String namePath;
}

View File

@@ -0,0 +1,129 @@
package com.xboe.basic.entity;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* 机构实体
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = SysConstant.TABLE_PRE + "organization")
public class Organization extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 原系统ID
*/
@Column(name = "kid", length = 36)
private String kid;
/**
* 组织部门代码
*/
@Column(name = "code", length = 50)
private String code;
/**
* 组织名
*/
@Column(name = "name", nullable = false, length = 100)
private String name;
/**
* 路径不用每次都去计算了用默认tree的
*/
@Column(name = "name_path", length = 300)
private String namePath;
/**
* 机构名称简称
*/
@Column(name = "short_name",length = 30)
private String shortName;
/**
* 多租户下的id,此机构属于哪个sass用户
*/
@Column(name = "sass_id",length = 36)
private String sassId;
/**
* 系统级别
*/
@Column(name = "sys_level",length = 2)
private Integer sysLevel;
/**
* 是否是默认注册组织机构
*/
@Column(name = "is_default",length = 1)
private Boolean isDefault;
/**
* 描述
*/
@Column(name = "description", columnDefinition = "text")
private String description;
/**
* 数据来源
*/
@Column(name = "data_from", length = 100)
private String dataFrom;
/**
* 创建时间
*/
// @Column(name = "create_time", length = 36)
// private LocalDateTime createTime;
/**
* 创建来源
*/
@Column(name = "create_from", length = 100)
private String createFrom;
/**
* 组织级别
*/
@Column(name = "organization_level", length = 50)
private String organizationLevel;
/**
* 是否制造组织
*/
@Column(name = "is_make_org", length = 1)
private Boolean isMakeOrg;
/**
* 是否服务现地
*/
@Column(name = "is_service_site", length = 1)
private Boolean isServiceSite;
/**
* 状态
* 0临时1正常2停用
*/
@Column(name = "status", nullable = false, length = 1)
private Integer status;
@Column(name = "remark", length = 200)
private String remark;
// @Column(name = "deleted")
// private Boolean deleted;
}

View File

@@ -0,0 +1,118 @@
package com.xboe.basic.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper=false)
@Entity
@Table(name = SysConstant.TABLE_PRE+"person")
public class Person extends IdEntity {
private static final long serialVersionUID = 1L;
/**临时数据*/
public static final int STATUS_TEMPORARY=0;
/**正常数据*/
public static final int STATUS_NORMAL=1;
/**死数据*/
public static final int STATUS_DEAD=4;
/**
* 姓名
* */
@Column(name = "name",length = 100)
private String name;
/**
* 性别
* */
@Column(name = "gender",length = 1)
private Integer gender;
/**
* 出生日期
* */
@JsonFormat(pattern = "yyyy-MM-dd")
@Column(name = "birthday")
private LocalDateTime birthday;
/**
* 证件类型
* */
@Column(name = "id_type")
private String idType;
/**
* 证件号码
* */
@Column(name = "id_number",length = 18)
private String idNumber;
/**
* 家庭电话
*/
@Column(name = "home_phone_no", length = 50)
private String homePhoneNo;
/**
* 国籍
*/
@Column(name = "nationality", length = 50)
private String nationality;
/**
* 民族
* */
@Column(name = "nation")
private String nation;
/**
* 毕业院校
*/
@Column(name = "graduated_from", length = 50)
private String graduatedFrom;
/**
* 毕业专业
*/
@Column(name = "graduated_major", length = 50)
private String graduatedMajor;
/**
* 最高学历
*/
@Column(name = "highest_education", length = 50)
private String highestEducation;
/**
* 数据来源说明
* */
@Column(name = "data_from",length = 500)
private String dataFrom;
/**
* 状态
* 0表临时1表正常。。。4表已删除
* */
@Column(name = "status")
private Integer status;
/**
*备注
* */
@Column(name = "remark")
private String remark;
}

View File

@@ -0,0 +1,174 @@
package com.xboe.basic.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 用户信息表
* 存储所有的用户信息,原表中的部分信息
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = SysConstant.TABLE_PRE + "user")
public class User extends IdEntity {
private static final long serialVersionUID = 1L;
/**
* 人员基本信息id
*/
@Column(name = "person_id", length = 19)
private String personId;
/**
* 原系统的kid
*/
@Column(name = "kid", length = 36)
private String kid;
/**
* 手机号
*/
@Column(name = "mobile", length = 30)
private String mobile;
/**
* 默认的组织机构体系
*/
@Column(name = "org_tree_type", length = 19)
private String orgTreeType;
@Column(name = "old_enterprise_id", length = 36)
private String oldEnterpriseId;
/**
* 旧系统机构id
*/
@Column(name = "old_depart_id", length = 36)
private String oldDepartId;
/**
* 姓名
*/
@Column(name = "name", length = 30)
private String name;
/**
* 员工编号
*/
@Column(name = "user_no", length = 30)
private String userNo;
/**
* 所在公司
*/
@Column(name = "enterprise_id", length = 36)
private String enterpriseId;
/**级别代码*/
@Column(name = "band_code", length = 20)
private String bandCode;
/**级别描述*/
@Column(name = "band_desc", length = 200)
private String bandDesc;
/**
* 发薪地id
*/
@Column(name = "payroll_place_id",length=36)
private String payrollPlaceId;
/**
* 发薪地名称
*/
@Column(name = "payroll_place_name",length=150)
private String payrollPlaceName;
/**
* 管理序列职级
*/
@Column(name = "position_mgr_level", length = 150)
private String positionMgrLevel;
/**
* 所在部门
*/
@Column(name = "depart_id", length = 18)
private String departId;
/**
* 机构名称/分隔的全路径
*/
@Column(name = "org_name_path", length = 300)
private String orgNamePath;
/**
* 所在域
*/
@Column(name = "domain_id", length = 36)
private String domainId;
/**
* 扩展字段,多租户系统的标识值
*/
@Column(name = "sass_id", length = 36)
private String sassId;
/**
* 办公电话
*/
@Column(name = "telephone_no", length = 50)
private String telephoneNo;
/**
* 职务
*/
@Column(name = "duty", length = 50)
private String duty;
/**
* 职级
*/
@Column(name = "rank", length = 50)
private String rank;
/**
* 描述
*/
@Column(name = "description")
private String description;
/**
* boe的时长和系统时长单独保存
*/
@Column(name = "learning_Duration", length = 11)
private Integer learningDuration;
/**
* 在职状态2在职3是离职
*/
@Column(name = "employee_status", length = 1)
private Integer employeeStatus;
/**
* 0临时1是正常2是停用
*/
@Column(name = "status", length = 1)
private Integer status;
@Column(name = "deleted")
private Boolean deleted;
}

View File

@@ -0,0 +1,358 @@
package com.xboe.basic.entity;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity;
import com.xboe.core.orm.annotation.MetaInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 账户,人员,机构,用户的合表
*/
@Data
@EqualsAndHashCode(callSuper = false)
//@Entity
//@Table(name = SysConstant.TABLE_PRE + "view_user")
public class ViewUser extends IdEntity{
private static final long serialVersionUID = 1L;
@MetaInfo("原系统中的id")
@Column(name = "sys_id", length = 36)
private String sysId;
@MetaInfo("登录名")
@Column(name = "login_name", nullable = true, length = 30)
private String loginName;
@MetaInfo("用户头像地址")
@Column(name = "avatar", nullable = true, length = 100)
private String avatar;
@MetaInfo("手机号")
@Column(name = "mobile", length = 11)
private String mobile;
@Column(name = "email", length = 100)
private String email;
@Column(name = "nick_name", length = 20)
private String nickName;
@Column(name = "pass_key", length = 6)
private String passKey;
@Column(name = "pass_value", length = 32)
private String passValue;
@Column(name = "reg_time" )
private LocalDateTime regTime;
@MetaInfo("关联的公司id")
@Column(name = "company_id", length = 36)
private String companyId;
// 状态1, 正常2停用
@Column(name = "status", length = 1)
private Integer status;
@Column(name = "deleted", length = 1)
private Boolean deleted;
/*
* 旧系统父id
*/
@Column(name = "sys_parent_id", length = 36)
private String sysParentId;
/**
* 组织部门代码
*/
@Column(name = "code", nullable = false, length = 50)
private String code;
/**
* 组织名
*/
@Column(name = "org_name", nullable = false, length = 50)
private String orgName;
/**
* 组织全路径
*/
@Column(name = "name_path")
private String namePath;
/**
* 父组织部门ID
*/
@Column(name = "parent_id", length = 18)
private String parentId;
/**
* 描述
*/
@Column(name = "description", columnDefinition = "text")
private String description;
/**
* 域ID
*/
@Column(name = "domain_id", length = 36)
private String domainId;
/**
* 组织部门经理ID
*/
@Column(name = "orgnization_manager_id", length = 36)
private String orgnizationManagerId;
/**
* 组织级别
*/
@Column(name = "organization_level", length = 50)
private String organizationLevel;
/**
* 是否制造组织
*/
@Column(name = "is_make_org", length = 1)
private Boolean isMakeOrg;
/**
* 是否服务现地
*/
@Column(name = "is_service_site", length = 1)
private Boolean isServiceSite;
/**
* 是否默认注册组织
*/
@Column(name = "is_default_organization", length = 1)
private Boolean isDefaultOrganization;
/**
* 状态
* 0临时1正常2停用
*/
@Column(name = "org_status", nullable = false, length = 1)
private Integer orgStatus;
/**
* 姓名
* */
@Column(name = "name",length = 100)
private String name;
/**
* 性别
* */
@Column(name = "gender",length = 1)
private Integer gender;
/**
* 出生日期
* */
@JsonFormat(pattern = "yyyy-MM-dd")
@Column(name = "birthday")
private LocalDateTime birthday;
/**
* 证件类型
* */
@Column(name = "id_type")
private String idType;
/**
* 证件号码
* */
@Column(name = "id_number",length = 18)
private String idNumber;
/**
* 家庭电话
*/
@Column(name = "home_phone_no", length = 50)
private String homePhoneNo;
/**
* 国籍
*/
@Column(name = "nationality", length = 50)
private String nationality;
/**
* 民族
* */
@Column(name = "nation")
private String nation;
/**
* 毕业院校
*/
@Column(name = "graduated_from", length = 50)
private String graduatedFrom;
/**
* 毕业专业
*/
@Column(name = "graduated_major", length = 50)
private String graduatedMajor;
/**
* 最高学历
*/
@Column(name = "highest_education", length = 50)
private String highestEducation;
/**
* 数据来源说明
* */
@Column(name = "data_from",length = 500)
private String dataFrom;
/**
* 状态
* 0表临时1表正常。。。9表不存在
* */
@Column(name = "user_status")
private Integer userStatus;
/**
*备注
* */
@Column(name = "remark")
private String remark;
/**
* 旧系统机构id
*/
@Column(name = "sys_depart_id", length = 36)
private String sysDepartId;
/**
* 员工编号
*/
@Column(name = "user_no", length = 30)
private String userNo;
/**
* 手机号
*/
@Column(name = "mobile_no", length = 11)
private String mobileNo;
/**
* 办公电话
*/
@Column(name = "telephone_no", length = 50)
private String telephoneNo;
/**
* 职务
*/
@Column(name = "duty", length = 50)
private String duty;
/**
* 职级
*/
@Column(name = "rank", length = 50)
private String rank;
@Transient
private String departName;
/**
* 扩展字段,多租户系统的标识值
*/
@Column(name = "sass_id", length = 18)
private String sassId;
/**
* 用户类型1表学员2表教师3表管理员
* 该字段暂用于表示是否前台管理员
*/
@Column(name = "user_type", length = 1)
private Integer userType;
/**
* 学习总时长
*/
@Column(name = "study_total", length = 11)
private Integer studyTotal;
/**
* boe的时长和系统时长单独保存
*/
@Column(name = "learning_Duration", length = 11)
private Integer learningDuration;
/**
* 最近一次登录时间
*/
@Column(name = "last_login_at")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime lastLoginAt;
/**
* 最近一次登录IP
*/
@Column(name = "last_login_ip", length = 30)
private String lastLoginIp;
/**
* 最近一次登录MAC地址
*/
@Column(name = "last_login_mac", length = 30)
private String lastLoginMac;
/**
* 最近一次操作时间
*/
@Column(name = "last_action_at")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime lastActionAt;
/**
* 最近一次操作IP
*/
@Column(name = "last_action_ip", length = 30)
private String lastActionIp;
/**
* 最近一次操作MAC地址
*/
@Column(name = "last_action_mac", length = 30)
private String lastActionMac;
/**
* 在线状态;
* 0离线1在线
*/
@Column(name = "online", length = 1)
private Boolean online;
}

View File

@@ -0,0 +1,49 @@
package com.xboe.basic.service;
import com.xboe.basic.entity.ErrorLog;
import com.xboe.basic.entity.User;
import com.xboe.common.PageList;
import com.xboe.dto.OrganizationDto;
import com.xboe.dto.UserDto;
/**
* 基本数据同步的相关处理
* @author seastar
*
*/
public interface IBasicDataSyncService {
/**
* 同步机构数据
* @param dto
*/
void syncOrganization(OrganizationDto dto);
/**
* 同步人员数据
* @param dto
*/
void syncUser(UserDto dto);
/**
* 同步删除机构 kid 老系统id
* @param id
*/
String syncDeleteOrganization(String kid);
/**
* 同步删除用户
* @param kid,老系统id
* @param code
*/
String syncDeleteUser(String kid,String code);
void saveError(ErrorLog error);
PageList<ErrorLog> findLogs(int pageIndex,int pageSize,ErrorLog err);
}

View File

@@ -0,0 +1,13 @@
package com.xboe.basic.service;
import com.xboe.basic.entity.Organization;
public interface IOrganizationService {
/**
* 根据kid获取机构信息
* @param kid
* @return
*/
Organization getByKid(String kid);
}

View File

@@ -0,0 +1,331 @@
package com.xboe.basic.service.impl;
import java.time.LocalDateTime;
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 com.xboe.basic.dao.AccountDao;
import com.xboe.basic.dao.ErrorLogDao;
import com.xboe.basic.dao.OrgTreeDao;
import com.xboe.basic.dao.OrganizationDao;
import com.xboe.basic.dao.PersonDao;
import com.xboe.basic.dao.UserDao;
import com.xboe.basic.entity.Account;
import com.xboe.basic.entity.ErrorLog;
import com.xboe.basic.entity.OrgTree;
import com.xboe.basic.entity.Organization;
import com.xboe.basic.entity.Person;
import com.xboe.basic.entity.User;
import com.xboe.basic.service.IBasicDataSyncService;
import com.xboe.common.OrderCondition;
import com.xboe.common.PageList;
import com.xboe.common.utils.IDGenerator;
import com.xboe.core.orm.FieldFilters;
import com.xboe.core.orm.QueryBuilder;
import com.xboe.dto.OrganizationDto;
import com.xboe.dto.UserDto;
@Service("basicService")
public class BasicDataSyncServiceImpl implements IBasicDataSyncService{
@Autowired
OrganizationDao orgDao;
@Autowired
OrgTreeDao orgTreeDao;
@Autowired
AccountDao accountDao;
@Autowired
PersonDao personDao;
@Autowired
UserDao userDao;
@Autowired
ErrorLogDao errorDao;
@Override
@Transactional("transactionManagerBasic")
public synchronized void syncOrganization(OrganizationDto dto) {
Organization org=orgDao.findOne(FieldFilters.eq("kid", dto.getKid()));
if(org==null) {//新增加
org=new Organization();
org.setId(IDGenerator.generate());
org.setKid(dto.getKid());
org.setCode(org.getCode());
org.setCreateFrom(dto.getCreateFrom());
org.setSysCreateTime(dto.getCreateTime());
org.setDataFrom(dto.getDataFrom());
org.setDeleted(false);
org.setDescription(dto.getDescription());
org.setIsDefault(dto.getIsDefault());
org.setIsMakeOrg(dto.getIsMakeOrg());
org.setIsServiceSite(dto.getIsServiceSite());
org.setName(dto.getName());
org.setNamePath(dto.getNamePath());
//org.setOrganizationLevel(dto.getSysLevel());
org.setSysLevel(dto.getSysLevel());
org.setRemark(dto.getRemark());
org.setSassId(dto.getSassId());
org.setShortName(dto.getShortName());
org.setStatus(dto.getStatus());
org.setOrganizationLevel(dto.getOrganizationLevel());
dto.setId(org.getId());
orgDao.save(org);
OrgTree treeNode=new OrgTree();
treeNode.setOrgId(org.getId());
treeNode.setTreeType(dto.getTreeType());
treeNode.setParentId("");
treeNode.setRemark("系统同步");
if(StringUtils.isNotBlank(dto.getParentId())){
//检查它的上级id是哪个
String parentId=(String)orgDao.findField("id",FieldFilters.eq("kid",dto.getParentId()));
//如果没有orgId,应该再去获取,但是这里没有再去获取的途径,
if(StringUtils.isNotBlank(parentId)){
treeNode.setParentId(parentId);
dto.setParentId(parentId);//设置dto的parentId;
}
}
orgTreeDao.save(treeNode);
}else {//更新
dto.setId(org.getId());
// org.setCode(org.getCode());
// org.setCreateFrom(dto.getCreateFrom());
// org.setCreateTime(dto.getCreateTime());
// org.setDataFrom(dto.getDataFrom());
if(dto.getDeleted()!=null && dto.getDeleted()) {
org.setDeleted(dto.getDeleted());
}
org.setDescription(dto.getDescription());
org.setIsDefault(dto.getIsDefault());
org.setIsMakeOrg(dto.getIsMakeOrg());
org.setIsServiceSite(dto.getIsServiceSite());
org.setName(dto.getName());
org.setNamePath(dto.getNamePath());
//org.setOrganizationLevel(dto.getSysLevel());
org.setSysLevel(dto.getSysLevel());
org.setRemark(dto.getRemark());
org.setSassId(dto.getSassId());
org.setShortName(dto.getShortName());
org.setOrganizationLevel(dto.getOrganizationLevel());
org.setStatus(dto.getStatus());
orgDao.update(org);
OrgTree treeNode=orgTreeDao.findOne(FieldFilters.eq("orgId",org.getId()));
//得到对应的parentId,有可能修改了对应的上级关系
String parentId="";
if(StringUtils.isNotBlank(dto.getParentId())){
parentId=(String)orgDao.findField("id",FieldFilters.eq("kid",dto.getParentId()));
}
dto.setParentId(parentId);
if(treeNode!=null){
treeNode.setParentId(parentId);
orgTreeDao.update(treeNode);
}else {
treeNode=new OrgTree();
treeNode.setOrgId(org.getId());
treeNode.setTreeType(dto.getTreeType());
treeNode.setParentId(parentId);
treeNode.setRemark("系统同步");
orgTreeDao.save(treeNode);
}
}
}
@Override
@Transactional("transactionManagerBasic")
public synchronized void syncUser(UserDto dto) {
Integer employeeStatus=dto.getEmployeeStatus();
//获取原机构的id
if(StringUtils.isNotBlank(dto.getOldDepartId())) {
Object idObj = orgDao.findField("id", FieldFilters.eq("kid", dto.getOldDepartId()));
if(idObj!=null) {
dto.setDepartId(idObj.toString());
}
}
//同一个用户工号对应 多个kid的情况,所以直接根据kid查询是不对的,所以这里按工号查询,不使用kid
User user = userDao.findOne(FieldFilters.eq("userNo", dto.getUserNo()));
if(user==null) {
//人员基本信息
Person person=new Person();
person.setId(IDGenerator.generate());
//person.setBirthday(dto.getBirthday());
person.setDataFrom(dto.getDataFrom());
person.setGender(dto.toGenderInteger());
person.setGraduatedFrom(dto.getGraduatedFrom());
person.setGraduatedMajor(dto.getGraduatedMajor());
person.setHighestEducation(dto.getHighestEducation());
person.setHomePhoneNo(dto.getHomePhoneNo());
person.setIdNumber(dto.getIdNumber());
person.setIdType(dto.getIdType());
person.setName(dto.getName());
person.setNation(dto.getNation());
person.setNationality(dto.getNationality());
person.setRemark("用户同步");
person.setStatus(Person.STATUS_NORMAL);//
//账号信息
Account a=new Account();
//同步过程中一样,可以不一样。因为此系统当前是一致的,所以统一使用一个
a.setId(person.getId());
a.setPersonId(person.getId());
a.setAvatar(dto.getAvatar());
a.setDeleted(false);
a.setEmail(dto.getEmail());
a.setLanguage(dto.getLanguage());
a.setLoginName(dto.getLoginName());
a.setMobile(dto.getMobile());
a.setPassKey("");
a.setPassValue("");
a.setStatus(Account.STATUS_NORMAL);//正常状态
if(employeeStatus==3) {
a.setDeleted(true);
}else {
a.setDeleted(false);
}
user=new User();
//同步过程中一样,可以不一样。因为此系统当前是一致的,所以统一使用一个
user.setId(a.getId());
user.setPersonId(person.getId());
user.setEnterpriseId(dto.getEnterpriseId());
user.setDepartId(dto.getDepartId());
user.setDescription(dto.getDescription());
user.setDomainId(dto.getDomainId());
user.setDuty(dto.getDuty());
user.setKid(dto.getKid());
user.setLearningDuration(dto.getLearningDuration());
user.setMobile(dto.getMobile());
user.setName(dto.getName());
user.setOldEnterpriseId(dto.getOldEnterpriseId());
user.setOldDepartId(dto.getOldDepartId());
user.setOrgNamePath(dto.getOrgNamePath());
user.setOrgTreeType(dto.getOrgTreeType());
user.setRank(dto.getRank());
user.setSassId(dto.getSassId());
user.setTelephoneNo(dto.getTelephoneNo());
user.setUserNo(dto.getUserNo());
user.setPayrollPlaceId(dto.getPayrollPlaceId());
user.setPayrollPlaceName(dto.getPayrollPlaceName());
user.setEmployeeStatus(dto.getEmployeeStatus());
if(user.getStatus()==null) {
user.setStatus(1);//如果为空,就是正常
}
if(user.getEmployeeStatus()==null) {
user.setEmployeeStatus(2);//在职状态
}
if(employeeStatus==3) {
user.setDeleted(true);
}else {
user.setDeleted(false);
}
personDao.save(person);
accountDao.save(a);
userDao.save(user);
dto.setId(user.getId());
}else {
//更新时不更新用户基本信息和账户信息
user.setDescription(dto.getDescription());
user.setKid(dto.getKid());
user.setDomainId(dto.getDomainId());
user.setDuty(dto.getDuty());
user.setLearningDuration(dto.getLearningDuration());
user.setMobile(dto.getMobile());
user.setOldEnterpriseId(dto.getOldEnterpriseId());
user.setOldDepartId(dto.getOldDepartId());
user.setOrgNamePath(dto.getOrgNamePath());
user.setOrgTreeType(dto.getOrgTreeType());
user.setEnterpriseId(dto.getEnterpriseId());
user.setDepartId(dto.getDepartId());
user.setRank(dto.getRank());
user.setSassId(dto.getSassId());
user.setTelephoneNo(dto.getTelephoneNo());
user.setPayrollPlaceId(dto.getPayrollPlaceId());
user.setPayrollPlaceName(dto.getPayrollPlaceName());
user.setEmployeeStatus(dto.getEmployeeStatus());
if(employeeStatus==3) {
user.setDeleted(true);
}else {
user.setDeleted(false);
}
userDao.update(user);
dto.setId(user.getId());
}
}
@Override
public PageList<ErrorLog> findLogs(int pageIndex, int pageSize,ErrorLog log) {
QueryBuilder builder = QueryBuilder.from(ErrorLog.class);
if(log.getDataType()!=null){
builder.addFilter(FieldFilters.eq("dataType",log.getDataType()));
}
if(log.getType()!=null){
builder.addFilter(FieldFilters.eq("type",log.getType()));
}
builder.setPageIndex(pageIndex);
builder.setPageSize(pageSize);
builder.addOrder(OrderCondition.desc("logTime"));
return errorDao.findPage(builder.builder());
}
@Override
@Transactional("transactionManagerBasic")
public void saveError(ErrorLog error) {
if(error.getLogTime()==null) {
error.setLogTime(LocalDateTime.now());
}
errorDao.save(error);
}
@Override
@Transactional("transactionManagerBasic")
public String syncDeleteOrganization(String kid) {
//如果机构下有用户怎么办? 第二 ,是否也同步删除机构关系中的数据?
Organization org=orgDao.findOne(FieldFilters.eq("kid",kid));
//System.out.println(org.getId()+"1313131312312");
if(org!=null) {
orgDao.setDeleted(org.getId());
return org.getId();
}
return null;
}
@Override
@Transactional("transactionManagerBasic")
public String syncDeleteUser(String kid,String code) {
//同一个code,不同的id的部分
User user = userDao.findOne(FieldFilters.eq("kid", kid));
if(user!=null) {
userDao.setDeleted(user.getId());
accountDao.setDeleted(user.getId());
return user.getId();
}
return null;
}
}

View File

@@ -0,0 +1,68 @@
package com.xboe.datasource;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="entityManagerFactoryBasic",
transactionManagerRef="transactionManagerBasic",
basePackages= { "com.xboe.basic" }) //设置Repository所在位置
public class BasicJPAConfig {
@Autowired
@Qualifier("basicDataSource")
private DataSource basicDataSource;
@Autowired
private JpaProperties jpaProperties;
@Autowired
private HibernateProperties hibernateProperties;
private Map<String, Object> getVendorProperties() {
return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
}
@Primary
@Bean(name = "entityManagerBasic")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}
@Primary
@Bean(name = "entityManagerFactoryBasic")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
return builder
.dataSource(basicDataSource)
.packages("com.xboe.basic") //设置实体类所在位置
.persistenceUnit("basicPersistenceUnit")
.properties(getVendorProperties())
.build();
}
@Primary
@Bean(name = "transactionManagerBasic")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
}

View File

@@ -0,0 +1,29 @@
package com.xboe.datasource;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class DataSourceConfiguration {
@Primary
@Bean(name="basicDataSource")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name="primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}

View File

@@ -0,0 +1,63 @@
package com.xboe.datasource;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="entityManagerFactoryPrimary",
transactionManagerRef="transactionManagerPrimary",
basePackages= { "com.xboe.primary" }) //设置Repository所在位置
public class MainJPAConfig {
@Autowired
@Qualifier("primaryDataSource")
private DataSource primaryDataSource;
@Autowired
private JpaProperties jpaProperties;
@Autowired
private HibernateProperties hibernateProperties;
private Map<String, Object> getVendorProperties() {
return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
}
@Bean(name = "entityManagerPrimary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}
@Bean(name = "entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
return builder
.dataSource(primaryDataSource)
.packages("com.xboe.primary") //设置实体类所在位置
.persistenceUnit("primaryPersistenceUnit")
.properties(getVendorProperties())
.build();
}
@Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
}

View File

@@ -0,0 +1,115 @@
package com.xboe.dto;
import java.time.LocalDateTime;
import lombok.Data;
/**
* 按数据标准构建
*/
@Data
public class OrganizationDto implements java.io.Serializable{
private static final long serialVersionUID = 1L;
/**新系统的id*/
private String id;
/**
* 老系统ID
*/
private String kid;
/**
* 组织部门代码
*/
private String code;
/**
* 组织名
*/
private String name;
/**使用默认体系下机构的namePath路径中间使用/分开*/
private String namePath;
/**
* 机构名称简称
*/
private String shortName;
/**
* 多租户下的id,此机构属于哪个sass用户
*/
private String sassId;
/**
* 系统级别
*/
private Integer sysLevel;
/**
* 是否是默认注册组织机构
*/
private Boolean isDefault;
/**
* 描述
*/
private String description;
/**
* 数据来源
*/
private String dataFrom;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 创建来源
*/
private String createFrom;
/**
* 组织级别
*/
private String organizationLevel;
/**
* 是否制造组织
*/
private Boolean isMakeOrg;
/**
* 是否服务现地
*/
private Boolean isServiceSite;
/**
* 状态 0临时1正常2停用
*/
private Integer status;
/**备注*/
private String remark;
//以下字段用于检查体系
/**
* 上级id
* */
private String parentId;
/**
* 体系标识
* */
private String treeType;
/**
* 是否已删除
*/
private Boolean deleted;
}

View File

@@ -0,0 +1,152 @@
package com.xboe.dto;
import lombok.Data;
/**
* 按用户的数据标准构建
*/
@Data
public class UserDto implements java.io.Serializable{
private static final long serialVersionUID = 1L;
/**新系统的用户id*/
private String id;
/** 原系统的kid */
private String kid;
/**人员基本信息id*/
private String personId;
/**姓名*/
private String name;
/**出生日期 yyyy-MM-dd*/
private String birthday;
/**登录名*/
private String loginName;
/**头像路径*/
private String avatar;
/**邮箱*/
private String email;
/**状态*/
private Integer status;
/**性别,男,女 */
private String gender;
/**证件类型, 身份证*/
private String idType;
/**证件号码*/
private String idNumber;
/**家庭电话*/
private String homePhoneNo;
/**国家*/
private String nationality;
/**民族*/
private String nation;
/**毕来院校*/
private String graduatedFrom;
/**毕业专业*/
private String graduatedMajor;
/**最高学历*/
private String highestEducation;
/**数据来源,老系统字段*/
private String dataFrom;
/**语言,老系统字段*/
private String language;
/**级别代码*/
private String bandCode;
/**级别描述*/
private String bandDesc;
/**发薪地id*/
private String payrollPlaceId;
/**发薪地名称*/
private String payrollPlaceName;
/**管理序列职级*/
private String positionMgrLevel;
/**是否在职 2正常3离职*/
private Integer employeeStatus;
/** 手机号 */
private String mobile;
/** 默认的组织机构体系 */
private String orgTreeType;
/**原数据关联的企业id*/
private String oldEnterpriseId;
/** 旧系统机构id */
private String oldDepartId;
/** 员工编号 */
private String userNo;
/** 所在公司,新系统的关联的企业ID, 对应机构表中的企业 */
private String enterpriseId;
/** 所在部门新系统的机构id*/
private String departId;
/** 机构名称/分隔的全路径 */
private String orgNamePath;
/** 所在域 */
private String domainId;
/** 扩展字段,多租户系统的标识值 */
private String sassId;
/** 办公电话*/
private String telephoneNo;
/** 职务 */
private String duty;
/** 职级*/
private String rank;
/** 描述*/
private String description;
/**boe的时长和系统时长单独保存,此字段不应该存在的*/
private Integer learningDuration;
public Integer toGenderInteger() {
if(this.gender!=null) {
if(this.gender.equals("male")) {
return 1;
}else if(this.gender.equals("female")) {
return 2;
}else {
return 3;//其它
}
}
return 1;
}
}

View File

@@ -0,0 +1,23 @@
package com.xboe.primary.dao;
import io.lettuce.core.dynamic.annotation.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.xboe.primary.entity.MainAccount;
import org.springframework.transaction.annotation.Transactional;
/**
* 账号信息DAO
*/
@Repository
public interface MainAccountDao extends JpaRepository<MainAccount,String>{
@Modifying
@Query(value = "update MainAccount set deleted=true where id=?1")
// @Transactional(rollbackFor = Exception.class)
public Integer setDeleted(String id);
}

View File

@@ -0,0 +1,26 @@
package com.xboe.primary.dao;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.xboe.primary.entity.MainOrganization;
import org.springframework.transaction.annotation.Transactional;
/**
* 机构管理DAO
*/
@Repository("organizationAllDao")
public interface MainOrganizationDao extends JpaRepository<MainOrganization,String> {
@Modifying
@Query(value = "update MainOrganization set deleted=true where id=?1")
@Transactional(rollbackFor = Exception.class)
public Integer setDeleted(String id);
@Query(value = "from MainOrganization where id=?1")
public MainOrganization get(String id);
}

View File

@@ -0,0 +1,19 @@
package com.xboe.primary.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.xboe.primary.entity.MainTeacher;
import org.springframework.transaction.annotation.Transactional;
@Repository("teacherAllDao")
public interface MainTeacherDao extends JpaRepository<MainTeacher,String> {
@Modifying
@Query(value = "update MainTeacher set waitStatus=?2 where id=?1")
@Transactional(rollbackFor = Exception.class)
public void updateStatus(String id,Integer status);
}

View File

@@ -0,0 +1,27 @@
package com.xboe.primary.dao;
import com.xboe.basic.entity.User;
import com.xboe.primary.entity.MainOrganization;
import io.lettuce.core.dynamic.annotation.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.xboe.primary.entity.MainUser;
import org.springframework.transaction.annotation.Transactional;
/**
* 用户DAO
*/
@Repository("userAllDao")
public interface MainUserDao extends JpaRepository<MainUser,String> {
@Modifying
@Query(value = "update MainUser set deleted=true where id=?1")
public Integer setDeleted(String id);
@Query(value = "from MainUser where id=?1")
public MainUser get(String id);
}

View File

@@ -0,0 +1,78 @@
package com.xboe.primary.entity;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity;
import com.xboe.core.orm.annotation.MetaInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 账号表,只是记录登录的账号信息,无任务业务实名类的信息
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = SysConstant.TABLE_PRE + "account")
public class MainAccount extends IdEntity{
private static final long serialVersionUID = 1L;
/**0 临时数据*/
public static final int STATUS_TEMPORARY=0;
/**1 正常数据*/
public static final int STATUS_NORMAL=1;
/**2 停用数据*/
public static final int STATUS_DEAD=2;
@MetaInfo("原系统中的id")
@Column(name = "sys_id", length = 36)
private String sysId;
@MetaInfo("登录名")
@Column(name = "login_name", nullable = true, length = 30)
private String loginName;
@MetaInfo("用户头像地址")
@Column(name = "avatar", nullable = true, length = 100)
private String avatar;
@MetaInfo("手机号")
@Column(name = "mobile", length = 11)
private String mobile;
@Column(name = "email", length = 100)
private String email;
@Column(name = "nick_name", length = 20)
private String nickName;
@Column(name = "pass_key", length = 6)
private String passKey;
@Column(name = "pass_value", length = 32)
private String passValue;
@Column(name = "reg_time" )
private LocalDateTime regTime;
@MetaInfo("关联的公司id")
@Column(name = "company_id", length = 36)
private String companyId;
// 状态1, 正常2停用
@Column(name = "status", length = 1)
private Integer status;
@Column(name = "deleted", length = 1)
private Boolean deleted;
}

View File

@@ -0,0 +1,117 @@
package com.xboe.primary.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 机构实体
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = SysConstant.TABLE_PRE + "organization")
public class MainOrganization extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 原系统ID
*/
@Column(name = "sys_id", length = 36)
private String sysId;
/**
* 旧系统父id
*/
@Column(name = "sys_parent_id", length = 36)
private String sysParentId;
/**
* 组织部门代码
*/
@Column(name = "code", nullable = false, length = 50)
private String code;
/**
* 组织名
*/
@Column(name = "name", nullable = false, length = 50)
private String name;
/**
* 组织全路径
*/
@Column(name = "name_path")
private String namePath;
/**
* 父组织部门ID
*/
@Column(name = "parent_id", length = 18)
private String parentId;
/**
* 描述
*/
@Column(name = "description", columnDefinition = "text")
private String description;
/**
* 企业ID
*/
@Column(name = "company_id", length = 36)
private String companyId;
/**
* 域ID
*/
@Column(name = "domain_id", length = 36)
private String domainId;
/**
* 组织部门经理ID
*/
@Column(name = "orgnization_manager_id", length = 36)
private String orgnizationManagerId;
/**
* 组织级别
*/
@Column(name = "organization_level", length = 50)
private String organizationLevel;
/**
* 是否制造组织
*/
@Column(name = "is_make_org", length = 1)
private Boolean isMakeOrg;
/**
* 是否服务现地
*/
@Column(name = "is_service_site", length = 1)
private Boolean isServiceSite;
/**
* 是否默认注册组织
*/
@Column(name = "is_default_organization", length = 1)
private Boolean isDefaultOrganization;
/**
* 状态
* 0临时1正常2停用
*/
@Column(name = "status", nullable = false, length = 1)
private Integer status;
@Column(name="deleted",length = 1)
private Boolean deleted;
}

View File

@@ -0,0 +1,190 @@
package com.xboe.primary.entity;
import java.time.LocalDate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = SysConstant.TABLE_PRE + "teacher")
public class MainTeacher extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 系统id
*/
@Column(name = "sys_id", length = 36)
private String sysId;
@Column(name = "photo", length = 100)
private String photo;
/**
* 姓名
*/
@Column(name = "name", length = 30)
private String name;
/**
* 所属机构
*/
@Column(name = "depart_id", length = 18)
private String departId;
/**
* 性别 1:男 2
*/
@Column(name = "gender", length = 1)
private Integer gender;
/**
* 身份证号
*/
@Column(name = "id_number", length = 18)
private String idNumber;
/**
* 生日
*/
@Column(name = "birthday")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate birthday;
/**
* 手机号
*/
@Column(name = "mobile", length = 11)
private String mobile;
@Column(name = "email", length = 100)
private String email;
/**
* 家庭电话
*/
@Column(name = "home_phone_no", length = 50)
private String homePhoneNo;
/**
* 个人标签
*/
@Column(name = "personal_label", length = 100)
private String personalLabel;
/**
* 所在公司
*/
@Column(name = "company_id", length = 36)
private String companyId;
/**
* 所在域
*/
@Column(name = "domain_id", length = 36)
private String domainId;
/**
* 岗位
*/
@Column(name = "operating_post", length = 100)
private String operatingPost;
/**
* 直线经理
*/
@Column(name = "superior_manager", length = 32)
private String superiorManager;
/**
* 位置
*/
@Column(name = "address", length = 200)
private String address;
/**
* 描述
*/
@Column(name = "description",columnDefinition = "text")
private String description;
/**
* 授课时长
*/
@Column(name = "teaching")
private String teaching;
/**
* 在职状态 在职: 0 离职: 1
*/
@Column(name = "wait_status")
private Integer waitStatus;
/**状态,0表临时 1表启用2表停用的*/
@Column(name = "status",length = 1)
private Integer status;
/**
* 认证状态,0表未认证1表已认证
*/
@Column(name = "cert_status",length = 1)
private Integer certStatus;
/**
* 擅长课程
*/
@Column(name = "courses")
private String courses;
/**
* 发薪地id
*/
@Column(name = "salary_id",length=36)
private String salaryId;
/**
* 发薪地名称
*/
@Column(name = "salary_name",length=50)
private String salaryName;
/**
* 所属体系id
* */
@Column(name = "t_system_id",length = 36)
private String tsystemId;
/**
* 所属体系name
* */
@Column(name = "t_system_name",length = 30)
private String tsystemName;
/**
* 所属级别id
* */
@Column(name = "t_level_id",length = 36)
private String tlevelId;
/**
* 所属级别名称
* */
@Column(name = "t_level_name",length = 30)
private String tlevelName;
/**讲师备注*/
@Column(name = "remark",length = 500)
private String remark;
}

View File

@@ -0,0 +1,237 @@
package com.xboe.primary.entity;
import java.time.LocalDate;
import java.time.LocalDateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xboe.core.SysConstant;
import com.xboe.core.orm.IdEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 用户信息表
* 存储所有的用户信息,原表中的部分信息
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = SysConstant.TABLE_PRE + "user")
public class MainUser extends IdEntity {
private static final long serialVersionUID = 1L;
/**
* 旧系统id
*/
@Column(name = "sys_id", length = 36)
private String sysId;
/**
* 旧系统机构id
*/
@Column(name = "sys_depart_id", length = 36)
private String sysDepartId;
/**
* 姓名
*/
@Column(name = "name", length = 30)
private String name;
/**
* 员工编号
*/
@Column(name = "user_no", length = 30)
private String userNo;
/**
* 性别 1:男 2
*/
@Column(name = "gender", length = 1)
private Integer gender;
/**
* 生日
*/
@Column(name = "birthday")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate birthday;
/**
* 身份证号
*/
@Column(name = "id_number", length = 18)
private String idNumber;
/**
* 手机号
*/
@Column(name = "mobile_no", length = 11)
private String mobileNo;
/**
* 家庭电话
*/
@Column(name = "home_phone_no", length = 50)
private String homePhoneNo;
/**
* 国籍
*/
@Column(name = "nationality", length = 50)
private String nationality;
/**
* 毕业院校
*/
@Column(name = "graduated_from", length = 50)
private String graduatedFrom;
/**
* 毕业专业
*/
@Column(name = "graduated_major", length = 50)
private String graduatedMajor;
/**
* 最高学历
*/
@Column(name = "highest_education", length = 50)
private String highestEducation;
/**
* 办公电话
*/
@Column(name = "telephone_no", length = 50)
private String telephoneNo;
/**发薪地*/
@Column(name = "payroll_place", length = 150)
private String payrollPlace;
/**管理序列职级*/
@Column(name = "position_mgr_level", length = 150)
private String positionMgrLevel;
/**
* 职务
*/
@Column(name = "duty", length = 50)
private String duty;
/**
* 职级
*/
@Column(name = "rank", length = 50)
private String rank;
/**
* 描述
*/
@Column(name = "description")
private String description;
/**
* 所在公司
*/
@Column(name = "company_id", length = 36)
private String companyId;
/**
* 所在部门
*/
@Column(name = "depart_id", length = 18)
private String departId;
@Transient
private String departName;
/**
* 所在域
*/
@Column(name = "domain_id", length = 36)
private String domainId;
/**
* 扩展字段,多租户系统的标识值
*/
@Column(name = "sass_id", length = 36)
private String sassId;
/**
* 用户类型1表学员2表教师3表管理员
* 该字段暂用于表示是否前台管理员
*/
@Column(name = "user_type", length = 1)
private Integer userType;
/**
* 学习总时长
*/
@Column(name = "study_total", length = 11)
private Integer studyTotal;
/**
* boe的时长和系统时长单独保存
*/
@Column(name = "learning_Duration", length = 11)
private Integer learningDuration;
/**
* 最近一次登录时间
*/
@Column(name = "last_login_at")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime lastLoginAt;
/**
* 最近一次登录IP
*/
@Column(name = "last_login_ip", length = 30)
private String lastLoginIp;
/**
* 最近一次登录MAC地址
*/
@Column(name = "last_login_mac", length = 30)
private String lastLoginMac;
/**
* 最近一次操作时间
*/
@Column(name = "last_action_at")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime lastActionAt;
/**
* 最近一次操作IP
*/
@Column(name = "last_action_ip", length = 30)
private String lastActionIp;
/**
* 最近一次操作MAC地址
*/
@Column(name = "last_action_mac", length = 30)
private String lastActionMac;
/**
* 在线状态;
* 0离线1在线
*/
@Column(name = "online", length = 1)
private Boolean online;
/**
* 删除标识
* */
@Column(name="deleted",length = 1)
private Boolean deleted;
}

View File

@@ -0,0 +1,40 @@
package com.xboe.primary.service;
import com.xboe.dto.OrganizationDto;
import com.xboe.dto.UserDto;
/**
* 基本数据同步的相关处理
* @author seastar
*
*/
public interface IMainDbSyncService {
/**
* 同步机构数据
* @param dto
*/
void syncOrganization(OrganizationDto dto);
/**
* 同步人员数据
* @param dto
*/
void syncUser(UserDto dto);
/**
* 同步删除机构 id.
* 内部同步不是新的id
* @param id
*/
String syncDeleteOrganization(String id);
/**
* 同步删除用户
* @param id,新系统调用是数据中心的id
* @param code
*/
String syncDeleteUser(String id,String code);
}

View File

@@ -0,0 +1,171 @@
package com.xboe.primary.service.impl;
import java.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.xboe.basic.entity.Account;
import com.xboe.dto.OrganizationDto;
import com.xboe.dto.UserDto;
import com.xboe.primary.dao.MainAccountDao;
import com.xboe.primary.dao.MainOrganizationDao;
import com.xboe.primary.dao.MainTeacherDao;
import com.xboe.primary.dao.MainUserDao;
import com.xboe.primary.entity.MainAccount;
import com.xboe.primary.entity.MainOrganization;
import com.xboe.primary.entity.MainUser;
import com.xboe.primary.service.IMainDbSyncService;
/**
* 主数据库同步的实现
*/
@Service("allService")
public class MainDbSyncServiceImpl implements IMainDbSyncService {
@Autowired
MainOrganizationDao orgDao;
@Autowired
MainUserDao userDao;
@Autowired
MainAccountDao accountDao;
@Autowired
MainTeacherDao teacherDao;
@Override
@Transactional("transactionManagerPrimary")
public synchronized void syncOrganization(OrganizationDto dto) {
MainOrganization hasOrg =orgDao.get(dto.getId());
if(hasOrg!=null) {
if(dto.getDeleted()!=null && dto.getDeleted()) {
hasOrg.setDeleted(dto.getDeleted());
}
hasOrg.setDescription(dto.getDescription());
hasOrg.setIsMakeOrg(dto.getIsMakeOrg());
hasOrg.setIsServiceSite(dto.getIsServiceSite());
hasOrg.setName(dto.getName());
hasOrg.setParentId(dto.getParentId());
hasOrg.setNamePath(dto.getNamePath());
hasOrg.setStatus(dto.getStatus());
orgDao.save(hasOrg);
}else {
//hasOrg =orgDao.getBySysId(dto.getKid());
hasOrg=new MainOrganization();
hasOrg.setId(dto.getId());
hasOrg.setCode(dto.getCode());
hasOrg.setCompanyId(dto.getSassId());
hasOrg.setDeleted(false);
hasOrg.setDescription(dto.getDescription());
//hasOrg.setDomainId(dto.getD);
hasOrg.setIsDefaultOrganization(true);
hasOrg.setStatus(dto.getStatus());
hasOrg.setIsMakeOrg(dto.getIsMakeOrg());
hasOrg.setIsServiceSite(dto.getIsServiceSite());
hasOrg.setName(dto.getName());
hasOrg.setNamePath(dto.getNamePath());
hasOrg.setOrganizationLevel(dto.getOrganizationLevel());
//hasOrg.setOrgnizationManagerId(dto.get);
hasOrg.setParentId(dto.getParentId());
//hasOrg.setSysCreateAid();//创建人没有这个数据
hasOrg.setSysCreateBy("同步基础数据");
hasOrg.setSysCreateTime(LocalDateTime.now());
hasOrg.setSysId(dto.getKid());
hasOrg.setSysParentId(dto.getParentId());
hasOrg.setSysUpdateBy("");
hasOrg.setSysUpdateTime(hasOrg.getSysCreateTime());
orgDao.save(hasOrg);
}
}
@Override
@Transactional("transactionManagerPrimary")
public void syncUser(UserDto dto) {
//System.out.println("dto.name="+dto.getName());
Integer employeeStatus=dto.getEmployeeStatus();
//同一个用户工号对应 多个kid的情况,所以直接根据kid查询是不对的,同步过来的使用sysId查询
MainUser user = userDao.get(dto.getId());
if(user!=null) {
//更新用户信息,更新账号信息
user.setSysId(dto.getKid());
//hasUser.setBirthday(null);
}else {
//账号信息
MainAccount a=new MainAccount();
//同步过程中一样,可以不一样。因为此系统当前是一致的,所以统一使用一个
a.setId(dto.getId());
a.setAvatar(dto.getAvatar());
a.setDeleted(false);
a.setEmail(dto.getEmail());
a.setLoginName(dto.getLoginName());
a.setSysId(dto.getKid());
a.setRegTime(LocalDateTime.now());
a.setMobile(dto.getMobile());
a.setPassKey("");
a.setPassValue("");
a.setStatus(Account.STATUS_NORMAL);//正常状态
if(employeeStatus==3) {
a.setDeleted(true);
}else {
a.setDeleted(false);
}
user=new MainUser();
//同步过程中一样,可以不一样。因为此系统当前是一致的,所以统一使用一个
user.setId(a.getId());
user.setDepartId(dto.getDepartId());
user.setDescription(dto.getDescription());
user.setDomainId(dto.getDomainId());
user.setDuty(dto.getDuty());
user.setSysId(dto.getKid());
user.setLearningDuration(dto.getLearningDuration());
user.setName(dto.getName());
user.setRank(dto.getRank());
user.setSassId(dto.getSassId());
user.setTelephoneNo(dto.getTelephoneNo());
user.setUserNo(dto.getUserNo());
user.setGender(dto.toGenderInteger()==3? 1:dto.toGenderInteger());
user.setGraduatedFrom(dto.getGraduatedFrom());
user.setGraduatedMajor(dto.getGraduatedMajor());
user.setHighestEducation(dto.getHighestEducation());
user.setHomePhoneNo(dto.getHomePhoneNo());
user.setIdNumber(dto.getIdNumber());
user.setMobileNo(dto.getMobile());
user.setNationality(dto.getNationality());
user.setOnline(true);
user.setDeleted(false);
accountDao.save(a);
userDao.save(user);
}
}
@Override
@Transactional("transactionManagerPrimary")
public String syncDeleteOrganization(String id){
//注意这里调用的是机构的id
orgDao.setDeleted(id);
return id;
}
@Override
@Transactional("transactionManagerPrimary")
public String syncDeleteUser(String id,String code) {
MainAccount a = accountDao.getById(id);
if(a!=null) {
accountDao.setDeleted(id);
//设置教师是离职状态
teacherDao.updateStatus(id, 1);
}
//当前系统User相当于Person
return id;
}
}

View File

@@ -0,0 +1,51 @@
# redis
spring.redis.database=2
spring.redis.host=127.0.0.1
spring.redis.password=ENC(zA5LNV8xw3yEx6LMwdGGBGgNsOaD3Cg+)
spring.redis.port=6379
# datasource config
# basic数据库
spring.jpa.hibernate.ddl-auto=update
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.datasource.driverClassName=com.mysql.jdbc.Driver
# spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
# 当前数据库 basic 对应的数据库
spring.datasource.db1.driverClassName=com.mysql.jdbc.Driver
spring.datasource.db1.jdbc-url=jdbc:mysql://127.0.0.1:3306/boeu_basic?useSSL=false&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
spring.datasource.db1.username=root
spring.datasource.db1.password=ENC(lAoFOYuc8CAypPtigTNLYg==)
# 主数据库 all 对应的数据库
spring.datasource.db2.driverClassName=com.mysql.jdbc.Driver
# spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.db2.jdbc-url=jdbc:mysql://127.0.0.1:3306/boe_base3?useSSL=false&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
spring.datasource.db2.username=root
spring.datasource.db2.password=ENC(lAoFOYuc8CAypPtigTNLYg==)
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
# 设置logback.xml位置
logging.config=classpath:log/logback-dev.xml
## 静态文件目录默认是在static下面以后独立到nginx下面配置
spring.web.resources.static-locations=file:E:/Projects/BOE/java/static
## 上传相磁的路径配置
xboe.upload.file.temp_path=E:/Projects/BOE/java/static/temp
xboe.upload.file.save_path=E:/Projects/BOE/java/static/upload
xboe.upload.file.http_path=http://localhost:9090/cdn/upload
## 新系统的内部地址可以不通过nginx调用
xboe.inner.data.sync.baseurl=http://localhost:9090
#加密盐
#jasypt.encryptor.password=jasypt
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

View File

@@ -0,0 +1,37 @@
## redis
spring.redis.database=2
spring.redis.host=127.0.0.1
spring.redis.password=ENC(zA5LNV8xw3yEx6LMwdGGBGgNsOaD3Cg+)
spring.redis.port=6379
## datasource config
spring.datasource.driverClassName=com.mysql.jdbc.Driver
# spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boe_base?useSSL=false&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=ENC(lAoFOYuc8CAypPtigTNLYg==)
logging.level.org.hibernate.SQL=ERROR
# logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
# 设置logback.xml位置
logging.config=classpath:log/logback-pro.xml
## 静态文件目录默认是在static下面以后独立到nginx下面配置
spring.web.resources.static-locations=file:E:/Projects/BOE/java/static
## xboe config
xboe.api.cross_filter=true
## 上传相磁的路径配置
xboe.upload.file.temp_path=E:/Projects/BOE/java/static/temp
xboe.upload.file.save_path=E:/Projects/BOE/java/static/upload
xboe.upload.file.http_path=http://localhost:9090/cdn/upload
## 新系统的内部地址可以不通过nginx调用
xboe.inner.data.sync.baseurl=http://localhost:9090
#加密盐
#jasypt.encryptor.password=jasypt
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

View File

@@ -0,0 +1,54 @@
## redis
spring.redis.database=2
spring.redis.host=127.0.0.1
spring.redis.password=ENC(zA5LNV8xw3yEx6LMwdGGBGgNsOaD3Cg+)
spring.redis.port=6379
# datasource config
# basic数据库
spring.jpa.hibernate.ddl-auto=update
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.datasource.driverClassName=com.mysql.jdbc.Driver
# spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
# 当前数据库 basic 对应的数据库
spring.datasource.db1.driverClassName=com.mysql.jdbc.Driver
spring.datasource.db1.jdbc-url=jdbc:mysql://127.0.0.1:3306/boeu_basic?useSSL=false&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
spring.datasource.db1.username=root
spring.datasource.db1.password=root
# 主数据库 all 对应的数据库
spring.datasource.db2.driverClassName=com.mysql.jdbc.Driver
# spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.db2.jdbc-url=jdbc:mysql://127.0.0.1:3306/boe_base3?useSSL=false&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
spring.datasource.db2.username=root
spring.datasource.db2.password=root
logging.level.org.hibernate.SQL=ERROR
# logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
## 静态文件目录默认是在static下面以后独立到nginx下面配置
spring.web.resources.static-locations=file:E:/Projects/BOE/java/static
# 设置logback.xml位置
logging.config=classpath:log/logback-pro.xml
## xboe config
xboe.api.cross_filter=true
## 上传相磁的路径配置
xboe.upload.file.temp_path=E:/Projects/BOE/java/static/temp
xboe.upload.file.save_path=E:/Projects/BOE/java/static/upload
xboe.upload.file.http_path=http://localhost:9090/cdn/upload
## 新系统的内部地址可以不通过nginx调用
xboe.inner.data.sync.baseurl=http://localhost:9090
#加密盐
#jasypt.encryptor.password=jasypt
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

View File

@@ -0,0 +1,34 @@
## redis
spring.redis.database=2
spring.redis.host=127.0.0.1
spring.redis.password=ENC(zA5LNV8xw3yEx6LMwdGGBGgNsOaD3Cg+)
spring.redis.port=6379
## datasource config
spring.datasource.driverClassName=com.mysql.jdbc.Driver
# spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boe_base?useSSL=false&useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=boe_base
spring.datasource.password=ENC(MaC28GJw2JcbH8Lil0CrqSDTYxX49FJ0rxcmHH2pX0k=)
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
# 设置logback.xml位置
logging.config=classpath:log/logback-test.xml
## xboe config
xboe.api.cross_filter=true
## 上传相磁的路径配置
xboe.upload.file.temp_path=/www/wwwroot/file/temp
xboe.upload.file.save_path=/www/wwwroot/file/upload
xboe.upload.file.http_path=http://114.115.162.187/file/upload
## 新系统的内部地址可以不通过nginx调用
xboe.inner.data.sync.baseurl=http://localhost:9090
#加密盐
#jasypt.encryptor.password=jasypt
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator

View File

@@ -0,0 +1,62 @@
spring.profiles.active=@profileActive@
spring.application.name=boe-server-basic
server.port=9095
server.servlet.session.timeout=30m
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.tomcat.uri-encoding=UTF-8
ok.http.connect-timeout=30
ok.http.read-timeout=30
ok.http.write-timeout=30
# 连接池中整体的空闲连接的最大数量
ok.http.max-idle-connections=200
# 连接空闲时间最多为 300 秒
ok.http.keep-alive-duration=300
#spring.jackson.locale=
#spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
# spring.jackson.default-property-inclusion=NON_NULL
spring.jackson.time-zone=GMT+8
spring.servlet.multipart.max-file-size=1024MB
spring.servlet.multipart.max-request-size=1024MB
## 静态文件目录默认是在static下面以后独立到nginx下面配置
spring.mvc.static-path-pattern=/cdn/**
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.pool.max-idle=30
spring.redis.lettuce.pool.max-wait=10000ms
spring.redis.lettuce.shutdown-timeout=100ms
# 上传的临时目录,部署到服务器必须指定
# spring.servlet.multipart.location=
# jpa config
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
# spring.jpa.properties.hibernate.cache.use_second_level_cache=true
# spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
spring.jpa.properties.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
#spring.transaction
# spring.jpa.properties.hibernate.allow_update_outside_transaction=true
# spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
# 设置logback.xml位置
logging.config=classpath:log/logback-@profileActive@.xml

View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
<property name="log.path" value="logs/${spring.application.name}"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- Console log output -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- Log file debug output -->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
</appender>
<!-- Log file error output -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="INFO">
<appender-ref ref="console"/>
</root>
</configuration>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
<property name="log.path" value="/home/logs/${spring.application.name}"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- Console log output -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- Log file debug output -->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
</appender>
<!-- Log file error output -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="WARN">
<appender-ref ref="debug"/>
<appender-ref ref="error"/>
</root>
</configuration>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
<property name="log.path" value="logs/${spring.application.name}"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- Console log output -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- Log file debug output -->
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
</appender>
<!-- Log file error output -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="INFO">
<appender-ref ref="debug"/>
<appender-ref ref="error"/>
</root>
</configuration>

View File

@@ -0,0 +1,35 @@
package com.xboe;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xboe.dto.OrganizationDto;
import com.xboe.dto.UserDto;
public class BasicSyncTest {
// public static void main(String[] args) {
// OrganizationDto dto=new OrganizationDto();
// dto.setCode("100001");
// dto.setName("机构名称");
// dto.setKid("1234-4567-3948");
// dto.setSysLevel(0);
// dto.setStatus(1);
//
// UserDto u=new UserDto();
// u.setKid("02928-10231-01239-2392");
// u.setLoginName("2029182");
// u.setLearningDuration(0);
// u.setGender(1);
//
// ObjectMapper om=new ObjectMapper();
// try {
// System.out.println(om.writeValueAsString(dto));
// System.out.println(om.writeValueAsString(u));
// } catch (JsonProcessingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
//
// }
}

View File

@@ -0,0 +1,209 @@
package com.xboe;
import java.time.LocalDateTime;
import java.util.List;
import javax.transaction.Transactional;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.xboe.basic.dao.BasicOrganizationDao;
import com.xboe.basic.dao.ErrorLogDao;
import com.xboe.basic.entity.Organization;
import com.xboe.basic.service.IBasicDataSyncService;
import com.xboe.common.utils.IDGenerator;
import com.xboe.dto.OrganizationDto;
import com.xboe.primary.dao.MainAccountDao;
import com.xboe.primary.dao.MainOrganizationDao;
import com.xboe.primary.entity.MainOrganization;
import com.xboe.primary.service.IMainDbSyncService;
//@SpringBootTest
public class MultiDbTest {
// @Autowired
// BasicOrganizationDao orgDao;
//
// @Autowired
// MainOrganizationDao mainOrgDao;
//
// @Autowired
// ErrorLogDao errDao;
//
// @Autowired
// MainAccountDao mainAccountDao;
//
// @Autowired
// IMainDbSyncService mainService;
//
// @Autowired
// IBasicDataSyncService basicService;
// @Test
// @Transactional
// public void testOrganizationDto() {
//
// OrganizationDto dto=new OrganizationDto();
//
// dto.setCode("100001");
// dto.setName("机构名称");
// dto.setKid("1234-4567-39048");
// dto.setSysLevel(0);
// dto.setStatus(1);
//
// Organization org=null;
//
// List<Organization> orgList=orgDao.getByKid(dto.getKid());
//
// if(!orgList.isEmpty()) {
// org=orgList.get(0);
// }
// System.out.println("org");
// System.out.println(org);
// if(org==null) {//新增加
// org=new Organization();
// org.setId(IDGenerator.generate());
// org.setKid(dto.getKid());
//
// org.setCode(org.getCode());
// org.setCreateFrom(dto.getCreateFrom());
// org.setSysCreateTime(dto.getCreateTime());
// org.setDataFrom(dto.getDataFrom());
// org.setDeleted(false);
// org.setDescription(dto.getDescription());
// org.setIsDefault(dto.getIsDefault());
// org.setIsMakeOrg(dto.getIsMakeOrg());
// org.setIsServiceSite(dto.getIsServiceSite());
// org.setName(dto.getName());
// org.setNamePath(dto.getNamePath());
//
// //org.setOrganizationLevel(dto.getSysLevel());
// org.setSysLevel(dto.getSysLevel());
// org.setRemark(dto.getRemark());
// org.setSassId(dto.getSassId());
// org.setShortName(dto.getShortName());
// org.setStatus(dto.getStatus());
// dto.setId(org.getId());
// orgDao.save(org);
//
// }else {//更新
//
// if(dto.getDeleted()!=null && dto.getDeleted()) {
// org.setDeleted(dto.getDeleted());
// }
// org.setDescription(dto.getDescription());
// org.setIsDefault(dto.getIsDefault());
// org.setIsMakeOrg(dto.getIsMakeOrg());
// org.setIsServiceSite(dto.getIsServiceSite());
// org.setName(dto.getName());
// //org.setOrganizationLevel(dto.getSysLevel());
// org.setSysLevel(dto.getSysLevel());
// org.setRemark(dto.getRemark());
// org.setSassId(dto.getSassId());
// org.setShortName(dto.getShortName());
// org.setStatus(dto.getStatus());
// orgDao.save(org);
// dto.setId(org.getId());
// }
//
// MainOrganization hasOrg=null;
// System.out.println("dto.id");
// System.out.println("dto.id="+dto.getId());
// hasOrg =mainOrgDao.get(dto.getId());
// System.out.println("hasOrg");
// //System.out.println(hasOrg);
// System.out.println("hasOrg");
// if(hasOrg!=null) {
// System.out.println("hasOrg不为null");
// System.out.println("hasOrg name ="+hasOrg.getName());
//// if(dto.getDeleted()!=null && dto.getDeleted()) {
//// hasOrg.setDeleted(dto.getDeleted());
//// }
//// //hasOrg.setDescription(dto.getDescription());
//// hasOrg.setIsMakeOrg(dto.getIsMakeOrg());
//// hasOrg.setIsServiceSite(dto.getIsServiceSite());
//// hasOrg.setName(dto.getName());
//// hasOrg.setParentId(dto.getParentId());
//// //hasOrg.setNamePath(dto.getn);
//// hasOrg.setStatus(dto.getStatus());
//// mainOrgDao.save(hasOrg);
// }else {
// System.out.println("hasOrg 是 null");
// //hasOrg =orgDao.getBySysId(dto.getKid());
// hasOrg=new MainOrganization();
// hasOrg.setId(dto.getId());
// hasOrg.setCode(dto.getCode());
// hasOrg.setCompanyId(dto.getSassId());
// hasOrg.setDeleted(false);
// hasOrg.setDescription(dto.getDescription());
// //hasOrg.setDomainId(dto.getD);
// hasOrg.setIsDefaultOrganization(true);
// hasOrg.setStatus(dto.getStatus());
// hasOrg.setIsMakeOrg(dto.getIsMakeOrg());
// hasOrg.setIsServiceSite(dto.getIsServiceSite());
// hasOrg.setName(dto.getName());
// hasOrg.setNamePath(dto.getNamePath());
// hasOrg.setOrganizationLevel(dto.getOrganizationLevel());
// //hasOrg.setOrgnizationManagerId(dto.get);
// hasOrg.setParentId(dto.getParentId());
// //hasOrg.setSysCreateAid();//创建人没有这个数据
// hasOrg.setSysCreateBy("同步基础数据");
// hasOrg.setSysCreateTime(LocalDateTime.now());
// hasOrg.setSysId(dto.getKid());
// hasOrg.setSysParentId(dto.getParentId());
// hasOrg.setSysUpdateBy("");
// hasOrg.setSysUpdateTime(hasOrg.getSysCreateTime());
// mainOrgDao.save(hasOrg);
//
// }
//
// }
// @Test
// @Transactional
// public void userSave() {
//
// OrganizationDto dto=new OrganizationDto();
//
// dto.setCode("100001");
// dto.setName("机构名称");
// dto.setKid("1234-4567-3948");
// dto.setSysLevel(0);
// dto.setStatus(1);
// //Organization org=orgDao.findOne(FieldFilters.eq("kid", dto.getKid()));
// basicService.syncOrganization(dto);
// mainService.syncOrganization(dto);
//
// }
// @Test
// @Transactional
// public void userSave1() {
//
// ErrorLog error=new ErrorLog();
// error.setId(IDGenerator.generate());
// error.setDataType(1);
// error.setDataId("1");
// error.setLogObject("{}");
// error.setLogTime(LocalDateTime.now());
// error.setType(1);
// errDao.save(error);
//
// MainAccount ma=new MainAccount();
// ma.setId(IDGenerator.generate());
// ma.setAvatar("");
// ma.setLoginName("aaaaa");
// ma.setPassKey("");
// ma.setPassValue("");
// ma.setRegTime(LocalDateTime.now());
// ma.setStatus(1);
// ma.setSysId("1");
// ma.setDeleted(false);
// mainAccountDao.save(ma);
// }
}