CompanyServiceImpl.java 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933
  1. package com.hz.employmentsite.services.impl.companyService;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.hz.employmentsite.filter.exception.BaseException;
  5. import com.hz.employmentsite.mapper.*;
  6. import com.hz.employmentsite.mapper.cquery.CompanyCQuery;
  7. import com.hz.employmentsite.mapper.cquery.LabelCQuery;
  8. import com.hz.employmentsite.mapper.cquery.PostCQuery;
  9. import com.hz.employmentsite.model.*;
  10. import com.hz.employmentsite.services.service.AccountService;
  11. import com.hz.employmentsite.services.service.companyService.CompanyService;
  12. import com.hz.employmentsite.services.service.companyService.FirmService;
  13. import com.hz.employmentsite.services.service.companyService.IndustryService;
  14. import com.hz.employmentsite.services.service.system.DictionaryService;
  15. import com.hz.employmentsite.util.RegexUtils;
  16. import com.hz.employmentsite.util.StringUtils;
  17. import com.hz.employmentsite.util.ip.IpUtils;
  18. import com.hz.employmentsite.vo.baseSettings.LabelVo;
  19. import com.hz.employmentsite.vo.companyService.AllCompanyVo;
  20. import com.hz.employmentsite.vo.companyService.AppCompanyPostVo;
  21. import com.hz.employmentsite.vo.companyService.CompanyVo;
  22. import com.hz.employmentsite.vo.companyService.PostVo;
  23. import com.hz.employmentsite.vo.dataMap.CompanyPostMapVo;
  24. import com.hz.employmentsite.vo.signin.SigninVo;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27. import javax.servlet.http.HttpServletRequest;
  28. import java.math.BigDecimal;
  29. import java.text.ParseException;
  30. import java.text.SimpleDateFormat;
  31. import java.time.LocalDate;
  32. import java.time.format.DateTimeFormatter;
  33. import java.util.*;
  34. import java.util.stream.Collectors;
  35. @Service("CompanyService")
  36. public class CompanyServiceImpl implements CompanyService {
  37. @Autowired
  38. private CompanyCQuery companyCQuery;
  39. @Autowired
  40. private StringUtils stringUtils;
  41. @Autowired
  42. private RegexUtils regexUtils;
  43. @Autowired
  44. private DictionaryService dictionaryService;
  45. @Autowired
  46. private PcCompanyMapper pcCompanyMapper;
  47. @Autowired
  48. private AreaCodeMapper areaCodeMapper;
  49. @Autowired
  50. private PcSiteMapper siteMapper;
  51. @Autowired
  52. private PcPostMapper pcPostMapper;
  53. @Autowired
  54. private PcSigninMapper pcSigninMapper;
  55. @Autowired
  56. private PcSiteUserMapper pcSiteUserMapper;
  57. @Autowired
  58. private PcSiteMapper pcSiteMapper;
  59. @Autowired
  60. private FirmService firmService;
  61. @Autowired
  62. private IndustryService industryService;
  63. @Autowired
  64. private PcLabelCompanyMapper pcLabelCompanyMapper;
  65. @Autowired
  66. private LabelCQuery labelCQuery;
  67. @Autowired
  68. private PostCQuery postCQuery;
  69. @Autowired
  70. private AccountService accountService;
  71. @Autowired
  72. private SysLogMapper sysLogMapper;
  73. @Autowired
  74. private PcCreditRecordMapper pcCreditRecordMapper;
  75. @Override
  76. public PageInfo<CompanyVo> getList(Integer pageIndex, Integer pageSize,
  77. List<String> companyIDList, String companyName,
  78. String companyCode, String recordStatus,
  79. String regionCode, String streetCode,
  80. String createUserId, String workTime, String loginUserID,
  81. String siteID, Date startDate, Date endDate, String postCountSorter,
  82. String companyTypeID,String industryID, String createUserName) {
  83. String curLoginUserSiteID = "";
  84. if (!stringUtils.IsNullOrEmpty(loginUserID)) {
  85. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  86. siteUserExp.or().andUserIDEqualTo(loginUserID);
  87. curLoginUserSiteID = pcSiteUserMapper.selectByExample(siteUserExp).get(0).getSiteID();
  88. }
  89. PageHelper.startPage(pageIndex, pageSize);
  90. List<CompanyVo> dataList = companyCQuery.getList(stringUtils.ListToInSql(companyIDList), companyName, companyCode,
  91. recordStatus, regionCode, streetCode,
  92. createUserId, workTime, curLoginUserSiteID,
  93. siteID, startDate, endDate, postCountSorter,
  94. companyTypeID, industryID,false,
  95. createUserName);
  96. PageInfo<CompanyVo> result = new PageInfo(dataList);
  97. return result;
  98. }
  99. @Override
  100. public List<AllCompanyVo> getAllList() {
  101. return companyCQuery.getAllList();
  102. }
  103. @Override
  104. public PageInfo<PcFirm> getFirmNameLikeList(Integer pageIndex, Integer pageSize, String firmName) {
  105. // PageHelper.startPage(pageIndex, pageSize);
  106. List<PcFirm> dataList = companyCQuery.getFirmNameLikeList(firmName);
  107. PageInfo<PcFirm> result = new PageInfo(dataList);
  108. return result;
  109. }
  110. @Override
  111. public List<PcCompany> getCompanyBySiteIDList(String siteID) {
  112. PcCompanyExample exp = new PcCompanyExample();
  113. exp.or().andSiteIDEqualTo(siteID);
  114. return pcCompanyMapper.selectByExample(exp);
  115. }
  116. private String ifHadRepeatData(CompanyVo data, boolean isEdit,String curUserID){
  117. var result = 0;
  118. PcCompanyExample companyExp1 = new PcCompanyExample();
  119. companyExp1.or().andCompanyNameEqualTo(data.getCompanyName()).andCompanyIDNotEqualTo(data.getCompanyID());
  120. var ifRepeatName = pcCompanyMapper.selectByExample(companyExp1).size()>0;
  121. PcCompanyExample companyExp2 = new PcCompanyExample();
  122. companyExp2.or().andCompanyCodeEqualTo(data.getCompanyCode()).andCompanyIDNotEqualTo(data.getCompanyID());
  123. var ifRepeatCode = pcCompanyMapper.selectByExample(companyExp2).size()>0;
  124. result += ifRepeatName? 1:0;
  125. result += ifRepeatCode? 2:0;
  126. if(result > 0 ) {
  127. PcCompanyExample companyExp = new PcCompanyExample();
  128. switch (result){
  129. case 1:
  130. companyExp = companyExp1;
  131. break;
  132. case 2:
  133. companyExp = companyExp2;
  134. break;
  135. case 3:
  136. companyExp.or().andCompanyNameEqualTo(data.getCompanyName()).andCompanyIDNotEqualTo(data.getCompanyID());
  137. companyExp.or().andCompanyCodeEqualTo(data.getCompanyCode()).andCompanyIDNotEqualTo(data.getCompanyID());
  138. break;
  139. }
  140. var repeatData = pcCompanyMapper.selectByExample(companyExp).stream().findFirst().orElse(null);
  141. if( repeatData != null){
  142. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  143. siteUserExp.or().andUserIDEqualTo(repeatData.getCreateUserID());
  144. var createSiteUserInfo= pcSiteUserMapper.selectByExample(siteUserExp).stream().findFirst().orElse(null);
  145. if( createSiteUserInfo!=null){
  146. PcSiteExample siteExp = new PcSiteExample();
  147. siteExp.or().andSiteIDEqualTo(createSiteUserInfo.getSiteID());
  148. var curSiteInfo= pcSiteMapper.selectByExample(siteExp).stream().findFirst().orElse(null);
  149. if( curSiteInfo != null){
  150. if(isEdit){
  151. if( curSiteInfo.getSiteID().equals("66fc1176-b8a1-4b9a-b2fc-9f590ceed342")||curSiteInfo.getSiteID().equals("0c037144-99c6-4e90-bf25-2c9cea8c7b7a")){
  152. repeatData.setSiteID(data.getSiteID());
  153. repeatData.setModifyTime(new Date());
  154. repeatData.setModifyUserID(curUserID);
  155. pcCompanyMapper.updateByPrimaryKey(repeatData);
  156. return "-1";
  157. }else{
  158. throw new BaseException("1004","该企业已被"+curSiteInfo.getSiteName()+",工号"+createSiteUserInfo.getUserNo()+"录入!");
  159. }
  160. }
  161. return "该企业已被"+ curSiteInfo.getSiteName()+",工号"+createSiteUserInfo.getUserNo()+"录入!";
  162. }
  163. }
  164. }
  165. }
  166. return String.valueOf(result);
  167. }
  168. @Override
  169. public Integer save(CompanyVo data, String userId) {
  170. Integer result = baseSave(data, userId);
  171. PcCreditRecordExample creEmp = new PcCreditRecordExample();
  172. creEmp.or().andCompanyIDEqualTo(data.getCompanyID());
  173. pcCreditRecordMapper.deleteByExample(creEmp);
  174. if (data.creditRecordList != null && !data.creditRecordList.isEmpty()) {
  175. data.creditRecordList.forEach(creditRecord -> {
  176. creditRecord.setCreditRecordID(UUID.randomUUID().toString());
  177. creditRecord.setCompanyID(data.getCompanyID());
  178. pcCreditRecordMapper.insert(creditRecord);
  179. });
  180. }
  181. return result;
  182. }
  183. @Override
  184. public Integer baseSave(CompanyVo data, String userId) {
  185. Integer result = 0;
  186. Boolean isExist = data.getCompanyID() != null;
  187. PcCompanyWithBLOBs dbData = null;
  188. PcCompanyExample exp = new PcCompanyExample();
  189. PcCompanyExample.Criteria cro = exp.createCriteria();
  190. if (isExist) {
  191. cro.andCompanyIDEqualTo(data.getCompanyID());
  192. dbData = pcCompanyMapper.selectByExampleWithBLOBs(exp).stream().findFirst().orElse(null);
  193. }
  194. if (dbData == null && !stringUtils.IsNullOrEmpty(data.getOracleTableID())) {
  195. exp = new PcCompanyExample();
  196. exp.createCriteria().andOracleTableIDEqualTo(data.getOracleTableID());
  197. exp.or().andCompanyCodeEqualTo(data.getCompanyCode());
  198. List<PcCompanyWithBLOBs> company = pcCompanyMapper.selectByExampleWithBLOBs(exp);
  199. if (!company.isEmpty()) {
  200. // 不重复录入oracle同步数据
  201. return 0;
  202. }
  203. }
  204. var resultNum = Integer.valueOf(ifHadRepeatData(data,true,userId));
  205. if( resultNum>0) {
  206. throw new BaseException("1004","该企业已被录入!");
  207. }
  208. if (dbData == null) {
  209. //这里已直接将公司转至当前驿站下
  210. if(resultNum.equals(-1)){
  211. result = 1;
  212. }
  213. else{
  214. dbData = new PcCompanyWithBLOBs();
  215. dbData.setCompanyID(data.getCompanyID());
  216. dbData.setCompanyName(data.getCompanyName());
  217. dbData.setIsShortage(data.getIsShortage());
  218. dbData.setCompanyCode(data.getCompanyCode());
  219. dbData.setSiteID(data.getSiteID());
  220. dbData.setRegionCode(data.getRegionCode());
  221. dbData.setStreetCode(data.getStreetCode());
  222. dbData.setCompanyAddress(data.getCompanyAddress());
  223. dbData.setWorkSituation(data.getWorkSituation());
  224. dbData.setCompanyModel(data.getCompanyModel());
  225. dbData.setCompanyType(data.getCompanyType());
  226. dbData.setUserName(data.getUserName());
  227. dbData.setUserMobile(data.getUserMobile());
  228. dbData.setCompanyEmail(data.getCompanyEmail());
  229. dbData.setFrName(data.getFrName());
  230. dbData.setValidDate(data.getValidDate());
  231. dbData.setRecordStatus(data.getRecordStatus());
  232. dbData.setBusinScope(data.getBusinScope());
  233. dbData.setCompanyDesc(data.getCompanyDesc());
  234. dbData.setInsuredCount(data.getInsuredCount());
  235. dbData.setLongitude(data.getLongitude());
  236. dbData.setLatitude(data.getLatitude());
  237. dbData.setOpenId(data.getOpenId());
  238. dbData.setCreateTime(data.getCreateTime() == null ? new Date() : data.getCreateTime()); // 三目运算防止oracle同步数据的创建日期被重置
  239. dbData.setCreateUserID(userId);
  240. dbData.setModifyTime(new Date());
  241. dbData.setModifyUserID(userId);
  242. dbData.setEstablishmentTime(data.getEstablishmentTime());
  243. dbData.setRegisteredCapital(data.getRegisteredCapital());
  244. dbData.setRegisteredCapitalType(data.getRegisteredCapitalType());
  245. dbData.setSignInPoliticalArea(data.getSignInPoliticalArea());
  246. dbData.setWebsite(data.getWebsite());
  247. dbData.setBonus(data.getBonus());
  248. dbData.setIndustryID(data.getIndustryID());
  249. dbData.setEstateCategoryID(data.getEstateCategoryID());
  250. dbData.setOracleTableID(data.getOracleTableID());
  251. //dbData.setTagID(data.getTagID());
  252. result = pcCompanyMapper.insert(dbData);
  253. }
  254. } else {
  255. dbData.setCompanyName(data.getCompanyName());
  256. dbData.setCompanyCode(data.getCompanyCode());
  257. dbData.setIsShortage(data.getIsShortage());
  258. dbData.setSiteID(data.getSiteID());
  259. dbData.setRegionCode(data.getRegionCode());
  260. dbData.setStreetCode(data.getStreetCode());
  261. dbData.setCompanyAddress(data.getCompanyAddress());
  262. dbData.setWorkSituation(data.getWorkSituation());
  263. dbData.setCompanyModel(data.getCompanyModel());
  264. dbData.setCompanyType(data.getCompanyType());
  265. dbData.setUserName(data.getUserName());
  266. dbData.setUserMobile(data.getUserMobile());
  267. dbData.setCompanyEmail(data.getCompanyEmail());
  268. dbData.setFrName(data.getFrName());
  269. dbData.setValidDate(data.getValidDate());
  270. dbData.setRecordStatus(data.getRecordStatus());
  271. dbData.setBusinScope(data.getBusinScope());
  272. dbData.setCompanyDesc(data.getCompanyDesc());
  273. dbData.setInsuredCount(data.getInsuredCount());
  274. dbData.setLongitude(data.getLongitude());
  275. dbData.setLatitude(data.getLatitude());
  276. dbData.setOpenId(data.getOpenId());
  277. dbData.setModifyTime(new Date());
  278. dbData.setModifyUserID(userId);
  279. dbData.setEstablishmentTime(data.getEstablishmentTime());
  280. dbData.setRegisteredCapital(data.getRegisteredCapital());
  281. dbData.setRegisteredCapitalType(data.getRegisteredCapitalType());
  282. dbData.setSignInPoliticalArea(data.getSignInPoliticalArea());
  283. dbData.setWebsite(data.getWebsite());
  284. dbData.setBonus(data.getBonus());
  285. dbData.setIndustryID(data.getIndustryID());
  286. dbData.setEstateCategoryID(data.getEstateCategoryID());
  287. dbData.setOracleTableID(data.getOracleTableID());
  288. // dbData.setTagID(data.getTagID());
  289. result = pcCompanyMapper.updateByPrimaryKeyWithBLOBs(dbData);
  290. }
  291. PcLabelCompanyExample labelEmp = new PcLabelCompanyExample();
  292. labelEmp.or().andCompanyIDEqualTo(data.getCompanyID());
  293. pcLabelCompanyMapper.deleteByExample(labelEmp);
  294. if(data.listLabel!=null && data.listLabel.size()>0){
  295. data.listLabel.forEach(x->{
  296. PcLabelCompany labelModel = new PcLabelCompany();
  297. labelModel.setCompanyID(data.getCompanyID());
  298. labelModel.setLabelID(x.getLabelID());
  299. pcLabelCompanyMapper.insert(labelModel);
  300. });
  301. }
  302. return result;
  303. }
  304. @Override
  305. public Integer delete(HttpServletRequest request, List<String> ids) {
  306. int result = 0;
  307. String delInfo = "删除企业:";
  308. for(String curCompanyID : ids){
  309. PcPostExample pcPostExp = new PcPostExample();
  310. pcPostExp.or().andCompanyIDEqualTo(curCompanyID);
  311. var curCompanyPostList = pcPostMapper.selectByExample(pcPostExp).stream().toList();
  312. if( curCompanyPostList != null && curCompanyPostList.size() > 0){
  313. throw new BaseException("10004","所选企业已有关联岗位信息,不允许删除!");
  314. }
  315. PcSigninExample pcSigninExample = new PcSigninExample();
  316. pcSigninExample.or().andCompanyIDEqualTo(curCompanyID);
  317. List<PcSignin> pcSignins = pcSigninMapper.selectByExample(pcSigninExample).stream().toList();
  318. if (pcSignins != null && pcSignins.size() > 0) {
  319. throw new BaseException("10004","所选企业已有关联的外出工作走访记录信息,暂时无法删除!");
  320. }
  321. PcCompanyWithBLOBs company = pcCompanyMapper.selectByPrimaryKey(curCompanyID);
  322. int count = pcCompanyMapper.deleteByPrimaryKey(curCompanyID);
  323. if(count>0){
  324. PcLabelCompanyExample labelEmp = new PcLabelCompanyExample();
  325. labelEmp.or().andCompanyIDEqualTo(curCompanyID);
  326. pcLabelCompanyMapper.deleteByExample(labelEmp);
  327. // 记录被删除的企业信息
  328. delInfo += company.getCompanyName() + ",";
  329. }
  330. result+=count;
  331. }
  332. if (result > 0) {
  333. SysLog sysLog = new SysLog();
  334. sysLog.setLogID(UUID.randomUUID().toString());
  335. sysLog.setPageName("企业信息管理");
  336. sysLog.setPageUrl("/companyService/enterprise/delete");
  337. sysLog.setActionName("删除企业");
  338. sysLog.setUserID(accountService.getLoginUserID());
  339. sysLog.setLogTime(new Date());
  340. sysLog.setIPAddress(IpUtils.getIpAddr(request));
  341. sysLog.setOperationData(delInfo.substring(0, delInfo.length() - 1)); // 注意移除最后一个,
  342. sysLogMapper.insert(sysLog);
  343. }
  344. return result;
  345. }
  346. @Override
  347. public CompanyVo getDataById(String id,boolean isAllCompany) {
  348. if (stringUtils.IsNullOrEmpty(id)) {
  349. return null;
  350. }
  351. CompanyVo data = companyCQuery.getList(stringUtils.ListToInSql(Arrays.asList(id)), null, null, null, null, null, null, null, null, null, null, null, null,null,null, isAllCompany, null).stream().findFirst().orElse(null);
  352. if(data!=null){
  353. data.listLabel = labelCQuery.getCompanyLabelList(id);
  354. }
  355. return data;
  356. }
  357. @Override
  358. public PcCompany getCompanyByOracleTableID(String oracleTableID) {
  359. PcCompanyExample example = new PcCompanyExample();
  360. PcCompanyExample.Criteria criteria = example.createCriteria();
  361. criteria.andOracleTableIDEqualTo(oracleTableID);
  362. return pcCompanyMapper.selectByExample(example).stream().findFirst().orElse(null);
  363. }
  364. @Override
  365. public List<CompanyVo> importCompany(List<CompanyVo> dataList, String userID) {
  366. if (dataList.size() <= 0)
  367. throw new BaseException("1004", "请添加导入数据!");
  368. //所属驿站
  369. PcSite curLoginUserSiteInfo = null;
  370. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  371. siteUserExp.or().andUserIDEqualTo(userID);
  372. PcSiteUser curLoginSiteUser = pcSiteUserMapper.selectByExample(siteUserExp).stream().findFirst().orElse(null);
  373. if(curLoginSiteUser==null){
  374. throw new BaseException("", "未能查询到当前登录人的驿站人员信息!");
  375. }else{
  376. PcSiteExample siteExp = new PcSiteExample();
  377. siteExp.or().andSiteIDEqualTo(curLoginSiteUser.getSiteID());
  378. curLoginUserSiteInfo = pcSiteMapper.selectByExample(siteExp).stream().findFirst().orElse(null);
  379. }
  380. //市/县
  381. List<SysDictionaryItem> regionDataList = new ArrayList<>();
  382. AreaCodeExample regionExp= new AreaCodeExample();
  383. regionExp.or().andFidEqualTo("441300000000000").andLvEqualTo("3");
  384. var thirdLevelRegionList = areaCodeMapper.selectByExample(regionExp);
  385. for (AreaCode curRegionData : thirdLevelRegionList) {
  386. SysDictionaryItem item = new SysDictionaryItem();
  387. item.setCode(curRegionData.getCode());
  388. item.setName(curRegionData.getName());
  389. regionDataList.add(item);
  390. }
  391. //镇街
  392. List<SysDictionaryItem> streetDataList = new ArrayList<>();
  393. AreaCodeExample streetExp= new AreaCodeExample();
  394. streetExp.or().andLvEqualTo("4");
  395. var forthLevelStreetList = areaCodeMapper.selectByExample(streetExp);
  396. for (AreaCode curStreetData : forthLevelStreetList) {
  397. SysDictionaryItem item = new SysDictionaryItem();
  398. item.setCode(curStreetData.getCode());
  399. item.setName(curStreetData.getName());
  400. streetDataList.add(item);
  401. }
  402. //企业规模
  403. List<SysDictionaryItem> dicCompanyModelList = dictionaryService.getDictionaryItemList("CompanyModel");
  404. // 经济类型
  405. List<SysDictionaryItem> dicCompanyTypeList = dictionaryService.getDictionaryItemList("CompanyType");
  406. // 企业状态
  407. List<SysDictionaryItem> companyStatusList = dictionaryService.getDictionaryItemList("CompanyStatus");
  408. // 企业行业
  409. List<PcIndustry> industryList = industryService.getAllList();
  410. // 企业产业分类
  411. List<SysDictionaryItem> companyEstateCategory = dictionaryService.getDictionaryItemByCodeList("CompanyEstateCategory");
  412. // 企业注册资本类型
  413. List<SysDictionaryItem> registeredCapitalTypeList = dictionaryService.getDictionaryItemList("RegisteredCapitalType");
  414. List<CompanyVo> resultList = new ArrayList<>();
  415. PcSite finalCurLoginUserSiteInfo = curLoginUserSiteInfo;
  416. List<String> allCodeList = new ArrayList<>();
  417. List<String> allNameList = new ArrayList<>();
  418. List<String> repeatCodeList = new ArrayList<>();
  419. List<String> repeatNameList = new ArrayList<>();
  420. dataList.forEach(item->{
  421. var curCompanyCode = item.getCompanyCode();
  422. var curCompanyName = item.getCompanyName();
  423. if(!allCodeList.contains(curCompanyCode)){
  424. allCodeList.add(curCompanyCode);
  425. }else{
  426. if(!repeatCodeList.contains(curCompanyCode)){
  427. repeatCodeList.add(curCompanyCode);
  428. }
  429. }
  430. if(!allNameList.contains(curCompanyName)){
  431. allNameList.add(curCompanyName);
  432. }else{
  433. if(!repeatNameList.contains(curCompanyName)){
  434. repeatNameList.add(curCompanyName);
  435. }
  436. }
  437. });
  438. dataList.forEach(item -> {
  439. String errorInfo = "";
  440. item.companyID = UUID.randomUUID().toString();
  441. if (stringUtils.IsNullOrEmpty(item.companyName)){
  442. errorInfo += "请填写企业名称!";
  443. }else{
  444. if (stringUtils.IsNullOrEmpty(item.companyCode))
  445. errorInfo += "请填写统一信用代码!";
  446. else{
  447. if(!regexUtils.theCodeIsValid(item.companyCode)){
  448. errorInfo +="输入的统一信用代码无效!";
  449. }else{
  450. var result = ifHadRepeatData(item,false,userID);
  451. errorInfo += !result.equals("0")? result:"";
  452. }
  453. }
  454. }
  455. if (stringUtils.IsNullOrEmpty(item.getSiteName()))
  456. errorInfo += "请填写所属驿站!";
  457. else {
  458. if (finalCurLoginUserSiteInfo!=null){
  459. if(!item.getSiteName().equals(finalCurLoginUserSiteInfo.getSiteName())){
  460. errorInfo += "请填写您所在的驿站名称!";
  461. }else{
  462. item.setSiteID(finalCurLoginUserSiteInfo.getSiteID());
  463. }
  464. }
  465. }
  466. if (stringUtils.IsNullOrEmpty(item.companyAddress))
  467. errorInfo += "请填写企业办公地址!";
  468. if (stringUtils.IsNullOrEmpty(item.userName))
  469. errorInfo += "请填写企业联系人!";
  470. if (stringUtils.IsNullOrEmpty(item.userMobile))
  471. errorInfo += "请填写企业联系电话!";
  472. else{
  473. if(!regexUtils.theMobileIsValid(item.userMobile,true)){
  474. errorInfo += "企业联系电话不合法!";
  475. }
  476. }
  477. if (stringUtils.IsNullOrEmpty(item.recordStatusName))
  478. errorInfo += "请选择企业状态!";
  479. else {
  480. item.recordStatus = companyStatusList.stream().filter(it -> it.getName().equals(item.getRecordStatusName().trim()))
  481. .findFirst().orElse(new SysDictionaryItem()).getValue();
  482. if (item.recordStatus == null)
  483. errorInfo += "企业状态不存在!";
  484. }
  485. if (stringUtils.IsNullOrEmpty(item.getWorkSituation())) {
  486. errorInfo += "请填写用工情况!";
  487. } else {
  488. // 判断item.getWebsite()是否为正整数类型
  489. if (item.getWorkSituation().matches("^[1-9]\\d*$")) {
  490. // 如果是正整数,则转换
  491. int workSituation = Integer.parseInt(item.getWorkSituation());
  492. // 未选择企业规模时按用工情况转换
  493. if (stringUtils.IsNullOrEmpty(item.companyModelStr)) {
  494. int[][] workSituationRanges = {
  495. {0, 19, 1},
  496. {20, 99, 2},
  497. {100, 299, 3},
  498. {300, 499, 4},
  499. {500, 999, 5},
  500. {1000, 9999, 6},
  501. {10000, Integer.MAX_VALUE, 7}
  502. };
  503. int companyModel = 1; // 默认值,如果所有范围都不匹配
  504. for (int[] range : workSituationRanges) {
  505. if (workSituation >= range[0] && workSituation <= range[1]) {
  506. companyModel = range[2];
  507. break;
  508. }
  509. }
  510. item.setCompanyModel(companyModel);
  511. }
  512. } else {
  513. // 不是正整数,返回errorInfo
  514. errorInfo += "用工情况必须为正整数!";
  515. }
  516. }
  517. if (!stringUtils.IsNullOrEmpty(item.isShortageName)){
  518. if (item.isShortageName.equals("是")) {
  519. item.isShortage = 1;
  520. } else {
  521. item.isShortage = 0;
  522. }
  523. }
  524. if (!stringUtils.IsNullOrEmpty(item.getRegisteredCapitalTypeStr())) {
  525. item.registeredCapitalType = registeredCapitalTypeList.stream().filter(it -> it.getName().equals(item.getRegisteredCapitalTypeStr().trim()))
  526. .findFirst().orElse(new SysDictionaryItem()).getValue();
  527. if (item.registeredCapitalType == null)
  528. errorInfo += "注册资本类型不存在!";
  529. }
  530. if (!stringUtils.IsNullOrEmpty(item.getSignInPoliticalAreaName())) {
  531. item.signInPoliticalArea = regionDataList.stream().filter(it -> it.getName().equals(item.signInPoliticalAreaName.trim()))
  532. .findFirst().orElse(new SysDictionaryItem()).getCode();
  533. if (item.signInPoliticalArea == null)
  534. errorInfo += "注册地址行政区划不存在!";
  535. }
  536. if (!stringUtils.IsNullOrEmpty(item.getIndustryName())) {
  537. item.industryID = industryList.stream().filter(it -> it.getIndustryName().equals(item.industryName.trim()))
  538. .findFirst().orElse(new PcIndustry()).getIndustryId();
  539. if (item.industryID == null)
  540. errorInfo += "所属行业不存在!";
  541. }
  542. if (!stringUtils.IsNullOrEmpty(item.getEstateCategoryName())) {
  543. item.estateCategoryID = companyEstateCategory.stream().filter(it -> it.getName().equals(item.estateCategoryName.trim()))
  544. .findFirst().orElse(new SysDictionaryItem()).getValue();
  545. if (item.estateCategoryID == null)
  546. errorInfo += "所属产业分类不存在!";
  547. }
  548. if (!stringUtils.IsNullOrEmpty(item.validDateStr))
  549. {
  550. if(item.validDateStr.trim().equals("至长期")){
  551. item.validDate = new Date(2099,12,31);
  552. }
  553. }
  554. if (!stringUtils.IsNullOrEmpty(item.companyEmail))
  555. {
  556. if(!regexUtils.theEmailIsValid(item.companyEmail)){
  557. errorInfo +="企业邮箱不合法!";
  558. }
  559. }
  560. if (!stringUtils.IsNullOrEmpty(item.companyTypeStr))
  561. {
  562. item.companyType = dicCompanyTypeList.stream().filter(it -> it.getName().equals(item.companyTypeStr.trim()))
  563. .findFirst().orElse(new SysDictionaryItem()).getValue();
  564. if (item.companyType == null || item.companyType == 0)
  565. errorInfo += "经济类型不存在!";
  566. }
  567. if (stringUtils.IsNullOrEmpty(item.getRegionName()))
  568. errorInfo += "请选择所属县区!";
  569. else {
  570. item.setRegionCode(regionDataList.stream().filter(it -> it.getName().equals(item.getRegionName().trim()))
  571. .findFirst().orElse(new SysDictionaryItem()).getCode());
  572. if (item.getRegionCode() == null)
  573. errorInfo += "所属县区不存在!";
  574. else{
  575. if(!item.getRegionCode().equals(finalCurLoginUserSiteInfo.getRegionCode())){
  576. errorInfo += "请选择您所在驿站的县区!";
  577. }
  578. }
  579. }
  580. if (!stringUtils.IsNullOrEmpty(item.getStreetName())) {
  581. item.setStreetCode(streetDataList.stream().filter(it -> it.getName().equals(item.getStreetName().trim()))
  582. .findFirst().orElse(new SysDictionaryItem()).getCode());
  583. if (item.getStreetCode() == null)
  584. errorInfo += "所属街道不存在!";
  585. else{
  586. if (stringUtils.IsNullOrEmpty(item.getRegionName())){
  587. errorInfo += "请选择所属县区!";
  588. }else{
  589. AreaCodeExample curStreetExp = new AreaCodeExample();
  590. curStreetExp.or().andCodeEqualTo(item.getStreetCode());
  591. var curStreetReginCode = areaCodeMapper.selectByExample(curStreetExp).get(0).getFid();
  592. if(item.getRegionCode()!= null&&!curStreetReginCode.equals(item.getRegionCode())){
  593. errorInfo += "所属街道不属于当前所属县区!";
  594. }
  595. }
  596. }
  597. }
  598. if (!stringUtils.IsNullOrEmpty(item.companyModelStr)) {
  599. item.companyModel = dicCompanyModelList.stream().filter(it -> it.getName().equals(item.companyModelStr.trim()))
  600. .findFirst().orElse(new SysDictionaryItem()).getValue();
  601. if (item.companyModel == null || item.companyModel == 0)
  602. errorInfo += "企业规模不存在!";
  603. }
  604. if(repeatCodeList.stream().count()>0){
  605. if(repeatCodeList.contains(item.getCompanyCode())){
  606. errorInfo = "导入数据存在相同的信用代码!";
  607. if(repeatNameList.stream().count()>0){
  608. if(repeatNameList.contains(item.getCompanyName())){
  609. errorInfo += "导入数据存在相同的企业名称!";
  610. }
  611. }
  612. }
  613. }
  614. if(repeatNameList.stream().count()>0){
  615. if(repeatNameList.contains(item.getCompanyName())){
  616. errorInfo = "导入数据存在相同的企业名称!";
  617. if(repeatCodeList.stream().count()>0){
  618. if(repeatCodeList.contains(item.getCompanyCode())){
  619. errorInfo += "导入数据存在相同的信用代码!";
  620. }
  621. }
  622. }
  623. }
  624. if (stringUtils.IsNullOrEmpty(errorInfo)) {
  625. resultList.add(item);
  626. } else {
  627. item.setErrorMessage(errorInfo);
  628. }
  629. });
  630. if (dataList.stream().filter(it -> !stringUtils.IsNullOrEmpty(it.errorMessage)).collect(Collectors.toList()).size() > 0)
  631. return dataList;
  632. resultList.forEach(item -> {
  633. save(item, userID);
  634. });
  635. return null;
  636. }
  637. @Override
  638. public List<PcSite> getSiteList() {
  639. //所属驿站
  640. List<PcSite> siteList = siteMapper.selectByExample(null);
  641. return siteList;
  642. }
  643. @Override
  644. public Integer saveAppCompanyPost(AppCompanyPostVo data, String userId) {
  645. String pattern = "yyyy-MM-dd"; // 日期字符串的格式
  646. SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
  647. var companyID = UUID.randomUUID().toString();
  648. if (stringUtils.IsNullOrEmpty(data.getCompanyID())) {
  649. data.setCompanyID(companyID);
  650. }
  651. Integer rows = save(data, userId);
  652. final int[] postRows = {0};
  653. if (rows > 0) {
  654. PcPostExample expPost = new PcPostExample();
  655. PcPostExample.Criteria cro = expPost.or();
  656. cro.andCompanyIDEqualTo(data.getCompanyID());
  657. int delRows=pcPostMapper.deleteByExample(expPost);
  658. data.getPostData().stream().forEach(x -> {
  659. PcPost post = new PcPost();
  660. post.setRecordStatus(1);
  661. post.setPostID(UUID.randomUUID().toString());
  662. post.setCompanyID(data.getCompanyID());
  663. post.setPostName(x.get("postName").toString());
  664. post.setRecruitCount(Integer.parseInt(x.get("recruitCount").toString()));
  665. post.setValidDay(Integer.parseInt(x.get("validDay").toString()));
  666. try {
  667. post.setValidTime(dateFormat.parse(x.get("validTime").toString()));
  668. } catch (ParseException e) {
  669. e.printStackTrace();
  670. }
  671. int r = pcPostMapper.insert(post);
  672. postRows[0] += r;
  673. });
  674. return postRows[0];
  675. }
  676. return null;
  677. }
  678. @Override
  679. public CompanyVo normalByCompanyName(String companyName) {
  680. PcFirmWithBLOBs pcFirm = firmService.selectByCompanyName(companyName);
  681. if (pcFirm == null) {
  682. return null;
  683. }
  684. CompanyVo companyVo = new CompanyVo();
  685. // 匹配数据
  686. companyVo.setFrName(pcFirm.getDbrName());
  687. if (pcFirm.getRegisteredCapital() != null && !pcFirm.getRegisteredCapital().trim().isBlank()) {
  688. try {
  689. companyVo.setRegisteredCapital(BigDecimal.valueOf(Double.valueOf(pcFirm.getRegisteredCapital())));
  690. } catch (Exception e) {
  691. }
  692. }
  693. companyVo.setCompanyCode(pcFirm.getCompanyCode());
  694. if (pcFirm.getInsuredCount() != null && !pcFirm.getInsuredCount().trim().isBlank()) {
  695. try {
  696. companyVo.setInsuredCount(Integer.valueOf(pcFirm.getInsuredCount()));
  697. } catch (Exception e) {
  698. }
  699. }
  700. companyVo.setUserMobile(pcFirm.getLxMobile());
  701. companyVo.setCompanyEmail(pcFirm.getEmail());
  702. companyVo.setCompanyAddress(pcFirm.getLatestAddress());
  703. companyVo.setBusinScope(pcFirm.getBusinessScope());
  704. if (pcFirm.getEstablishmentDate() != null) {
  705. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  706. try {
  707. companyVo.setEstablishmentTime(dateFormat.parse(pcFirm.getEstablishmentDate()));
  708. } catch (Exception e) {
  709. }
  710. }
  711. if (pcFirm.getIndustry() != null && !pcFirm.getIndustry().isBlank()) {
  712. // 获取行业数据
  713. List<PcIndustry> allList = industryService.getAllList();
  714. PcIndustry pcIndustry = allList.stream().filter(item -> item.getIndustryName().equals(pcFirm.getIndustry())).findFirst().orElse(new PcIndustry());
  715. companyVo.setIndustryID(pcIndustry.getIndustryId());
  716. companyVo.setIndustryName(pcIndustry.getIndustryName());
  717. }
  718. if (pcFirm.getHomeRegion() != null && !pcFirm.getHomeRegion().isBlank()) {
  719. // 匹配注册地所属县区
  720. AreaCodeExample example = new AreaCodeExample();
  721. AreaCodeExample.Criteria criteria = example.createCriteria();
  722. criteria.andNameEqualTo(pcFirm.getHomeRegion());
  723. List<AreaCode> areaCodes = areaCodeMapper.selectByExample(example);
  724. if (!areaCodes.isEmpty()) {
  725. companyVo.setSignInPoliticalArea(areaCodes.get(0).getCode());
  726. }
  727. }
  728. return companyVo;
  729. }
  730. /**
  731. * 企业可视化地图查询
  732. *
  733. * @param companyName 企业名称
  734. * @param maxDistance 最大直线距离
  735. * @param companyModel 企业规模
  736. * @param recordStatus 企业状态
  737. * @param regionCode 所属县区
  738. * @param siteID 所属驿站
  739. * @param createTimeBy 创建时间
  740. * @return 企业VO列表
  741. */
  742. @Override
  743. public PageInfo<CompanyPostMapVo> getDataMapList(int pageIndex, int pageSize,
  744. String companyName, Integer maxDistance, Integer companyModel,
  745. Integer recordStatus, String regionCode, String siteID,
  746. Double latitude, Double longitude,
  747. String createTimeBy, Integer isPost) {
  748. PageHelper.startPage(pageIndex, pageSize);
  749. // 按要求获取到距离当前日期的时间
  750. String createTime = getCreateTime(createTimeBy);
  751. List<CompanyPostMapVo> dataMapList = companyCQuery.getDataMapList(companyName, maxDistance, companyModel, recordStatus, regionCode, siteID, latitude, longitude, createTime, isPost);
  752. PageInfo<CompanyPostMapVo> result = new PageInfo<>(dataMapList);
  753. // 获取所有的企业ID
  754. List<String> companyIDs = result.getList().stream()
  755. .filter(Objects::nonNull)
  756. .map(CompanyPostMapVo::getCompanyID)
  757. .filter(Objects::nonNull)
  758. .collect(Collectors.toList());
  759. if (!companyIDs.isEmpty()) {
  760. // 查询岗位并映射到企业
  761. List<PostVo> postList = postCQuery.selectPostInCompanyIDs(stringUtils.ListToInSql(companyIDs));
  762. Map<String, List<PostVo>> postMap = (postList != null) ?
  763. postList.stream()
  764. .filter(Objects::nonNull)
  765. .collect(Collectors.groupingBy(PostVo::getCompanyID))
  766. : new HashMap<>();
  767. // 填充岗位数据
  768. result.getList().forEach(company -> {
  769. if (company != null && company.getCompanyID() != null) {
  770. company.setPostList(postMap.getOrDefault(company.getCompanyID(), new ArrayList<>()));
  771. }
  772. });
  773. // 查询标签并映射到企业
  774. List<LabelVo> companyLabelList = labelCQuery.getCompanyLabelListInCompanyIDs(stringUtils.ListToInSql(companyIDs));
  775. Map<String, List<LabelVo>> labelMap = (companyLabelList != null) ?
  776. companyLabelList.stream()
  777. .filter(Objects::nonNull)
  778. .collect(Collectors.groupingBy(LabelVo::getCompanyID))
  779. : new HashMap<>();
  780. // 填充标签数据
  781. result.getList().forEach(company -> {
  782. if (company != null && company.getCompanyID() != null) {
  783. company.setCompanyLabelList(labelMap.getOrDefault(company.getCompanyID(), new ArrayList<>()));
  784. }
  785. });
  786. }
  787. return result;
  788. }
  789. /**
  790. * 企业可视化地图查询企业-按岗位名称反向查询
  791. *
  792. * @param pageIndex
  793. * @param pageSize
  794. * @param postName 企业名称
  795. * @param maxDistance 最大直线距离
  796. * @param companyModel 企业规模
  797. * @param recordStatus 企业状态
  798. * @param regionCode 所属县区
  799. * @param siteID 所属驿站
  800. * @param latitude 纬度
  801. * @param longitude 经度
  802. * @return 企业VO列表
  803. */
  804. @Override
  805. public PageInfo<CompanyPostMapVo> getDataMapListByPostName(int pageIndex, int pageSize, String postName,
  806. Integer maxDistance, Integer companyModel, Integer recordStatus,
  807. String regionCode, String siteID, Double latitude,
  808. Double longitude, String createTimeBy) {
  809. PageHelper.startPage(pageIndex, pageSize);
  810. // 按要求获取到距离当前日期的时间
  811. String createTime = getCreateTime(createTimeBy);
  812. List<CompanyPostMapVo> dataMapList = companyCQuery.getDataMapListByPostName(postName, maxDistance, companyModel, recordStatus, regionCode, siteID, latitude, longitude, createTime);
  813. PageInfo<CompanyPostMapVo> result = new PageInfo(dataMapList);
  814. return result;
  815. }
  816. /**
  817. * 获取指定创建日期
  818. */
  819. public String getCreateTime(String by){
  820. if (stringUtils.IsNullOrEmpty(by) || by.equals("all")){
  821. return null;
  822. }
  823. LocalDate currentDate = LocalDate.now();
  824. LocalDate resultDate = null;
  825. switch (by){
  826. case "3Day":
  827. resultDate = currentDate.minusDays(3);
  828. break;
  829. case "1Week":
  830. resultDate = currentDate.minusWeeks(1);
  831. break;
  832. case "1Month":
  833. resultDate = currentDate.minusMonths(1);
  834. break;
  835. case "3Month":
  836. resultDate = currentDate.minusMonths(3);
  837. break;
  838. case "Year":
  839. resultDate = currentDate.minusYears(1);
  840. break;
  841. default:
  842. return null;
  843. }
  844. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  845. return resultDate.format(formatter);
  846. }
  847. /**
  848. * 查询企业的打卡服务记录
  849. *
  850. * @param companyID 企业ID
  851. * @return 打卡记录
  852. */
  853. @Override
  854. public List<SigninVo> getCompanySigninList(String companyID) {
  855. return companyCQuery.getCompanySigninList(companyID);
  856. }
  857. }