package com.kidgrow.oprationcenter.service.impl;
import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.common.service.impl.SuperServiceImpl;
import com.kidgrow.oprationcenter.mapper.PartnerDockingInfoMapper;
import com.kidgrow.oprationcenter.model.PartnerDockingInfo;
import com.kidgrow.oprationcenter.model.PartnerInfo;
import com.kidgrow.oprationcenter.service.IPartnerDockingInfoService;
import com.kidgrow.oprationcenter.service.IPartnerInfoService;
import com.kidgrow.usercenter.feign.SysDepartmentService;
import com.kidgrow.usercenter.feign.SysDoctorService;
import com.kidgrow.usercenter.feign.SysHospitalService;
import com.kidgrow.usercenter.model.SysDoctor;
import com.kidgrow.usercenter.model.SysHospital;
import io.undertow.util.FileUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* @Description: 合作商客户对接信息表
* @Project: 运营中心
* @CreateDate: Created in 2020-12-08 14:35:33
* @Author: LuLiQiang
* @version 1.0
*/
@Slf4j
@Service
public class PartnerDockingInfoServiceImpl extends SuperServiceImpl implements IPartnerDockingInfoService {
@Autowired
ResourceLoader resourceLoader;
@Autowired
SysHospitalService sysHospitalService;
@Autowired
SysDepartmentService sysDepartmentService;
@Autowired
SysDoctorService sysDoctorService;
@Autowired
IPartnerInfoService partnerInfoService;
/**
* 列表
* @param params
* @return
*/
@Override
public PageResult findList(Map params){
Page page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
List list = baseMapper.findList(page, params);
return PageResult.builder().data(list).code(0).count(page.getTotal()).build();
}
/**
* 根据PartnerDockingInfo对象当做查询条件进行查询
* @param partnerDockingInfo
* @return PartnerDockingInfo
*/
@Override
public PartnerDockingInfo findByObject(PartnerDockingInfo partnerDockingInfo){
return baseMapper.findByObject(partnerDockingInfo);
}
/**
* 根据对接类型版本等信息,创建客户私有云数据库脚本
* @param partnerDockingInfo
* @return
*/
@Override
public String createSQL( PartnerDockingInfo partnerDockingInfo ){
// 模板SQL文
String dbSql = "";
// 医院信息SQL文
String hospitalSQL = "";
// 科室信息SQL文
String departmentSQL = "";
// 医生信息SQL文
String doctorSQL = "";
// 合作商信息SQL文
String partnerSQL = "";
// 服务器信息SQL文
String serverSQL= "";
InputStream fileImput =null;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String createTime = "";
String updateTime = "";
try {
// 1、读取基础表结构SQL
Resource resource = resourceLoader.getResource("classpath:template//imageServer_template.sql");
fileImput = resource.getInputStream(); //new FileInputStream("./template/imageServer_template.sql");
dbSql = FileUtils.readFile(fileImput);
// 2、读取医院信息表Hospital_Info,插入SQL文中
Map hospitalMap = new HashMap<>();
hospitalMap.put("id",partnerDockingInfo.getHospitalId());
ResultBody hospitalResult = sysHospitalService.findAllByMap(hospitalMap);
if (hospitalResult.isOk()){
String jsonData = JSONObject.toJSONString(hospitalResult.getData());
List hospitalLists= JSONObject.parseArray(jsonData,SysHospital.class);
if (hospitalLists.size()> 0) {
SysHospital hospitalInfo = hospitalLists.get(0);
createTime = simpleDateFormat.format(hospitalInfo.getCreateTime());
updateTime = simpleDateFormat.format(hospitalInfo.getUpdateTime());
hospitalSQL = " INSERT INTO sys_hospital VALUES (" +
hospitalInfo.getId() + ", " +
"'" + hospitalInfo.getHospitalName()+ "', " +
"'" + hospitalInfo.getHospitalShortName()+ "', " +
"'" + hospitalInfo.getHospitalCode()+ "', " +
"'" + hospitalInfo.getHospitalTypeId()+ "', " +
"'" + hospitalInfo.getHospitalTypeName()+ "', " +
"'" + hospitalInfo.getHospitalTel()+ "', " +
"'" + hospitalInfo.getHospitalProvince()+ "', " +
"'" + hospitalInfo.getHospitalCity()+ "', " +
"'" + hospitalInfo.getHospitalArea()+ "', " +
"'" + hospitalInfo.getAreaCode()+ "', " +
"'" + hospitalInfo.getHospitalLink()+ "', " +
"'" + hospitalInfo.getHospitalAdress()+ "', " +
"'" + hospitalInfo.getLatitude()+ "', " +
"'" + hospitalInfo.getLongitude()+ "', " +
"'" + hospitalInfo.getHospitalQualifiedId()+ "', " +
"'" + hospitalInfo.getHospitalQualifiedName()+ "', " +
"NULL," +
"NULL," +
"NULL," +
"'" + hospitalInfo.getHospitalAbout()+ "', " +
hospitalInfo.getHospitalState() + ", " +
hospitalInfo.getEnabled() + ", " +
hospitalInfo.getIsDel() + ", " +
hospitalInfo.getCreateUserId() + ", " +
"'" + hospitalInfo.getCreateUserName()+ "', " +
hospitalInfo.getUpdateUserId() + ", " +
"'" + hospitalInfo.getUpdateUserName()+ "', " +
"'" + createTime+ "', " +
"'" + updateTime+"' " +
");\n\r";
}
}
// 3、读取科室信息表Department_Info,生成SQL文
departmentSQL = "INSERT INTO sys_department VALUES ("+
+partnerDockingInfo.getDepartmentId()+ ", "+
"'" + partnerDockingInfo.getDepartmentName() +"', " +
"0, 1, 0, '喜高科技', 0 , '喜高科技', " +
"'" + DateTime.now().toString() + "', " +
"'" + DateTime.now().toString() + "', " +
"6 " +
");\n\r";
// 4、读取医生信息表Doctor_Info,生成SQL文
Map doctorMap = new HashMap<>();
doctorMap.put("hospital_id",partnerDockingInfo.getHospitalId());
doctorMap.put("department_id",partnerDockingInfo.getDepartmentId());
doctorMap.put("is_admin_user",1);
ResultBody doctorResult = sysDoctorService.getListByMap(doctorMap);
if (doctorResult.isOk()) {
String jsonData = JSONObject.toJSONString(doctorResult.getData());
List doctorList = JSONObject.parseArray(jsonData, SysDoctor.class);
if (doctorList.size() > 0) {
SysDoctor doctorInfo = doctorList.get(0);
doctorSQL = "INSERT INTO sys_doctor VALUES(" +
doctorInfo.getId() + ", " +
+ doctorInfo.getHospitalId() + ", " +
"'" + doctorInfo.getHospitalName()+ "', " +
+ doctorInfo.getDepartmentId() + ", " +
"'" + doctorInfo.getDepartmentName()+ "', " +
"'" + doctorInfo.getDoctorName()+ "', " +
"NULL, " +
"'" + doctorInfo.getDoctorCcie()+ "', " +
"'" + doctorInfo.getDoctorTel()+ "', " +
"'" + DigestUtils.md5DigestAsHex("123456".getBytes()).replace("-","") +"', " +
"'" + doctorInfo.getDoctorRankId()+ "', " +
"'" + doctorInfo.getDoctorRank()+ "', " +
"'" + doctorInfo.getDoctorOtherLink()+ "', " +
"'" + doctorInfo.getDoctorEmail()+ "', " +
"'" + doctorInfo.getDoctorAbout()+ "', " +
"0, " +
doctorInfo.getDoctorState()+ ", " +
doctorInfo.getDoctorType()+ ", " +
"0, 1, 0, '喜高科技', 0 , '喜高科技', " +
"'" + DateTime.now().toString() + "', " +
"'" + DateTime.now().toString() + "', " +
"1" +
");\n\r";
}
}
// 5、读取合作商信息表Partner_Info,生成SQL文
PartnerInfo partnerInfo = partnerInfoService.getById(partnerDockingInfo.getPartnerId());
if (partnerInfo!= null) {
createTime = simpleDateFormat.format(partnerInfo.getCreateTime());
updateTime = simpleDateFormat.format(partnerInfo.getUpdateTime());
partnerSQL = "INSERT INTO partner_info VALUES (" +
partnerInfo.getId() + ", " +
"'" +partnerInfo.getPartnerName() + "', " +
+ partnerInfo.getPartnerType() + ", " +
"'" +partnerInfo.getPartnerAddress() + "', " +
"'" +partnerInfo.getPartnerProvince() + "', " +
"'" +partnerInfo.getPartnerCity() + "', " +
"'" +partnerInfo.getPartnerArea() + "', " +
"'" +partnerInfo.getPartnerLinkMan() + "', " +
"'" +partnerInfo.getPartnerLinkTelephone() + "', " +
"'" +partnerInfo.getPartnerBussinessArea() + "', " +
"'" +partnerInfo.getPartnerIntroduce() + "', " +
"'" +partnerInfo.getPartnerUniqueCode() + "', " +
"0, 1, "+ partnerInfo.getCreateUserId() + ", " +
"'" +partnerInfo.getCreateUserName() + "', " +
"'" +createTime + "', " +
+ partnerInfo.getUpdateUserId() + ", " +
"'" +partnerInfo.getUpdateUserName() + "', " +
"'" +updateTime + "' " +
");\n\r";
}
// 6、读取服务器信息表Server_Info,生成SQL文
if ((partnerDockingInfo.getAccessKey() != null) && (!partnerDockingInfo.getAccessKey().isEmpty())) {
createTime = simpleDateFormat.format(partnerDockingInfo.getCreateTime());
updateTime = simpleDateFormat.format(partnerDockingInfo.getUpdateTime());
serverSQL = "INSERT INTO server_info VALUES(" +
partnerDockingInfo.getId() + ", " +
partnerDockingInfo.getPartnerId() + ", " +
partnerDockingInfo.getHospitalId() + ", " +
partnerDockingInfo.getDepartmentId() + ", " +
"NULL, NULL, NULL, NULL, " +
"'" + partnerDockingInfo.getServerMachineCode() + "', " +
"NULL, NULL, " +
"'" + partnerDockingInfo.getAccessKey() + "', " +
"0, 1, " +
partnerDockingInfo.getCreateUserId() + ", " +
"'" + partnerDockingInfo.getCreateUserName() + "', " +
"'" + createTime + "', " +
partnerDockingInfo.getUpdateUserId() + ", " +
"'" + partnerDockingInfo.getUpdateUserName() + "', " +
"'" + updateTime + "', " +
");\n\r";
}
// 7、所有SQL文合并入基本的SQL中
dbSql += hospitalSQL + departmentSQL + doctorSQL + partnerSQL +serverSQL;
} catch (Exception e){
e.printStackTrace();
} finally {
try {
fileImput.close();
} catch (IOException e){
e.printStackTrace();
}
}
return dbSql;
};
}