OrganizationServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. package com.goafanti.organization.service.impl;
  2. import com.goafanti.admin.bo.AdminListBo;
  3. import com.goafanti.common.dao.DepartmentMapper;
  4. import com.goafanti.common.dao.ExpenseConfigDetailsMapper;
  5. import com.goafanti.common.dao.TOrderMidMapper;
  6. import com.goafanti.common.dao.TOrderNewMapper;
  7. import com.goafanti.common.model.Department;
  8. import com.goafanti.common.model.ExpenseConfigDetails;
  9. import com.goafanti.common.utils.AsyncUtils;
  10. import com.goafanti.common.utils.StringUtils;
  11. import com.goafanti.core.mybatis.BaseMybatisDao;
  12. import com.goafanti.core.mybatis.page.Pagination;
  13. import com.goafanti.core.shiro.token.TokenManager;
  14. import com.goafanti.organization.bo.DepOut;
  15. import com.goafanti.organization.bo.InputDep;
  16. import com.goafanti.organization.bo.OrganizationListOut;
  17. import com.goafanti.organization.service.OrganizationService;
  18. import net.sourceforge.pinyin4j.PinyinHelper;
  19. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  20. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Service;
  23. import java.util.*;
  24. import java.util.stream.Collectors;
  25. @Service
  26. public class OrganizationServiceImpl extends BaseMybatisDao<DepartmentMapper> implements OrganizationService {
  27. @Autowired
  28. private DepartmentMapper departmentMapper;
  29. @Autowired
  30. private ExpenseConfigDetailsMapper expenseConfigDetailsMapper;
  31. @Autowired
  32. private TOrderNewMapper torderNewMapper;
  33. @Autowired
  34. private TOrderMidMapper torderMidMapper;
  35. @Autowired
  36. private AsyncUtils asyncUtils;
  37. @Override
  38. public Pagination<OrganizationListOut> listOrganizationManagement(OrganizationListOut olo, Integer pageNo,
  39. Integer pageSize) {
  40. /*olo.setCreateId(TokenManager.getAdminId());*/
  41. Map<String,Object> params =disposeParams(olo);
  42. @SuppressWarnings("unchecked")
  43. Pagination<OrganizationListOut> p=(Pagination<OrganizationListOut>)findPage("selectOrganizationList","selectOrganizationCount",params,pageNo,pageSize);
  44. return p;
  45. }
  46. private Map<String,Object> disposeParams(OrganizationListOut olo){
  47. Map<String,Object> params = new HashMap<String, Object>();
  48. if(StringUtils.isNotBlank(olo.getId())) params.put("id", olo.getId());
  49. if(StringUtils.isNotBlank(olo.getCreateId())) params.put("createId", olo.getCreateId());
  50. if(StringUtils.isNotBlank(olo.getCreateTime())) params.put("createTime", olo.getCreateTime());
  51. if(StringUtils.isNotBlank(olo.getUpdateTime())) params.put("updateTime", olo.getUpdateTime());
  52. if(StringUtils.isNotBlank(olo.getDeletedSign())) params.put("deletedSign", olo.getDeletedSign());
  53. if(StringUtils.isNotBlank(olo.getName())) params.put("name", olo.getName());
  54. if(StringUtils.isNotBlank(olo.getType())) params.put("type", olo.getType());
  55. if(StringUtils.isNotBlank(olo.getManagerId())) params.put("managerId", olo.getManagerId());
  56. if(StringUtils.isNotBlank(olo.getDepNo())) params.put("depNo", olo.getDepNo());
  57. if(StringUtils.isNotBlank(olo.getSuperId())) params.put("superId", olo.getSuperId());
  58. if(StringUtils.isNotBlank(olo.getRemarks())) params.put("remarks", olo.getRemarks());
  59. if(StringUtils.isNotBlank(olo.getStatus())) params.put("status", olo.getStatus());
  60. return params;
  61. }
  62. @Override
  63. public List<DepOut> selectSuperId(Integer hideSign) {
  64. if(hideSign==null){
  65. hideSign=1;
  66. }
  67. //此处理用于前端不批量改接口
  68. if (hideSign>1){
  69. hideSign=null;
  70. }
  71. List<DepOut> depList=departmentMapper.selectSuperId(hideSign,null,null);
  72. return listSort(depList);
  73. }
  74. private List<DepOut> listSort(List<DepOut> depList) {
  75. HanyuPinyinOutputFormat format=new HanyuPinyinOutputFormat();
  76. Collections.sort(depList, (o1, o2) -> {
  77. String str1=null;
  78. String str2=null;
  79. try {
  80. str1= PinyinHelper.toHanYuPinyinString(o1.getName(),format," ",true);
  81. str2= PinyinHelper.toHanYuPinyinString(o2.getName(),format," ",true);
  82. } catch (BadHanyuPinyinOutputFormatCombination e) {
  83. throw new RuntimeException(e);
  84. }
  85. return str1.compareTo(str2);
  86. });
  87. return depList;
  88. }
  89. @Override
  90. public List<DepOut> getAllDep(Integer hideSign) {
  91. if(hideSign==null){
  92. hideSign=1;
  93. }
  94. //此处理用于前端不批量改接口
  95. if (hideSign>1){
  96. hideSign=null;
  97. }
  98. List<DepOut> allDep=departmentMapper.selectSuperId(hideSign,null,null);
  99. List<DepOut> dep1=new ArrayList<>();
  100. Integer x=3;//设置顶级
  101. for (DepOut e : allDep) {
  102. if (e.getLvl()==x){
  103. e.setList(selectDepLvl(allDep,e.getId(),x+1));
  104. dep1.add(e);
  105. }
  106. }
  107. return dep1;
  108. }
  109. private List<DepOut> selectDepLvl(List<DepOut> allDep,String id, Integer i) {
  110. List<DepOut> newDep=new ArrayList<>();
  111. for (DepOut depOut : allDep) {
  112. if (depOut.getLvl()==i&&depOut.getSuperId().equals(id)){
  113. if (i<7)depOut.setList(selectDepLvl(allDep,depOut.getId(),i+1));
  114. newDep.add(depOut);
  115. }
  116. }
  117. return newDep;
  118. }
  119. /**
  120. * XXIn form 提交 ,bo包中
  121. * xxOut 输出 bo包中
  122. * domain 类 model中
  123. *
  124. */
  125. @Override
  126. public int addOrganization( String name, String managerId, String type, String superId, String remarks,
  127. Integer workingHoursType,Integer hideSign,String depNo) {
  128. Department superDep=departmentMapper.selectByPrimaryKey(superId);
  129. String id = UUID.randomUUID().toString();
  130. Date now = new Date();
  131. Department dep=new Department();
  132. dep.setId(id);
  133. String createId =departmentMapper.selectAdminNameById(TokenManager.getAdminId());
  134. dep.setCreateId(createId);
  135. dep.setCreateTime(now);
  136. dep.setUpdateTime(now);
  137. dep.setDeletedSign(0);
  138. dep.setName(name);
  139. dep.setLvl(superDep.getLvl()+1);
  140. dep.setType(type);
  141. dep.setManagerId(managerId);
  142. dep.setDepNo(depNo);
  143. // superId=departmentMapper.selectIdByName(superId);
  144. dep.setSuperId(superId);
  145. dep.setRemarks(remarks);
  146. dep.setStatus("0");
  147. dep.setHideSign(hideSign);
  148. dep.setWorkingHoursType(workingHoursType);
  149. departmentMapper.insertSelective(dep);
  150. return 1;
  151. }
  152. private String getMaxDep(Department superDep) {
  153. String sdepNo=superDep.getDepNo();
  154. Department maxDep=departmentMapper.selectByDepNo(superDep.getId());
  155. String depNo=new String();
  156. if (maxDep==null){
  157. depNo= sdepNo +"01";
  158. }else {
  159. String maxDepNo=maxDep.getDepNo();
  160. Integer countNo=Integer.valueOf(maxDepNo.substring(maxDepNo.length()-2));
  161. countNo++;
  162. if (countNo<10){
  163. depNo= sdepNo +"0"+countNo;
  164. }else {
  165. depNo= sdepNo +countNo;
  166. }
  167. }
  168. return depNo;
  169. }
  170. @Override
  171. public List<AdminListBo> selectName(String name) {
  172. List<AdminListBo> list=departmentMapper.selectName(name);
  173. return list;
  174. }
  175. @Override
  176. public OrganizationListOut selectAllById(String id) {
  177. OrganizationListOut olo=departmentMapper.selectAllById(id);
  178. List<ExpenseConfigDetails> list = expenseConfigDetailsMapper.selectByDepId(id);
  179. olo.setExpenseRetrialFinanceExamineList(list.stream().filter(e ->e.getType()==1).collect(Collectors.toList()));
  180. olo.setCeoExamineList(list.stream().filter(e ->e.getType()==2).collect(Collectors.toList()));
  181. olo.setCfoExamineList(list.stream().filter(e ->e.getType()==3).collect(Collectors.toList()));
  182. olo.setViceCeoExamineList(list.stream().filter(e ->e.getType()==4).collect(Collectors.toList()));
  183. olo.setCashierExamineList(list.stream().filter(e ->e.getType()==5).collect(Collectors.toList()));
  184. olo.setSuperId(departmentMapper.selectNameById(olo.getSuperId()));
  185. return olo;
  186. }
  187. @Override
  188. public int deleteById(String id) {
  189. departmentMapper.deleteById(id);
  190. return 1;
  191. }
  192. @Override
  193. public int updateOrganization(InputDep in) {
  194. //获取上级编号
  195. Department superDep=departmentMapper.selectByPrimaryKey(in.getSuperId());
  196. Department useDep = departmentMapper.selectByPrimaryKey(in.getId());
  197. Date now=new Date();
  198. Department dep=new Department();
  199. dep.setLvl(superDep.getLvl()+1);
  200. dep.setName(in.getName());
  201. dep.setType(in.getType());
  202. dep.setUpdateTime(now);
  203. dep.setManagerId(in.getManagerId());
  204. dep.setStatus(in.getStatus());
  205. dep.setRemarks(in.getRemarks());
  206. dep.setId(in.getId());
  207. dep.setSuperId(in.getSuperId());
  208. dep.setDepNo(in.getDepNo());
  209. dep.setAbbreviation(in.getAbbreviation());
  210. dep.setProvince(in.getProvince());
  211. dep.setHideSign(in.getHideSign());
  212. dep.setWorkingHoursType(in.getWorkingHoursType());
  213. dep.setApproval(in.getApproval());
  214. dep.setApprovalAid(in.getApprovalAid());
  215. //财务与复审切换的时候要切换所有未审核的财务
  216. boolean updateFinance=false;
  217. boolean updateRetrialFinance=false;
  218. if(StringUtils.isNotBlank(in.getFinanceId())&&!in.getFinanceId().equals(useDep.getFinanceId())){
  219. dep.setFinanceId(in.getFinanceId());
  220. //处理订单
  221. departmentMapper.updateOrderDepFinanceNotExamine(in.getFinanceId(),useDep.getFinanceId());
  222. List<String> list = torderNewMapper.selectByFinanceNotExamine(in.getFinanceId());
  223. torderNewMapper.updateOrderDepFinanceExamineName(list);
  224. updateFinance=true;
  225. }
  226. if (StringUtils.isNotBlank(in.getRetrialFinanceId())&&
  227. !in.getRetrialFinanceId().equals(useDep.getRetrialFinanceId())){
  228. dep.setRetrialFinanceId(in.getRetrialFinanceId());
  229. departmentMapper.updateOrderDepFinanceNotExamine(in.getRetrialFinanceId(),useDep.getRetrialFinanceId());
  230. List<String> list = torderNewMapper.selectByFinanceNotExamine(in.getRetrialFinanceId());
  231. torderNewMapper.updateOrderDepFinanceExamineName(list);
  232. updateRetrialFinance=true;
  233. }
  234. dep.setExpenseFinanceId(in.getExpenseFinanceId());
  235. //获取需要重新刷新的财务
  236. List<String> aids =new ArrayList<>();
  237. if (updateFinance){
  238. if (aids.contains(in.getFinanceId())){
  239. aids.add(in.getFinanceId());
  240. }
  241. if(!aids.contains(useDep.getFinanceId())){
  242. aids.add(useDep.getFinanceId());
  243. }
  244. torderMidMapper.updateFinanceId(in.getId(),in.getFinanceId());
  245. asyncUtils.updateFinanceExamine(in.getFinanceId());
  246. }
  247. if(updateRetrialFinance){
  248. if (aids.contains(in.getRetrialFinanceId())){
  249. aids.add(in.getRetrialFinanceId());
  250. }
  251. if(!aids.contains(useDep.getRetrialFinanceId())){
  252. aids.add(useDep.getRetrialFinanceId());
  253. }
  254. }
  255. //
  256. checkFinaceUpdate(aids);
  257. if (in.getExpenseRetrialFinanceExamine()==1){
  258. dep.setExpenseRetrialFinanceExamine(in.getExpenseRetrialFinanceExamine());
  259. }
  260. if (in.getCeoExamine()==1){
  261. dep.setCeoExamine(in.getCeoExamine());
  262. }
  263. if (in.getCfoExamine()==1){
  264. dep.setCfoExamine(in.getCfoExamine());
  265. }
  266. if (in.getViceCeoExamine()==1){
  267. dep.setViceCeoExamine(in.getViceCeoExamine());
  268. }
  269. if (in.getCashierExamine()==1){
  270. dep.setCashierExamine(in.getCashierExamine());
  271. }
  272. int x=departmentMapper.updateByPrimaryKeySelective(dep);
  273. return x;
  274. }
  275. /**
  276. * 如果更换了负责人刷新中间表
  277. */
  278. private void checkFinaceUpdate(List<String> aids) {
  279. asyncUtils.financeCoutSwitch(aids);
  280. }
  281. @Override
  282. public boolean checkDepNo(String depNo,Integer type) {
  283. String useDepNo=departmentMapper.selectIdByDepNo(depNo);
  284. if (StringUtils.isNotBlank(useDepNo)){
  285. if (type==1){
  286. if (!depNo.equals(useDepNo)){
  287. return false;
  288. }else {
  289. return true;
  290. }
  291. }else {
  292. return true;
  293. }
  294. }
  295. return false;
  296. }
  297. private String countDepNo(String sdepNo, Integer count) {
  298. String dep=null;
  299. if(count<10){
  300. dep=sdepNo+"0"+count;
  301. String sid=departmentMapper.selectIdByDepNo(dep);
  302. while(sid!=null){
  303. count=(count+1)%100;
  304. if(count>=10){
  305. dep=sdepNo+count;
  306. }else{
  307. dep=sdepNo+"0"+count;
  308. }
  309. sid=departmentMapper.selectIdByDepNo(dep);
  310. }
  311. }else if(count>=10){
  312. dep=sdepNo+count;
  313. String sid=departmentMapper.selectIdByDepNo(dep);
  314. while(sid!=null){
  315. count=(count+1)%100;
  316. dep=sdepNo+count;
  317. sid=departmentMapper.selectIdByDepNo(dep);
  318. }
  319. }
  320. return dep;
  321. }
  322. private void updateLowerLevelNo(String id,String depNo,Integer lvl) {
  323. List<OrganizationListOut> Nos =departmentMapper.selectIDNBySuperId(id);
  324. int i=1;
  325. for (OrganizationListOut o : Nos) {
  326. o.setLvl(lvl+1);
  327. if(i<10){
  328. String dep=depNo+"0"+i;
  329. if(i>=10){
  330. dep=depNo+i;
  331. }else{
  332. dep=depNo+"0"+i;
  333. }
  334. o.setDepNo(dep);
  335. } else if(i>=10){
  336. String dep=depNo+i;
  337. dep=depNo+i;
  338. o.setDepNo(dep);
  339. }
  340. departmentMapper.updateByNumber(o);
  341. updateLowerLevelNo(o.getId(),o.getDepNo(),o.getLvl());
  342. i++;
  343. }
  344. }
  345. }