ProjectTaskServiceImpl.java 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802
  1. package com.ruoyi.project.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.ruoyi.common.core.domain.AjaxResult;
  5. import com.ruoyi.common.core.domain.entity.SysDept;
  6. import com.ruoyi.common.core.domain.entity.SysUser;
  7. import com.ruoyi.common.enums.UserRolesType;
  8. import com.ruoyi.common.exception.ServiceException;
  9. import com.ruoyi.common.utils.DateUtils;
  10. import com.ruoyi.common.utils.PageUtils;
  11. import com.ruoyi.common.utils.SecurityUtils;
  12. import com.ruoyi.common.utils.StringUtils;
  13. import com.ruoyi.common.utils.bean.BeanUtils;
  14. import com.ruoyi.common.utils.bean.BeanValidators;
  15. import com.ruoyi.common.utils.file.FileUtils;
  16. import com.ruoyi.project.bo.*;
  17. import com.ruoyi.project.domain.ProjectStaff;
  18. import com.ruoyi.project.domain.ProjectStaffRecord;
  19. import com.ruoyi.project.domain.ProjectTask;
  20. import com.ruoyi.project.mapper.ProjectStaffMapper;
  21. import com.ruoyi.project.mapper.ProjectStaffRecordMapper;
  22. import com.ruoyi.project.mapper.ProjectTaskMapper;
  23. import com.ruoyi.project.service.ProjectTaskService;
  24. import com.ruoyi.system.domain.SysUserRole;
  25. import com.ruoyi.system.mapper.SysDeptMapper;
  26. import com.ruoyi.system.mapper.SysRoleMapper;
  27. import com.ruoyi.system.mapper.SysUserMapper;
  28. import com.ruoyi.system.mapper.SysUserRoleMapper;
  29. import com.ruoyi.system.service.ISysDeptService;
  30. import org.apache.poi.xwpf.usermodel.XWPFDocument;
  31. import org.apache.poi.xwpf.usermodel.XWPFParagraph;
  32. import org.apache.poi.xwpf.usermodel.XWPFRun;
  33. import org.slf4j.Logger;
  34. import org.slf4j.LoggerFactory;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.beans.factory.annotation.Value;
  37. import org.springframework.http.HttpStatus;
  38. import org.springframework.stereotype.Service;
  39. import org.springframework.transaction.annotation.Transactional;
  40. import javax.annotation.Resource;
  41. import javax.servlet.http.HttpServletResponse;
  42. import javax.validation.Validator;
  43. import java.io.ByteArrayOutputStream;
  44. import java.io.File;
  45. import java.io.FileOutputStream;
  46. import java.io.IOException;
  47. import java.util.*;
  48. import java.util.stream.Collectors;
  49. import java.util.stream.Stream;
  50. import java.util.zip.ZipOutputStream;
  51. import static java.lang.Thread.sleep;
  52. @Service
  53. public class ProjectTaskServiceImpl implements ProjectTaskService {
  54. private static final Logger log = LoggerFactory.getLogger(ProjectTaskServiceImpl.class);
  55. @Resource
  56. private ProjectTaskMapper projectTaskMapper;
  57. @Resource
  58. private ProjectStaffMapper projectStaffMapper;
  59. @Resource
  60. private ISysDeptService deptService;
  61. @Resource
  62. private Validator validator;
  63. @Resource
  64. private SysUserMapper userMapper;
  65. @Resource
  66. private ProjectStaffRecordMapper projectStaffRecordMapper;
  67. @Resource
  68. private SysDeptMapper sysDeptMapper;
  69. @Resource
  70. private TianheService tianheService;
  71. @Resource
  72. private SysUserRoleMapper sysUserRoleMapper;
  73. @Value("${ruoyi.profile}")
  74. private String profile=null;
  75. @Override
  76. public AjaxResult addProjectTask(ProjectTask projectTask) {
  77. userMapper.updateUserProjectSum(projectTask.getAid(),0);
  78. projectTask.setCreateAid(SecurityUtils.getUserId());
  79. int i = projectTaskMapper.insertSelective(projectTask);
  80. if (StringUtils.isNotBlank(projectTask.getStaffObject())){
  81. String[] split = projectTask.getStaffObject().split(",");
  82. projectStaffMapper.updatePidByList(projectTask.getId(),split);
  83. projectTaskMapper.updateStaffName(projectTask.getId());
  84. }
  85. return AjaxResult.success(i);
  86. }
  87. @Override
  88. public AjaxResult deleteProject(ProjectTask in) {
  89. int i = projectTaskMapper.deleteByPrimaryKey(in.getId());
  90. userMapper.updateUserProjectSum(in.getAid(),0);
  91. if (i>0){
  92. projectStaffMapper.deleteBypid(in.getId());
  93. return AjaxResult.success();
  94. }
  95. return AjaxResult.error("项目编号不存在");
  96. }
  97. @Override
  98. public AjaxResult details(Long id) {
  99. ProjectTask projectTask = projectTaskMapper.selectByPrimaryKey(id);
  100. ProjectTaskOut out= new ProjectTaskOut();
  101. if (projectTask!=null){
  102. BeanUtils.copyBeanProp(out, projectTask);
  103. List<ProjectStaff> projectStaffs = projectStaffMapper.selectByPid(id);
  104. if (!projectStaffs.isEmpty())out.setList(projectStaffs);
  105. return AjaxResult.success(out);
  106. }
  107. return AjaxResult.error("项目不存在");
  108. }
  109. @Override
  110. public List<ProjectTaskListOut> list(ProjectListInput in) {
  111. pushRoleType(in);
  112. if (!SecurityUtils.isSuperAdmin()){
  113. in.setUid(SecurityUtils.getUserId());
  114. Long companyId = deptService.selectCompanyByDeptId();
  115. if (companyId!=null)in.setCompanyId(companyId);
  116. }
  117. if (in.getMyCreate()!=null&&in.getMyCreate()==1){
  118. in.setCreateAid(SecurityUtils.getUserId());
  119. }
  120. if (in.getEndTime()!=null)in.setEndTime(in.getEndTime()+" 23:59:59");
  121. PageUtils.startPage();
  122. return projectTaskMapper.selectList(in);
  123. }
  124. private void pushRoleType(ProjectListInput in) {
  125. if (in.getRoleType()==null){
  126. if (SecurityUtils.hashRoles(UserRolesType.CEO.getCode())){
  127. in.setRoleType(1);
  128. }else if (SecurityUtils.hashRoles(UserRolesType.ADMIN.getCode())){
  129. in.setRoleType(3);
  130. }else if (SecurityUtils.hashRoles(UserRolesType.MANAGE.getCode())){
  131. in.setRoleType(2);
  132. }else {
  133. in.setRoleType(0);
  134. }
  135. }
  136. }
  137. @Override
  138. public String importProject(List<ProjectTaskListOut> list, boolean updateSupport, String operName) {
  139. if (StringUtils.isNull(list) || list.size() == 0)
  140. {
  141. throw new ServiceException("导入用户数据不能为空!");
  142. }
  143. int successNum = 0;
  144. int failureNum = 0;
  145. StringBuilder successMsg = new StringBuilder();
  146. StringBuilder failureMsg = new StringBuilder();
  147. Long company = deptService.selectCompanyByDeptId();
  148. List<Long> pids = new ArrayList<Long>();
  149. for (ProjectTaskListOut p : list)
  150. {
  151. try
  152. {
  153. if (p.getProjectYear()==null||p.getProjectYear()==""){
  154. throw new ServiceException("项目年份不能为空");
  155. }else if (p.getCreateYear()==null||p.getCreateYear()==""){
  156. throw new ServiceException("创建年份不能为空");
  157. }
  158. // 验证是否存在这个用户
  159. ProjectTask projectTask = projectTaskMapper.selectByProjectNumber(p.getProjectNumber(),company);
  160. if (StringUtils.isNull(projectTask)){
  161. BeanValidators.validateWithException(validator, p);
  162. if (checkProjectNumber(p)){
  163. throw new ServiceException(String.format("项目编号[%s]已存在", p.getProjectNumber()));
  164. }
  165. if(StringUtils.isNotBlank(p.getAdminName())) {
  166. SysUser sysUser = userMapper.selectByNikeName(p.getAdminName(),company);
  167. if (sysUser == null) {
  168. throw new ServiceException(String.format("负责人[%s]不存在", p.getAdminName()));
  169. }
  170. p.setAid(sysUser.getUserId());
  171. p.setAdminName(sysUser.getNickName());
  172. }
  173. p.setProjectStatus(0);
  174. projectTaskMapper.insertSelective(p);
  175. pushProjectStaffName(p, company);
  176. successNum++;
  177. successMsg.append("<br/>" + successNum + "、项目: " + p.getName() + " 导入成功");
  178. }else if (updateSupport){
  179. BeanValidators.validateWithException(validator, p);
  180. p.setId(projectTask.getId());
  181. if(StringUtils.isNotBlank(p.getStaffName())) {
  182. addStaffAndDelete( p);
  183. }
  184. if (p.getAdminName()!=null&&!projectTask.getAdminName().equals(p.getAdminName())){
  185. SysUser sysUser = userMapper.selectByNikeName(p.getAdminName(),company);
  186. if (sysUser == null) {
  187. throw new ServiceException(String.format("负责人[%s]不存在", p.getAdminName()));
  188. }
  189. List<ProjectStaffRecord> projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(p.getId(), projectTask.getAid());
  190. if (projectStaffRecords.size()>0){
  191. throw new ServiceException(String.format("负责人[%s]存在打卡,不允许切换.", projectTask.getAdminName()));
  192. }
  193. p.setAid(sysUser.getUserId());
  194. p.setAdminName(sysUser.getNickName());
  195. }
  196. projectTaskMapper.updateByPrimaryKeySelective(p);
  197. if (!pids.contains(p.getId())){
  198. pids.add(p.getId());
  199. }
  200. successNum++;
  201. successMsg.append("<br/>" + successNum + "、项目: " + projectTask.getName() + " 更新成功");
  202. }
  203. else
  204. {
  205. failureNum++;
  206. failureMsg.append("<br/>" + failureNum + "、项目: " + projectTask.getName() + " 已存在");
  207. }
  208. }
  209. catch (Exception e)
  210. {
  211. failureNum++;
  212. String msg = "<br/>" + failureNum + "、项目: " + p.getName() + " 导入失败:";
  213. failureMsg.append(msg + e.getMessage());
  214. log.error(msg, e);
  215. }
  216. }
  217. if (failureNum > 0)
  218. {
  219. failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
  220. throw new ServiceException(failureMsg.toString());
  221. }
  222. else
  223. {
  224. successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
  225. }
  226. if (!pids.isEmpty()){
  227. for (Long pid : pids) {
  228. projectStaffRecordMapper.updateSumDurationProject(pid);
  229. projectStaffRecordMapper.updateSumDurationStaff(pid);
  230. }
  231. }
  232. return successMsg.toString();
  233. }
  234. private void pushProjectStaffName(ProjectTaskListOut p, Long company) {
  235. if(StringUtils.isNotBlank(p.getStaffName())) {
  236. String[] split = StringUtils.splitString(p.getStaffName());
  237. for (String s : split) {
  238. ProjectStaff newPs = new ProjectStaff();
  239. SysUser sysUser = userMapper.selectByNikeName(s, company);
  240. if (sysUser == null) {
  241. throw new ServiceException("[" + s + "]不存在");
  242. }
  243. newPs.setAid(sysUser.getUserId());
  244. newPs.setName(sysUser.getNickName());
  245. newPs.setPid(p.getId());
  246. projectStaffMapper.insertSelective(newPs);
  247. }
  248. }
  249. projectTaskMapper.updateStaffName(p.getId());
  250. }
  251. @Override
  252. public AjaxResult updateProjectTask(ProjectTask in) {
  253. ProjectTask use = projectTaskMapper.selectByPrimaryKey(in.getId());
  254. if (!in.getAid().equals(use.getAid())){
  255. List<ProjectStaffRecord> projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(in.getId(), use.getAid());
  256. if (projectStaffRecords.size()>0){
  257. throw new ServiceException(String.format("负责人[%s]存在打卡,不允许切换.", use.getAdminName()));
  258. }
  259. }
  260. return AjaxResult.success(projectTaskMapper.updateByPrimaryKeySelective(in));
  261. }
  262. @Override
  263. public AjaxResult selectProjectImg(Long pid) {
  264. return AjaxResult.success(projectTaskMapper.selectProjectImg(pid));
  265. }
  266. @Override
  267. public boolean checkProjectNumber(ProjectTask projectTask) {
  268. Long companyId = deptService.selectCompanyByDeptId();
  269. ProjectTask projectTask1 = projectTaskMapper.selectByProjectNumber(projectTask.getProjectNumber(),companyId);
  270. if (projectTask.getId()==null){
  271. if (projectTask1!=null){
  272. return true;
  273. }
  274. }else {
  275. if (projectTask1!=null&&!projectTask.getId().equals(projectTask1.getId())){
  276. return true;
  277. }
  278. }
  279. return false;
  280. }
  281. private void addStaffAndDelete( ProjectTaskListOut p) {
  282. String[] split = p.getStaffName().split(",");
  283. List<ProjectStaff> projectStaffs = projectStaffMapper.selectByPid(p.getId());
  284. deleteStaff( split, projectStaffs);
  285. addStaff( p, split, projectStaffs);
  286. //再从新获取统计名字
  287. projectTaskMapper.updateStaffName(p.getId());
  288. }
  289. private void deleteStaff( String[] split, List<ProjectStaff> projectStaffs) {
  290. //预设需要删除,如果找到相同名字的就无需删除
  291. for (ProjectStaff ps : projectStaffs) {
  292. boolean flag = true;
  293. for (String s : split) {
  294. s=s.trim();
  295. if (ps.getName().equals(s)) {
  296. flag = false;
  297. }
  298. }
  299. if (flag) {
  300. int sum = projectStaffRecordMapper.selectById(ps.getId());
  301. if (sum > 0) {
  302. throw new ServiceException("[" + ps.getName() + "]存在打卡不能删除");
  303. }
  304. projectStaffMapper.deleteByPrimaryKey(ps.getId());
  305. }
  306. }
  307. }
  308. private void addStaff( ProjectTaskListOut p, String[] split, List<ProjectStaff> projectStaffs) {
  309. Long company = deptService.selectCompanyByDeptId();
  310. for (String s : split) {
  311. s=s.trim();
  312. boolean flag = true;
  313. for (ProjectStaff ps : projectStaffs) {
  314. if (ps.getName().equals(s)) {
  315. flag = false;
  316. }
  317. }
  318. if (flag) {
  319. ProjectStaff newPs = new ProjectStaff();
  320. SysUser sysUser = userMapper.selectByNikeName(s,company);
  321. if (sysUser == null) {
  322. throw new ServiceException("[" + s + "]不存在");
  323. }
  324. newPs.setAid(sysUser.getUserId());
  325. newPs.setName(sysUser.getNickName());
  326. newPs.setPid(p.getId());
  327. projectStaffMapper.insertSelective(newPs);
  328. }
  329. }
  330. }
  331. @Override
  332. public void saveProjectTaskTianhe(String ids) {
  333. String[] split = ids.split(",");
  334. try {
  335. for (String id : split) {
  336. saveProjectText(Long.valueOf(id));
  337. Thread.sleep(1000);
  338. }
  339. } catch (InterruptedException e) {
  340. throw new RuntimeException("上链异常,请稍后再试");
  341. }
  342. }
  343. @Override
  344. public void saveProjectStaffRecordTianhe(String ids) {
  345. String[] split = ids.split(",");
  346. try {
  347. for (String id : split) {
  348. saveRecordsText(Long.valueOf(id));
  349. Thread.sleep(1000);
  350. }
  351. } catch (InterruptedException e) {
  352. throw new RuntimeException("上链异常,请稍后再试");
  353. }
  354. }
  355. @Override
  356. public void saveText(String content) {
  357. String address = getAddress();
  358. String operateId ="text_"+DateUtils.dateTimeNow();
  359. //文字导入
  360. String s = tianheService.seveText(address, content, operateId);
  361. JSONObject res = JSONObject.parseObject(s);
  362. Integer code = (Integer) res.get("code");
  363. String tianheCloudUrl=null;
  364. if (code== HttpStatus.OK.value()){
  365. try {
  366. sleep(1000);
  367. } catch (InterruptedException e) {
  368. throw new RuntimeException(e);
  369. }
  370. String certificate = tianheService.getCertificate(address, operateId);
  371. JSONObject certificateData = JSONObject.parseObject(certificate);
  372. Integer code2= (Integer) certificateData.get("code");
  373. if (code2==HttpStatus.OK.value()){
  374. log.debug(certificateData.toJSONString());
  375. tianheCloudUrl=certificateData.getString("data");
  376. }else {
  377. String msg = certificateData.getString("msg");
  378. log.error(msg);
  379. throw new RuntimeException(msg);
  380. }
  381. }else {
  382. String msg = res.getString("msg");
  383. log.error(msg);
  384. throw new RuntimeException(msg);
  385. }
  386. }
  387. public void saveRecordsText(Long id) throws InterruptedException {
  388. ProjectStaffRecord projectStaffRecord = projectStaffRecordMapper.selectByPrimaryKey(Long.valueOf(id));
  389. Map<String,Object> map=new HashMap<>();
  390. map.put("projectStaffRecord",projectStaffRecord);
  391. map.put("date", DateUtils.getTime());
  392. saveTianhe(map,null,null,projectStaffRecord);
  393. }
  394. public void saveProjectText(Long id) throws InterruptedException {
  395. ProjectTask projectTask = projectTaskMapper.selectByPrimaryKey(id);
  396. List<ProjectStaffRecord> projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(id, null);
  397. Map<String,Object> map=new HashMap<>();
  398. map.put("projectTask",projectTask);
  399. map.put("projectStaffRecords",projectStaffRecords);
  400. map.put("date", DateUtils.getTime());
  401. saveTianhe(map,projectTask,projectStaffRecords,null);
  402. }
  403. private void saveTianhe(Map<String, Object> map, ProjectTask projectTask,
  404. List<ProjectStaffRecord> projectStaffRecords,
  405. ProjectStaffRecord projectStaffRecord) throws InterruptedException {
  406. String json = JSONObject.toJSONString(map);
  407. String address = getAddress();
  408. String operateId =null;
  409. if (projectTask!=null){
  410. operateId = "yfdk_"+DateUtils.dateTimeNow();
  411. }else {
  412. operateId = "yfdk_records_"+DateUtils.dateTimeNow();
  413. }
  414. String docx = createDocx(json, operateId);
  415. File file = new File(docx);
  416. String s = tianheService.seveFile(address,operateId,file);
  417. //文字导入
  418. // String s = tianheService.seveText(address, json, operateId);
  419. JSONObject res = JSONObject.parseObject(s);
  420. Integer code = (Integer) res.get("code");
  421. String tianheCloudUrl=null;
  422. if (code== HttpStatus.OK.value()){
  423. sleep(1000);
  424. String certificate = tianheService.getCertificate(address, operateId);
  425. JSONObject certificateData = JSONObject.parseObject(certificate);
  426. Integer code2= (Integer) certificateData.get("code");
  427. if (code2==HttpStatus.OK.value()){
  428. log.debug(certificateData.toJSONString());
  429. tianheCloudUrl=certificateData.getString("data");
  430. if (projectTask!=null){
  431. if (StringUtils.isNotEmpty(tianheCloudUrl)){
  432. ProjectTask newPT=new ProjectTask();
  433. newPT.setTianheUrl(tianheCloudUrl);
  434. newPT.setId(projectTask.getId());
  435. projectTaskMapper.updateByPrimaryKeySelective(newPT);
  436. }
  437. pushProjectStaffRecord(projectStaffRecords);
  438. }
  439. if (projectStaffRecord!=null){
  440. ProjectStaffRecord newPSR=new ProjectStaffRecord();
  441. newPSR.setTianheUrl(tianheCloudUrl);
  442. newPSR.setId(projectStaffRecord.getId());
  443. projectStaffRecordMapper.updateByPrimaryKeySelective(newPSR);
  444. }
  445. FileUtils.deleteFile(docx);
  446. }else {
  447. String msg = certificateData.getString("msg");
  448. log.error(msg);
  449. throw new RuntimeException(msg);
  450. }
  451. }else {
  452. String msg = res.getString("msg");
  453. log.error(msg);
  454. throw new RuntimeException(msg);
  455. }
  456. }
  457. private String createDocx(String json, String operateId) {
  458. String url=profile+"/"+ operateId +".docx";
  459. XWPFDocument document = new XWPFDocument();
  460. XWPFParagraph paragraph = document.createParagraph();
  461. XWPFRun run = paragraph.createRun();
  462. run.setText(json);
  463. try {
  464. // 保存文档到指定路径
  465. FileOutputStream out = new FileOutputStream(url);
  466. document.write(out);
  467. out.close();
  468. System.out.println("Word文档已成功创建!");
  469. } catch (IOException e) {
  470. e.printStackTrace();
  471. } finally {
  472. // 关闭文档对象
  473. try {
  474. document.close();
  475. } catch (IOException e) {
  476. throw new RuntimeException(e);
  477. }
  478. }
  479. return url;
  480. }
  481. /**
  482. * 处理日志跟随项目上链
  483. */
  484. private void pushProjectStaffRecord(List<ProjectStaffRecord> projectStaffRecords) {
  485. int count=50;
  486. int i=0;
  487. List<ProjectStaffRecord> newList=new ArrayList<>();
  488. for (ProjectStaffRecord projectStaffRecord : projectStaffRecords) {
  489. i++;
  490. newList.add(projectStaffRecord);
  491. if (newList.size()==count||i==projectStaffRecords.size()){
  492. projectStaffRecordMapper.updateTianheType(newList);
  493. newList.clear();
  494. }
  495. }
  496. }
  497. private String getAddress() {
  498. String address = null;
  499. SysUser user = SecurityUtils.getLoginUser().getUser();
  500. SysUser sysUser = userMapper.selectUserById(user.getUserId());
  501. if (sysUser.getTianheId()==null){
  502. try {
  503. String userId=user.getUserId().toString();
  504. String s = tianheService.addUser( userId, "123456");
  505. JSONObject jsonObject = JSONObject.parseObject(s);
  506. JSONObject data = (JSONObject) jsonObject.get("data");
  507. JSONObject pubKey = (JSONObject) data.get("pubKey");
  508. address= (String) pubKey.get("address");
  509. }catch (Exception e ){
  510. log.error("天河账号创建失败!");
  511. throw new RuntimeException("天河账号创建失败");
  512. }
  513. if (address!=null){
  514. user.setTianheId(address);
  515. userMapper.updateUser(user);
  516. }
  517. }else {
  518. address=sysUser.getTianheId();
  519. }
  520. if (address==null){
  521. throw new ServiceException("天河账号不存在,请稍后再试");
  522. }
  523. return address;
  524. }
  525. @Override
  526. public Object getCompanyData(String usci) {
  527. //获取部门信息
  528. SysDept sysDept = new SysDept();
  529. SysDept sysDept2 = sysDeptMapper.selectByusci(usci);
  530. sysDept.setAncestors(sysDept2.getDeptId().toString());
  531. List<SysDept> sysDepts = sysDeptMapper.selectDeptList(sysDept);
  532. sysDepts.stream().forEach(System.out::println);
  533. //获取部门下的用户信息
  534. List<SysUser> sysUsers = new ArrayList<>();
  535. List<ProjectTask> projectTasks=new ArrayList<>();
  536. sysDepts.stream().forEach(sysDept1 -> {
  537. sysUsers.addAll(userMapper.selectByDeptId(sysDept1.getDeptId()));
  538. });
  539. sysUsers.stream().forEach(sysUser -> {
  540. projectTasks.addAll(projectTaskMapper.selectByUserId(sysUser.getUserId()));
  541. });
  542. Map<String,Object> map=new HashMap();
  543. map.put("projectTasks",projectTasks);
  544. map.put("sysUsers",sysUsers);
  545. map.put("sysDepts",sysDepts);
  546. return map;
  547. }
  548. @Override
  549. public Object pushCompanyData(pushCompanyDataBo in) {
  550. //导入部门
  551. if (!in.getListDep().isEmpty()){
  552. pushAddDep(in.getListDep());
  553. }
  554. //导入用户
  555. if (!in.getListUser().isEmpty()){
  556. pushAddUser(in.getListUser());
  557. }
  558. //导入用户项目
  559. if (!in.getListUserProject().isEmpty()){
  560. pushAddUserProject(in.getListUserProject());
  561. }
  562. return 1;
  563. }
  564. @Override
  565. public Object pushRdData(pushRdDataBo in) {
  566. SysDept sysDept = sysDeptMapper.selectByusci(in.getUsci());
  567. Map<String,Object> map=new HashMap();
  568. if (!in.getRdList().isEmpty()){
  569. List<pushRdDataListBo> rdList = in.getRdList();
  570. rdList.stream().forEach(e -> {
  571. ProjectStaffRecord p = new ProjectStaffRecord();
  572. if (e.getProjectNumber() != null){
  573. ProjectTask projectTask =getCompanyProject(map,e.getProjectNumber(), sysDept.getDeptId());
  574. p.setPid(projectTask.getId());
  575. SysUser sysUser=getCompanyUser(map,e.getAdminKyId());
  576. p.setAid(sysUser.getUserId());
  577. p.setName(sysUser.getNickName());
  578. p.setProjectStatus(0);
  579. p.setProcessStatus(2);
  580. p.setRecordTime(DateUtils.parseDate(e.getRecordTime()));
  581. p.setDuration(e.getDuration());
  582. p.setCheckStatus(0);
  583. p.setInitDuration(e.getDuration());
  584. projectStaffRecordMapper.insertSelective(p);
  585. }
  586. });
  587. }
  588. return null;
  589. }
  590. private SysUser getCompanyUser(Map<String, Object> map, String adminKyId) {
  591. if (map.keySet().contains(adminKyId)){
  592. return (SysUser) map.get(adminKyId);
  593. }else{
  594. SysUser sysUser = userMapper.selectByKyId(adminKyId);
  595. map.put(sysUser.getKyId(),sysUser);
  596. return sysUser;
  597. }
  598. }
  599. private ProjectTask getCompanyProject(Map<String, Object> map, String projectNumber, Long deptId) {
  600. if (map.keySet().contains(projectNumber)){
  601. return (ProjectTask) map.get(projectNumber);
  602. }else{
  603. ProjectTask projectTask = projectTaskMapper.selectByProjectNumber(projectNumber, deptId);
  604. map.put(projectTask.getProjectNumber(),projectTask);
  605. return projectTask;
  606. }
  607. }
  608. private void pushAddUserProject(List<pushDataProject> listUserProject) {
  609. listUserProject.stream().forEach(e -> {
  610. ProjectTask projectTask = new ProjectTask();
  611. projectTask.setName(e.getProjectName());
  612. projectTask.setProjectNumber(e.getProjectNumber());
  613. projectTask.setProjectStatus(0);
  614. if (e.getAid()!=null){
  615. SysUser sysUser = userMapper.selectByKyId(e.getAid());
  616. if (sysUser!=null){
  617. projectTask.setAdminName(sysUser.getNickName());
  618. projectTask.setAid(sysUser.getUserId());
  619. }
  620. }
  621. projectTask.setStartTime(DateUtils.parseDate(e.getStartTime()));
  622. projectTask.setEndTime(DateUtils.parseDate(e.getEndTime()));
  623. projectTask.setProjectYear(e.getProjectYear());
  624. projectTask.setCreateYear(e.getCreateYear());
  625. projectTask.setCrossYear(0);
  626. projectTask.setDuration(0d);
  627. projectTask.setCreateTime(new Date());
  628. projectTaskMapper.insert(projectTask);
  629. if (e.getStaffIds()!=null){
  630. String[] split = e.getStaffIds().split(",");
  631. StringJoiner joiner = new StringJoiner(",");
  632. Stream<String> stream = Arrays.stream(split);
  633. stream.forEach(e1 -> {
  634. SysUser sysUser = userMapper.selectByKyId(e1);
  635. if (sysUser!=null){
  636. joiner.add(sysUser.getNickName());
  637. ProjectStaff projectStaff = new ProjectStaff();
  638. projectStaff.setPid(projectTask.getId());
  639. projectStaff.setAid(sysUser.getUserId());
  640. projectStaff.setName(joiner.toString());
  641. projectStaffMapper.insert(projectStaff);
  642. }
  643. });
  644. projectTask.setStaffName(joiner.toString());
  645. }
  646. projectTaskMapper.updateByPrimaryKey(projectTask);
  647. });
  648. }
  649. private void pushAddUser(List<pushDataUser> listUser) {
  650. //获取未获取到上级的数据
  651. List<SysUser> notSuperList = new ArrayList<>();
  652. List<SysUser> allUserList = new ArrayList<>();
  653. listUser.stream().forEach(e -> {
  654. SysUser sysUser = new SysUser();
  655. sysUser.setUserName(e.getUserName());
  656. sysUser.setNickName(e.getNickName());
  657. sysUser.setKyId(e.getKyId());
  658. sysUser.setKySuperId(e.getKySuperId());
  659. sysUser.setPassword(SecurityUtils.encryptPassword("123456"));
  660. sysUser.setStatus("0");
  661. sysUser.setDelFlag("0");
  662. if (e.getKyDeptId()!=null){
  663. SysDept sysDept = sysDeptMapper.selectByKyId(e.getKyDeptId());
  664. sysUser.setDeptId(sysDept.getDeptId());
  665. }
  666. SysUser sysUser1 = userMapper.selectByKyId(e.getKySuperId());
  667. if (sysUser1==null){
  668. userMapper.insertUser(sysUser);
  669. notSuperList.add(sysUser);
  670. }else {
  671. sysUser.setSuperiorId(sysUser1.getUserId());
  672. userMapper.insertUser(sysUser);
  673. }
  674. allUserList.add(sysUser);
  675. });
  676. if (!notSuperList.isEmpty()){
  677. notSuperList.stream().forEach(e -> {
  678. SysUser sysUser1 = userMapper.selectByKyId(e.getKySuperId());
  679. if (sysUser1!=null){
  680. e.setSuperiorId(sysUser1.getUserId());
  681. }
  682. userMapper.updateUser(e);
  683. });
  684. }
  685. //设置人员角色
  686. List<SysUserRole> roleList = new ArrayList<>();
  687. for (SysUser sysUser : allUserList) {
  688. SysUserRole sysUserRole = new SysUserRole();
  689. sysUserRole.setUserId(sysUser.getUserId());
  690. sysUserRole.setRoleId(2l);
  691. roleList.add(sysUserRole);
  692. }
  693. //每50个执行一次批量新增
  694. int maxSize = 50;
  695. if (roleList.size() > maxSize){
  696. for (int i = 0; i < listUser.size(); i += maxSize) {
  697. int end = Math.min(i + maxSize, listUser.size());
  698. List<SysUserRole> list = roleList.subList(i, end);
  699. sysUserRoleMapper.batchUserRole(list);
  700. }
  701. }else {
  702. sysUserRoleMapper.batchUserRole(roleList);
  703. }
  704. }
  705. private void pushAddDep(List<pushDataDep> listDep) {
  706. //假设只设置2级 1级为公司
  707. List<pushDataDep> sp1 = listDep.stream().filter(e -> StringUtils.isNotEmpty(e.getUsci())).collect(Collectors.toList());
  708. //先新增公司
  709. pushDataDep pushDataDep = sp1.get(0);
  710. SysDept sysDept1 = sysDeptMapper.selectByusci(pushDataDep.getUsci());
  711. if (sysDept1!=null) throw new ServiceException("公司已存在");
  712. SysDept sysDept=addCompany(pushDataDep);
  713. pushDep(listDep, pushDataDep.getKyId(),sysDept);
  714. }
  715. private void pushDep(List<pushDataDep> listDep, String kyId, SysDept pushDataDep) {
  716. List<pushDataDep> sp2 = listDep.stream().filter(e ->
  717. Objects.equals(e.getKySuperId(),kyId)).collect(Collectors.toList());
  718. if (sp2.isEmpty()) {
  719. return;
  720. }
  721. SysDept sysDept1 = sysDeptMapper.selectByKyId(kyId);
  722. for (pushDataDep e : sp2) {
  723. SysDept sysDept = new SysDept();
  724. sysDept.setDeptName(e.getDeptName());
  725. sysDept.setKyId(e.getKyId());
  726. sysDept.setCompanyName(pushDataDep.getDeptName());
  727. sysDept.setCompanyId(pushDataDep.getDeptId());
  728. sysDept.setParentId(sysDept1.getDeptId());
  729. sysDept.setAncestors(sysDept1.getAncestors()+","+sysDept1.getDeptId());
  730. sysDeptMapper.insertDept(sysDept);
  731. pushDep(listDep, e.getKyId(),pushDataDep);
  732. }
  733. }
  734. private SysDept addCompany(pushDataDep pushDataDep) {
  735. SysDept sysDept = new SysDept();
  736. sysDept.setUsci(pushDataDep.getUsci());
  737. sysDept.setDeptName(pushDataDep.getDeptName());
  738. sysDept.setKyId(pushDataDep.getKyId());
  739. sysDept.setParentId(100l);
  740. sysDept.setAncestors("0,100");
  741. sysDeptMapper.insertDept(sysDept);
  742. return sysDept;
  743. }
  744. }