CompanyServiceImpl.java 40 KB

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