OrgService.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. package com.dk.mdm.service.mst;
  2. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  3. import com.dk.common.infrastructure.annotaiton.Pagination;
  4. import com.dk.common.infrastructure.constant.Constant;
  5. import com.dk.common.infrastructure.enums.ErrorCodeEnum;
  6. import com.dk.common.model.pojo.PageList;
  7. import com.dk.common.response.ResponseCodeEnum;
  8. import com.dk.common.response.ResponseResultUtil;
  9. import com.dk.common.response.ResponseResultVO;
  10. import com.dk.mdm.infrastructure.convert.mst.OrgConvert;
  11. import com.dk.mdm.mapper.mst.OrgMacMapper;
  12. import com.dk.mdm.mapper.mst.OrgWhMapper;
  13. import com.dk.mdm.model.pojo.mst.Org;
  14. import com.dk.mdm.mapper.mst.OrgMapper;
  15. import com.dk.common.service.BaseService;
  16. import com.dk.common.mapper.BaseMapper;
  17. import com.dk.mdm.model.pojo.mst.OrgMac;
  18. import com.dk.mdm.model.pojo.mst.OrgWh;
  19. import com.dk.mdm.model.query.mst.OrgQuery;
  20. import com.dk.common.model.response.mst.OrgResponse;
  21. import com.dk.common.model.vo.mst.OrgVO;
  22. import com.dk.mdm.model.response.mst.MoneyAccountResponse;
  23. import com.dk.mdm.service.common.CommonService;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. @Service
  30. @Transactional
  31. public class OrgService extends BaseService<Org> {
  32. /**
  33. * @desc : 重写主键
  34. * @author : 王英杰
  35. * @date : 2023/1/9 10:39
  36. */
  37. @Override
  38. public String getPrimaryKey() {
  39. return "org_id";
  40. }
  41. @Override
  42. public BaseMapper<Org> getRepository() {
  43. return orgMapper;
  44. }
  45. @Autowired
  46. private OrgMapper orgMapper;
  47. @Autowired
  48. private OrgConvert orgConvert;
  49. @Autowired
  50. private CommonService commonService;
  51. @Autowired
  52. private OrgWhMapper orgWhMapper;
  53. @Autowired
  54. private OrgMacMapper orgMacMapper;
  55. /**
  56. * @desc : 条件查询
  57. * @author : 王英杰
  58. * @date : 2023/1/10 17:19
  59. */
  60. @Pagination
  61. public ResponseResultVO<PageList<OrgResponse>> selectByCond(OrgQuery orgQuery) {
  62. List<OrgResponse> list = orgMapper.selectByCond(orgQuery);
  63. if (orgQuery.getParentId() != null) { //说明传这个id就是部门档案查三级部门以下有没有子级
  64. for (OrgResponse item : list) {
  65. OrgQuery qry = new OrgQuery();
  66. qry.setParentId(item.getOrgId());
  67. item.setItemDataLength(orgMapper.countByCond(qry));
  68. }
  69. }
  70. return super.mergeListWithCount(orgQuery, list,
  71. orgMapper.countByCond(orgQuery));
  72. }
  73. /**
  74. * @desc : 条件查询
  75. * @author : 王英杰
  76. * @date : 2023/1/10 17:19
  77. */
  78. @Pagination
  79. public ResponseResultVO<List<OrgResponse>> selectByCondTree(OrgQuery orgQuery) {
  80. List<OrgResponse> list = new ArrayList<>();
  81. list = orgMapper.selectByCondTree(orgQuery);
  82. if (orgQuery.getParentId() != null) { //说明传这个id就是部门档案查三级部门以下有没有子级
  83. for (OrgResponse item : list) {
  84. OrgQuery qry = new OrgQuery();
  85. qry.setParentId(item.getOrgId());
  86. item.setItemDataLength(orgMapper.countByCond(qry));
  87. }
  88. }
  89. return ResponseResultUtil.success(list);
  90. }
  91. /**
  92. * @desc : 通过ID查询 带出对应的 组织资金账户 以及组织仓库
  93. * @author : 王英杰
  94. * @date : 2023/2/29 10:40
  95. */
  96. @Pagination
  97. public ResponseResultVO getById(String id) {
  98. Org orgResponse = orgMapper.selectById(id);
  99. orgResponse.setWarehouseBeanList(orgWhMapper.selectByCond(new OrgWh().setOrgId(id)));
  100. orgResponse.setMacBeanList(orgMacMapper.selectByCond(new OrgMac().setOrgId(id)));
  101. return ResponseResultUtil.success(orgResponse);
  102. }
  103. /**
  104. * @desc : 微信小程序 查询选择部门数据
  105. * @author : 宋扬
  106. * @date : 2023/2/29 10:40
  107. */
  108. @Pagination
  109. public ResponseResultVO<List<OrgResponse>> selectChooseOrg(OrgQuery orgQuery) {
  110. // 查出当前部门,进行过滤
  111. if (orgQuery.getOrgId() != null) {
  112. Org org = orgMapper.selectById(orgQuery.getOrgId()); //查出部门的 层级代码
  113. orgQuery.setLevelCode(org.getLevelCode());
  114. orgQuery.setFilterFlag("ok");
  115. }
  116. String parentId = orgQuery.getParentId();
  117. List<OrgResponse> orgResponseList = orgMapper.selectChooseOrg(orgQuery.setParentId(null));
  118. return ResponseResultUtil.success(orgResponseList.stream().
  119. filter(it -> !it.getOrgId().equals(parentId)).collect(Collectors.toList()));
  120. }
  121. /**
  122. * @desc : 新建组织机构
  123. * @author : 王英杰
  124. * @date : 2024/2/27 9:17
  125. */
  126. @Transactional(
  127. rollbackFor = {Exception.class}
  128. )
  129. public ResponseResultVO<?> insert(OrgVO orgVO) {
  130. // 转化实体
  131. Org organization = orgConvert.convertToPo(orgVO);
  132. // 如果父级部门的是业务部门标识,就不能有子级
  133. if(organization.getParentId() != null ){
  134. Org checkOrg = orgMapper.selectById(organization.getParentId());
  135. if(checkOrg != null && checkOrg.getFlgBusiness() != null && checkOrg.getFlgBusiness()){
  136. //系统预制 无法编辑
  137. return ResponseResultUtil.error(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORG_PARENT_IS_BUSINESS.getMessage());
  138. }
  139. }
  140. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.ORG.getName(), true);
  141. // 获取编码和主键UuId
  142. organization.setOrgId(codeMap.get("outId").toString());
  143. organization.setOrgCode(codeMap.get("outNote").toString());
  144. //查询 本次要加的 部门的 父级下 最大的DisplayNo 然后加1 就是现在要加的DisplayNo
  145. Map<String, Object> param = new HashMap<>();
  146. param.put("otherCond", "parent_id = #{parentID} ::uuid");
  147. param.put("parentId", organization.getParentId());
  148. organization.setDisplayNo(commonService.getMaxDisplayNo(Constant.DisplayNoTable.ORG, param));
  149. if (organization.getParentId() != null) {
  150. Org org = orgMapper.selectById(organization.getParentId());
  151. //插入TOPid
  152. organization.setTopId(org.getTopId());
  153. }
  154. // 插入组织部门数据
  155. super.insert(organization);
  156. //执行函数
  157. orgMapper.resetLevelOrg(new Org().setTopId(organization.getTopId()).setCpId(organization.getCpId()));
  158. // 添加组织仓库
  159. if (orgVO.getWarehouseList() != null && orgVO.getWarehouseList().size() > 0) {
  160. for (Map<String, Object> map : orgVO.getWarehouseList()) {
  161. // 获取显示顺序
  162. Map<String, Object> paramOrgWh = new HashMap<>();
  163. paramOrgWh.put("noFlgValid", true);
  164. Integer orgWhDisplayNo = commonService.getMaxDisplayNo(Constant.DisplayNoTable.ORGWH, paramOrgWh);
  165. OrgWh orgWh = new OrgWh();
  166. orgWh.setOrgId(organization.getOrgId()).setWhId(map.get("whId").toString()).setDisplayNo(orgWhDisplayNo)
  167. .setFlgDefault(Boolean.parseBoolean(map.get("ownerFlag").toString()));
  168. orgWhMapper.insert(orgWh);
  169. }
  170. }
  171. // 添加组织资金账户
  172. if (orgVO.getMacList() != null && orgVO.getMacList().size() > 0) {
  173. for (Map<String, Object> map : orgVO.getMacList()) {
  174. // 获取显示顺序
  175. Map<String, Object> paramOrgMac = new HashMap<>();
  176. paramOrgMac.put("noFlgValid", true);
  177. Integer orgMacDisplayNo = commonService.getMaxDisplayNo(Constant.DisplayNoTable.ORGMAC, paramOrgMac);
  178. OrgMac orgMac = new OrgMac();
  179. orgMac.setOrgId(organization.getOrgId()).setMacId(map.get("macId").toString()).setDisplayNo(orgMacDisplayNo)
  180. .setFlgDefault(Boolean.parseBoolean(map.get("ownerFlag").toString()));
  181. orgMacMapper.insert(orgMac);
  182. }
  183. }
  184. return ResponseResultUtil.success();
  185. // return result == 1 ? ResponseResultUtil.success(organization) :
  186. // ResponseResultUtil.error(ResponseCodeEnum.INSERT_FAIL);
  187. }
  188. /**
  189. * @desc : 新建组织机构
  190. * @author : 王英杰
  191. * @date : 2024/2/27 9:17
  192. */
  193. @Transactional(
  194. rollbackFor = {Exception.class}
  195. )
  196. public ResponseResultVO<?> insertFeignOrg(OrgVO orgVO) {
  197. // 转化实体
  198. Org organization = orgConvert.convertToPo(orgVO);
  199. // 获取显示顺序
  200. Map<String, Object> codeMap = commonService.getUniqueNoteCode(
  201. Constant.docNameConstant.ORG.getName(), orgVO.getCpId(), true);
  202. // 获取编码和主键UuId
  203. organization.setDisplayNo(0);
  204. organization.setOrgId(codeMap.get("outId").toString());
  205. organization.setOrgCode(codeMap.get("outNote").toString());
  206. // 插入组织部门数据
  207. super.insert(organization);
  208. //执行函数
  209. // orgMapper.resetLevelOrg(new Org().setTopId(organization.getParentId()).setCpId(organization.getCpId()));
  210. return ResponseResultUtil.success(organization);
  211. }
  212. /**
  213. * @desc : 编辑方法
  214. * @author : 宋扬
  215. * @date : 2024/3/22 17:15
  216. */
  217. @Transactional(
  218. rollbackFor = {Exception.class}
  219. )
  220. public ResponseResultVO<Boolean> update(OrgVO orgVO) {
  221. // 转化实体
  222. Org org = orgConvert.convertToPo(orgVO);
  223. // 如果是业务部门标识,那么不能有子级
  224. if (org.getFlgBusiness() != null && org.getFlgBusiness()) {
  225. Long childCount = orgMapper.countByCond(new OrgQuery().setParentId(org.getOrgId()));
  226. if (childCount > 0) {
  227. // 部门有子级不允许修改为业务部门
  228. return ResponseResultUtil.error(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORG_BUSINESS_HAS_CHILD.getMessage());
  229. }
  230. }
  231. // 如果父级部门的是业务部门标识,就不能有子级
  232. if(org.getParentId() != null ){
  233. Org checkOrg = orgMapper.selectById(org.getParentId());
  234. if(checkOrg != null && checkOrg.getFlgBusiness() != null && checkOrg.getFlgBusiness()){
  235. //系统预制 无法编辑
  236. return ResponseResultUtil.error(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ORG_PARENT_IS_BUSINESS.getMessage());
  237. }
  238. }
  239. // 修改组织机构
  240. super.update(org, new UpdateWrapper<Org>().lambda().eq(Org::getOrgId,
  241. UUID.fromString(org.getOrgId())));
  242. if (orgVO.getParentId() != null) {
  243. Org org_ = orgMapper.selectById(orgVO.getParentId());
  244. //插入TOPid
  245. org.setTopId(org_.getTopId());
  246. }
  247. //执行函数
  248. orgMapper.resetLevelOrg(new Org().setTopId(org.getTopId()).setCpId(org.getCpId()));
  249. //删除组织仓库和组织资金账户
  250. orgWhMapper.deleteByOrgId(org.getOrgId());
  251. orgMacMapper.deleteByOrgId(org.getOrgId());
  252. // 添加组织仓库
  253. if (orgVO.getWarehouseList() != null && orgVO.getWarehouseList().size() > 0) {
  254. for (Map<String, Object> map : orgVO.getWarehouseList()) {
  255. // 获取显示顺序
  256. Map<String, Object> paramOrgWh = new HashMap<>();
  257. paramOrgWh.put("noFlgValid", true);
  258. Integer orgWhDisplayNo = commonService.getMaxDisplayNo(Constant.DisplayNoTable.ORGWH, paramOrgWh);
  259. OrgWh orgWh = new OrgWh();
  260. orgWh.setOrgId(org.getOrgId()).setWhId(map.get("whId").toString()).setDisplayNo(orgWhDisplayNo)
  261. .setFlgDefault(Boolean.parseBoolean(map.get("ownerFlag").toString()));
  262. orgWhMapper.insert(orgWh);
  263. }
  264. }
  265. // 添加组织资金账户
  266. if (orgVO.getMacList() != null && orgVO.getMacList().size() > 0) {
  267. for (Map<String, Object> map : orgVO.getMacList()) {
  268. // 获取显示顺序
  269. Map<String, Object> paramOrgMac = new HashMap<>();
  270. paramOrgMac.put("noFlgValid", true);
  271. Integer orgMacDisplayNo = commonService.getMaxDisplayNo(Constant.DisplayNoTable.ORGMAC, paramOrgMac);
  272. OrgMac orgMac = new OrgMac();
  273. orgMac.setOrgId(org.getOrgId()).setMacId(map.get("macId").toString()).setDisplayNo(orgMacDisplayNo)
  274. .setFlgDefault(Boolean.parseBoolean(map.get("ownerFlag").toString()));
  275. orgMacMapper.insert(orgMac);
  276. }
  277. }
  278. return ResponseResultUtil.success();
  279. }
  280. }