UserArchivesServiceImpl.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. package com.goafanti.customer.service.impl;
  2. import com.goafanti.common.dao.*;
  3. import com.goafanti.common.model.*;
  4. import com.goafanti.common.utils.excel.NewExcelUtil;
  5. import com.goafanti.core.mybatis.BaseMybatisDao;
  6. import com.goafanti.core.mybatis.page.Pagination;
  7. import com.goafanti.core.shiro.token.TokenManager;
  8. import com.goafanti.customer.bo.InputSelectUserArchives;
  9. import com.goafanti.customer.bo.OutSelectUserArchives;
  10. import com.goafanti.customer.bo.UserArchivesDetails;
  11. import com.goafanti.customer.service.CustomerService;
  12. import com.goafanti.customer.service.UserArchivesService;
  13. import org.springframework.beans.BeanUtils;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.Resource;
  17. import java.util.*;
  18. import java.util.stream.Collectors;
  19. /**
  20. * 客户档案表(UserArchives)表服务实现类
  21. *
  22. * @author makejava
  23. * @since 2024-07-12 11:52:01
  24. */
  25. @Service("userArchivesService")
  26. public class UserArchivesServiceImpl extends BaseMybatisDao< UserArchivesMapper> implements UserArchivesService {
  27. @Resource
  28. private UserArchivesMapper userArchivesMapper;
  29. @Resource
  30. private UserArchivesInterviewMapper userArchivesInterviewMapper;
  31. @Resource
  32. private CustomerService customerService;
  33. @Resource
  34. private UserMapper userMapper;
  35. @Resource
  36. private UserMidMapper userMidMapper;
  37. @Resource
  38. private UserLimitCheckMapper userLimitCheckMapper;
  39. @Resource
  40. private AdminMapper adminMapper;
  41. @Resource
  42. private UserDataLogMapper userDataLogMapper;
  43. @Resource
  44. private UserFirstInterviewMapper userFirstInterviewMapper;
  45. @Resource
  46. private OrganizationIdentityMapper organizationIdentityMapper;
  47. @Resource
  48. private DistrictGlossoryMapper districtGlossoryMapper;
  49. @Resource
  50. private UserInterviewProjectMapper userInterviewProjectMapper;
  51. @Value(value = "${upload.path}")
  52. private final String uploadPath = null;
  53. @Override
  54. public Pagination<UserArchives> list(UserArchives userArchives, Integer pageNo, Integer pageSize) {
  55. Map<String, Object> params = new HashMap<>();
  56. params.put("in",userArchives);
  57. return (Pagination<UserArchives>) findPage("findUserArchivesList",
  58. "findUserArchivesCount", params, pageNo, pageSize);
  59. }
  60. @Override
  61. public UserArchives queryByUid(String id) {
  62. UserArchives userArchives =userArchivesMapper.queryByUid(id);
  63. if (userArchives==null)userArchives =new UserArchives();
  64. return userArchives;
  65. }
  66. @Override
  67. public Object queryByUidAll(String id) {
  68. UserArchivesDetails user = customerService.selectUserByUid(id);
  69. User u = userMapper.queryById(id);
  70. OrganizationIdentity ori = organizationIdentityMapper.selectOrgIdentityByUserId(id);
  71. pushProvincePlus(ori, user);
  72. if (u.getAid().equals(TokenManager.getAdminId())){
  73. user.setMyUser(1);
  74. }else {
  75. user.setMyUser(0);
  76. }
  77. user.setSignBills(u.getSignBills());
  78. UserArchives userArchives = queryByUid(id);
  79. List<OrganizationContactBook> customerContacts = userMapper.findCustomerContacts(id, TokenManager.getAdminId());
  80. if (!customerContacts.isEmpty()){
  81. List<OrganizationContactBook> collect = customerContacts.stream()
  82. .filter(e -> e.getMajor() == 1).collect(Collectors.toList());
  83. for (OrganizationContactBook ob : collect) {
  84. ob.setName("***");
  85. ob.setMobile("***");
  86. }
  87. user.setContactList(collect);
  88. }
  89. BeanUtils.copyProperties(userArchives, user);
  90. List<UserArchivesInterview> userArchivesInterviews = userArchivesInterviewMapper.selectByUidAid(id, TokenManager.getAdminId());
  91. user.setInterviewList(userArchivesInterviews);
  92. //获取首次面谈时间
  93. List<UserFirstInterview> firstList = userFirstInterviewMapper.selectByUidAid(id, TokenManager.getAdminId());
  94. if (!firstList.isEmpty()){
  95. UserFirstInterview userFirstInterview = firstList.get(0);
  96. user.setFirstInterviewDate(userFirstInterview.getFirstTime());
  97. }
  98. List<UserInterviewProjectBo> userInterviewProjects = userInterviewProjectMapper.selectByAid(TokenManager.getAdminId(), id);
  99. user.setProjectList(userInterviewProjects);
  100. return user;
  101. }
  102. private void pushProvincePlus(OrganizationIdentity ori, UserArchivesDetails user) {
  103. user.setLocationProvince(ori.getLocationProvince());
  104. user.setLocationCity(ori.getLocationCity());
  105. user.setLocationArea(ori.getLocationArea());
  106. List<DistrictGlossory> all = districtGlossoryMapper.getAll();
  107. if (ori.getLocationProvince()!=null){
  108. all.stream().filter(e -> e.getLevel()==1).collect(Collectors.toList()).forEach(e -> {
  109. if (ori.getLocationProvince().equals(e.getId())){
  110. user.setLocationProvinceName(e.getName());
  111. }
  112. });
  113. }
  114. if (ori.getLocationCity()!=null){
  115. all.stream().filter(e -> e.getLevel()==2).collect(Collectors.toList()).forEach(e -> {
  116. if (ori.getLocationCity().equals(e.getId())){
  117. user.setLocationCityName(e.getName());
  118. }
  119. });
  120. }
  121. if (ori.getLocationArea()!=null){
  122. all.stream().filter(e -> e.getLevel()==3).collect(Collectors.toList()).forEach(e -> {
  123. if (ori.getLocationArea().equals(e.getId())){
  124. user.setLocationAreaName(e.getName());
  125. }
  126. });
  127. }
  128. }
  129. @Override
  130. public boolean checkPermission(String id) {
  131. User user = userMapper.queryById(id);
  132. if (user.getAid().equals(TokenManager.getAdminId())){
  133. return false;
  134. }
  135. UserLimitCheck userLimitCheck = userLimitCheckMapper.selectByUid(id);
  136. //如果没有和大于时间则不能查看
  137. return userLimitCheck == null || System.currentTimeMillis() > userLimitCheck.getCheckTime().getTime();
  138. }
  139. /**
  140. * 通过ID查询单条数据
  141. *
  142. * @param id 主键
  143. * @return 实例对象
  144. */
  145. @Override
  146. public UserArchives queryById(Integer id) {
  147. return this.userArchivesMapper.queryById(id);
  148. }
  149. /**
  150. * 新增数据
  151. *
  152. * @param userArchives 实例对象
  153. * @return 实例对象
  154. */
  155. @Override
  156. public UserArchives insert(UserArchives userArchives) {
  157. UserArchives query = userArchivesMapper.queryByUid(userArchives.getUid());
  158. if (query != null){
  159. userArchives.setId(query.getId());
  160. return update(userArchives,null);
  161. }else {
  162. if (userArchives.getAppearancePatentCount()!=null||
  163. userArchives.getInventionPatentCount()!=null||
  164. userArchives.getUtilityModelCount() !=null||
  165. userArchives.getSoftwareWorksCount()!=null||
  166. userArchives.getOtherCount()!=null
  167. ){
  168. int count = getCount(userArchives);
  169. userArchives.setPatentCount(count);
  170. }
  171. if(userArchives.getPatentCount()==null)userArchives.setPatentCount(0);
  172. userArchives.setCreateTime(new Date());
  173. this.userArchivesMapper.insert(userArchives);
  174. }
  175. return userArchives;
  176. }
  177. /**
  178. * 修改数据
  179. *
  180. * @param userArchives 实例对象
  181. * @return 实例对象
  182. */
  183. @Override
  184. public UserArchives update(UserArchives userArchives,Integer channelType) {
  185. if (userArchives.getAppearancePatentCount()!=null||
  186. userArchives.getInventionPatentCount()!=null||
  187. userArchives.getUtilityModelCount() !=null||
  188. userArchives.getSoftwareWorksCount()!=null||
  189. userArchives.getOtherCount()!=null
  190. ){
  191. int count = getCount(userArchives);
  192. userArchives.setPatentCount(count);
  193. }
  194. if (channelType!=null){
  195. String uid=null;
  196. if (userArchives.getUid()==null){
  197. UserArchives useData = this.queryById(userArchives.getId());
  198. uid=useData.getUid();
  199. }else {
  200. uid=userArchives.getUid();
  201. }
  202. userMidMapper.updateByUid(new UserMid(uid,channelType));
  203. }
  204. if(userArchives.getId()==null){
  205. return insert(userArchives);
  206. }else {
  207. addUserLog( userArchives);
  208. userArchives.setUpdateTime(new Date());
  209. this.userArchivesMapper.update(userArchives);
  210. return this.queryById(userArchives.getId());
  211. }
  212. }
  213. private void addUserLog(UserArchives userArchives) {
  214. UserArchives use = userArchivesMapper.queryById(userArchives.getId());
  215. Admin admin = adminMapper.queryById(TokenManager.getAdminId());
  216. List<UserDataLog> list =new ArrayList<>();
  217. if(userArchives.getFinancialData()!=null&&!Objects.equals(use.getFinancialData(),userArchives.getFinancialData())){
  218. String builder = admin.getName() + "修改了财务数据: " + use.getFinancialData() + "=>" + userArchives.getFinancialData();
  219. UserDataLog userDataLog = new UserDataLog(userArchives.getUid(), builder,1);
  220. list.add(userDataLog);
  221. }
  222. if (userArchives.getEarlyCommunication()!=null&&!Objects.equals(use.getEarlyCommunication(),userArchives.getEarlyCommunication())){
  223. String builder = admin.getName() + "修改了前期沟通: " + use.getEarlyCommunication() + "=>" + userArchives.getEarlyCommunication();
  224. UserDataLog userDataLog = new UserDataLog(userArchives.getUid(), builder,2);
  225. list.add(userDataLog);
  226. }
  227. if (userArchives.getInterviewIdeas()!=null&&!Objects.equals(use.getInterviewIdeas(),userArchives.getInterviewIdeas())){
  228. String builder = admin.getName() + "修改了面谈思路: " + use.getInterviewIdeas() + "=>" + userArchives.getInterviewIdeas();
  229. UserDataLog userDataLog = new UserDataLog(userArchives.getUid(), builder,3);
  230. list.add(userDataLog);
  231. }
  232. if (!list.isEmpty())userDataLogMapper.insertBatch(list);
  233. }
  234. /**
  235. * 计算专利总数,必须5个都传,不然会导致计算漏掉
  236. * @param userArchives 用户档案参数
  237. * @return count
  238. */
  239. private int getCount(UserArchives userArchives) {
  240. int count = 0;
  241. if (userArchives.getAppearancePatentCount()!=null){
  242. count+= userArchives.getAppearancePatentCount();
  243. }
  244. if (userArchives.getInventionPatentCount()!=null){
  245. count+= userArchives.getInventionPatentCount();
  246. }
  247. if (userArchives.getUtilityModelCount() !=null){
  248. count+= userArchives.getUtilityModelCount();
  249. }
  250. if (userArchives.getSoftwareWorksCount() !=null){
  251. count+= userArchives.getSoftwareWorksCount();
  252. }
  253. if (userArchives.getOtherCount()!=null){
  254. count+= userArchives.getOtherCount();
  255. }
  256. return count;
  257. }
  258. /**
  259. * 通过主键删除数据
  260. *
  261. * @param id 主键
  262. * @return 是否成功
  263. */
  264. @Override
  265. public boolean deleteById(Integer id) {
  266. return this.userArchivesMapper.deleteById(id) > 0;
  267. }
  268. @Override
  269. public Object selectUserArchives(InputSelectUserArchives in) {
  270. Map<String, Object> params = getParams(in);
  271. return findPage("selectUserArchivesList",
  272. "selectUserArchivesCount", params, in.getPageNo(), in.getPageSize());
  273. }
  274. private Map<String, Object> getParams(InputSelectUserArchives in) {
  275. Map<String, Object> params = new HashMap<>();
  276. if (in.getNewChannel() != null)params.put("newChannel", in.getNewChannel());
  277. if (in.getShareType() != null)params.put("shareType", in.getShareType());
  278. if (in.getChannelType() != null){
  279. String[] split = in.getChannelType().split(",");
  280. params.put("channelType", split);
  281. }
  282. if (in.getName() != null)params.put("name", in.getName());
  283. if (in.getAid() != null)params.put("aid", in.getAid());
  284. if (in.getBusinessScope() != null)params.put("businessScope", in.getBusinessScope());
  285. if (in.getIndustry() != null){
  286. String[] split = in.getIndustry().split(",");
  287. params.put("industry", split);
  288. }
  289. if (in.getSignBills()!=null)params.put("signBills", in.getSignBills());
  290. if (in.getStartTime() != null&&in.getEndTime() != null){
  291. params.put("startTime", in.getStartTime());
  292. params.put("endTime", in.getEndTime()+" 23:59:59");
  293. }
  294. return params;
  295. }
  296. @Override
  297. public Object addAwards(String uid,Integer status) {
  298. return updateAwards(uid,status);
  299. }
  300. @Override
  301. public Object updateAwards(String uid, Integer status) {
  302. UserArchives use = userArchivesMapper.queryByUid(uid);
  303. UserArchives userArchives = new UserArchives();
  304. userArchives.setId(use.getId());
  305. userArchives.setAwardsStatus(status);
  306. if (status==2)userArchives.setAwardsTime(new Date());
  307. userArchivesMapper.update(userArchives);
  308. if (status==2){
  309. userArchivesMapper.updateStatus();
  310. }
  311. return 1;
  312. }
  313. @Override
  314. public Object selectUserArchivesExport(InputSelectUserArchives in) {
  315. Map<String, Object> params = getParams(in);
  316. List<OutSelectUserArchives> list= (List<OutSelectUserArchives>) findList("selectUserArchivesList",
  317. params, 1, 999999);
  318. NewExcelUtil<OutSelectUserArchives> newExcelUtil = new NewExcelUtil<>(OutSelectUserArchives.class);
  319. return newExcelUtil.exportExcel( list,"用户档案",uploadPath);
  320. }
  321. }