1a535125e23226bf9816c1426a536479ec0e69a3.svn-base 91 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164
  1. package cn.com.goldenwater.dcproj.service.impl.tac;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.constValue.AdCodeLabel;
  4. import cn.com.goldenwater.dcproj.constValue.SmsCodeEnum;
  5. import cn.com.goldenwater.dcproj.dao.BisInspAllRlationPersDao;
  6. import cn.com.goldenwater.dcproj.dao.RoleDao;
  7. import cn.com.goldenwater.dcproj.dao.TacInspPersAreaPrisDao;
  8. import cn.com.goldenwater.dcproj.dao.TacInspYearBatchDao;
  9. import cn.com.goldenwater.dcproj.dao.TacInspYearBatchGroupPersDao;
  10. import cn.com.goldenwater.dcproj.dao.TacTacInspPersPrisLtsDao;
  11. import cn.com.goldenwater.dcproj.dao.TacWorkerBDao;
  12. import cn.com.goldenwater.dcproj.dao.TacWorkerTypeDao;
  13. import cn.com.goldenwater.dcproj.dao.UserRoleDao;
  14. import cn.com.goldenwater.dcproj.dto.TacCountDto;
  15. import cn.com.goldenwater.dcproj.dto.TacWorkerBCountDto;
  16. import cn.com.goldenwater.dcproj.dto.TacWorkerBDto;
  17. import cn.com.goldenwater.dcproj.dto.TacWorkerPerDto;
  18. import cn.com.goldenwater.dcproj.dto.TacWorkerbAuditDto;
  19. import cn.com.goldenwater.dcproj.enums.SystemFlagEnum;
  20. import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers;
  21. import cn.com.goldenwater.dcproj.model.BisInspPersOrg;
  22. import cn.com.goldenwater.dcproj.model.GwComFile;
  23. import cn.com.goldenwater.dcproj.model.OlBisInspOrg;
  24. import cn.com.goldenwater.dcproj.model.Role;
  25. import cn.com.goldenwater.dcproj.model.TacInspPersAreaPris;
  26. import cn.com.goldenwater.dcproj.model.TacInspYearBatch;
  27. import cn.com.goldenwater.dcproj.model.TacInspYearBatchArea;
  28. import cn.com.goldenwater.dcproj.model.TacInspYearBatchGroup;
  29. import cn.com.goldenwater.dcproj.model.TacInspYearBatchGroupPers;
  30. import cn.com.goldenwater.dcproj.model.TacTacInspPersPrisLts;
  31. import cn.com.goldenwater.dcproj.model.TacWorkerB;
  32. import cn.com.goldenwater.dcproj.model.TacWorkerType;
  33. import cn.com.goldenwater.dcproj.model.UserRole;
  34. import cn.com.goldenwater.dcproj.param.BisInspAllRlationPersParam;
  35. import cn.com.goldenwater.dcproj.param.GwComFileParam;
  36. import cn.com.goldenwater.dcproj.param.RoleParam;
  37. import cn.com.goldenwater.dcproj.param.TacInspYearBatchGroupParam;
  38. import cn.com.goldenwater.dcproj.param.TacInspYearBatchGroupPersParam;
  39. import cn.com.goldenwater.dcproj.param.TacTacInspPersPrisLtsParam;
  40. import cn.com.goldenwater.dcproj.param.TacWorkerBParam;
  41. import cn.com.goldenwater.dcproj.param.TacWorkerTypeParam;
  42. import cn.com.goldenwater.dcproj.service.BisInspPersOrgService;
  43. import cn.com.goldenwater.dcproj.service.GwComFileService;
  44. import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
  45. import cn.com.goldenwater.dcproj.service.TacInspYearBatchGroupService;
  46. import cn.com.goldenwater.dcproj.service.TacWorkerBService;
  47. import cn.com.goldenwater.dcproj.utils.BeanUtil;
  48. import cn.com.goldenwater.dcproj.utils.HttpClientUtils;
  49. import cn.com.goldenwater.dcproj.utils.InspUtils;
  50. import cn.com.goldenwater.dcproj.utils.UserMsgSectrityUtils;
  51. import cn.com.goldenwater.dcproj.utils.expExcel.ExportUtil;
  52. import cn.com.goldenwater.dcproj.utils.impexcel.FileUtil;
  53. import cn.com.goldenwater.id.util.UuidUtil;
  54. import com.github.pagehelper.PageHelper;
  55. import com.github.pagehelper.PageInfo;
  56. import org.apache.commons.collections.MapUtils;
  57. import org.apache.commons.collections.map.HashedMap;
  58. import org.apache.commons.lang3.StringUtils;
  59. import org.apache.poi.ss.usermodel.CellType;
  60. import org.apache.poi.ss.usermodel.Row;
  61. import org.springframework.beans.factory.annotation.Autowired;
  62. import org.springframework.beans.factory.annotation.Value;
  63. import org.springframework.data.redis.core.RedisTemplate;
  64. import org.springframework.stereotype.Service;
  65. import org.springframework.transaction.annotation.Transactional;
  66. import org.springframework.web.multipart.MultipartFile;
  67. import javax.servlet.http.HttpServletResponse;
  68. import java.io.IOException;
  69. import java.time.Instant;
  70. import java.time.LocalDateTime;
  71. import java.time.ZoneId;
  72. import java.time.format.DateTimeFormatter;
  73. import java.util.ArrayList;
  74. import java.util.Base64;
  75. import java.util.Collections;
  76. import java.util.Date;
  77. import java.util.HashMap;
  78. import java.util.Iterator;
  79. import java.util.List;
  80. import java.util.Map;
  81. import java.util.Timer;
  82. import java.util.TimerTask;
  83. import java.util.TreeMap;
  84. import java.util.concurrent.TimeUnit;
  85. import java.util.stream.Collectors;
  86. /**
  87. * @author lune
  88. * @date 2019-9-6
  89. */
  90. @Service
  91. @Transactional
  92. public class TacWorkerBServiceImpl extends AbstractCrudService<TacWorkerB, TacWorkerBParam> implements TacWorkerBService {
  93. @Autowired
  94. private TacWorkerBDao tacWorkerBDao;
  95. @Autowired
  96. private TacInspPersAreaPrisDao prisDao;
  97. @Autowired
  98. private TacTacInspPersPrisLtsDao ltsDao;
  99. @Autowired
  100. private BisInspAllRlationPersDao persDao;
  101. @Autowired
  102. private TacInspYearBatchGroupService groupService;
  103. @Autowired
  104. private TacInspYearBatchDao yearBatchDao;
  105. @Autowired
  106. private TacInspYearBatchGroupPersDao groupPersDao;
  107. @Autowired
  108. private RedisTemplate redisTemplate;
  109. @Autowired
  110. private TacWorkerTypeDao tacWorkerTypeDao;
  111. @Value("${export.templatePath}")
  112. private String templatePath;
  113. @Value("${impExcel.basePath}")
  114. private String impExcelPath;
  115. private static String apiKey = "1036432406699048960";
  116. private static String apiSecrect = "bbSsX1wvmaKdca5x2+yBDgeFtl9hj4zJmnegunWuLuHLwLo+QjxOr3//P4BJNrVADa7tN4w0DX1KS/VSec5G0x+ucDeAcSt9tWgFGyoBVtblybh+vzLbwH4sJa92hQfu\n";
  117. public TacWorkerBServiceImpl(TacWorkerBDao tacWorkerBDao) {
  118. super(tacWorkerBDao);
  119. this.tacWorkerBDao = tacWorkerBDao;
  120. }
  121. @Override
  122. public List<TacCountDto> countByAdCode(TacWorkerBParam tacWorkerBParam) {
  123. parseParam(tacWorkerBParam);
  124. return tacWorkerBDao.countByAdCode(tacWorkerBParam);
  125. }
  126. @Override
  127. public List<TacCountDto> countByTitles(TacWorkerBParam tacWorkerBParam) {
  128. parseParam(tacWorkerBParam);
  129. return tacWorkerBDao.countByTitles(tacWorkerBParam);
  130. }
  131. private void parseParam(TacWorkerBParam tacWorkerBParam) {
  132. //设置多重
  133. tacWorkerBParam.setGroupType(InspUtils.setOrgIds(tacWorkerBParam.getGroupType()));
  134. tacWorkerBParam.setRoleType(InspUtils.setOrgIds(tacWorkerBParam.getRoleType()));
  135. tacWorkerBParam.setWorkAd(InspUtils.setOrgIds(tacWorkerBParam.getWorkAd()));
  136. tacWorkerBParam.setOrgCode(InspUtils.setOrgIds(tacWorkerBParam.getOrgCode()));
  137. tacWorkerBParam.setEducation(InspUtils.setOrgIds(tacWorkerBParam.getEducation()));
  138. tacWorkerBParam.setTitles(InspUtils.setOrgIds(tacWorkerBParam.getTitles()));
  139. tacWorkerBParam.setUnitRanks(InspUtils.setOrgIds(tacWorkerBParam.getUnitRanks()));
  140. if (StringUtils.isNotBlank(tacWorkerBParam.getAgeLimits())) {
  141. String ageLimits = "";
  142. if (tacWorkerBParam.getAgeLimits().contains(",")) {
  143. ageLimits = "and (";
  144. StringBuilder age = new StringBuilder();
  145. for (String s : tacWorkerBParam.getAgeLimits().split(",")) {
  146. if (s.contains("-")) {
  147. age.insert(0, " or AGE Between " + s.split("-")[0] + " and " + s.split("-")[1]);
  148. } else {
  149. if (Integer.parseInt(s) > 50) {
  150. age.insert(0, " or age >= " + s);
  151. }
  152. if (Integer.parseInt(s) < 50) {
  153. age.insert(0, " or age <= " + s);
  154. }
  155. }
  156. }
  157. ageLimits = ageLimits + " " + age.toString().trim().substring(2) + " )";
  158. } else {
  159. if (tacWorkerBParam.getAgeLimits().contains("-")) {
  160. ageLimits = "AND AGE Between " + tacWorkerBParam.getAgeLimits().split("-")[0] + " and " + tacWorkerBParam.getAgeLimits().split("-")[1];
  161. } else {
  162. if (Integer.parseInt(tacWorkerBParam.getAgeLimits()) > 50) {
  163. ageLimits = "AND age >=" + tacWorkerBParam.getAgeLimits();
  164. } else {
  165. ageLimits = "AND age <= " + tacWorkerBParam.getAgeLimits();
  166. }
  167. }
  168. }
  169. tacWorkerBParam.setAgeLimits(ageLimits);
  170. }
  171. if (StringUtils.isNotBlank(tacWorkerBParam.getIsAll())) {
  172. String[] isAll = tacWorkerBParam.getIsAll().split("");
  173. StringBuilder isAllCon = new StringBuilder();
  174. for (String s : isAll) {
  175. if ("A".equalsIgnoreCase(s)) {
  176. isAllCon.insert(0, " or IS_A ='1'");
  177. }
  178. if ("B".equalsIgnoreCase(s)) {
  179. isAllCon.insert(0, " or IS_B ='1'");
  180. }
  181. if ("C".equalsIgnoreCase(s)) {
  182. isAllCon.insert(0, " or IS_C ='1'");
  183. }
  184. if ("D".equalsIgnoreCase(s)) {
  185. isAllCon.insert(0, " or IS_D = '1'");
  186. }
  187. if ("A".equalsIgnoreCase(s)) {
  188. isAllCon.insert(0, " or IS_E = '1'");
  189. }
  190. }
  191. if (isAllCon.length() > 0) {
  192. isAllCon = new StringBuilder("and ( " + isAllCon.toString().trim().substring(2) + ")");
  193. }
  194. tacWorkerBParam.setIsAll(isAllCon.toString());
  195. }
  196. }
  197. @Override
  198. public List<TacCountDto> countByRole(TacWorkerBParam tacWorkerBParam) {
  199. parseParam(tacWorkerBParam);
  200. return tacWorkerBDao.countByRole(tacWorkerBParam);
  201. }
  202. @Override
  203. public List<TacCountDto> countByEdu(TacWorkerBParam tacWorkerBParam) {
  204. parseParam(tacWorkerBParam);
  205. return tacWorkerBDao.countByEdu(tacWorkerBParam);
  206. }
  207. @Override
  208. public List<TacCountDto> countByAge(TacWorkerBParam tacWorkerBParam) {
  209. parseParam(tacWorkerBParam);
  210. return tacWorkerBDao.countByAge(tacWorkerBParam);
  211. }
  212. @Override
  213. public List<TacCountDto> countByOffice(TacWorkerBParam tacWorkerBParam) {
  214. parseParam(tacWorkerBParam);
  215. return tacWorkerBDao.countByOffice(tacWorkerBParam);
  216. }
  217. @Override
  218. public List<TacWorkerB> getWorkerListById(TacWorkerBParam tacWorkerBParam) {//累加专家
  219. List<TacWorkerB> result = new ArrayList<>();
  220. //获取批次的专家人数以及规则
  221. TacInspPersAreaPris persAreaPris = prisDao.get(tacWorkerBParam.getPrisId());
  222. String isAll = "";
  223. String isNotAll = "";
  224. if ("1".equals(persAreaPris.getIsFit())) {
  225. if ("1".equals(persAreaPris.getIsA())) {
  226. isAll = "or is_A = '1'" + isAll;
  227. } else {
  228. isNotAll = "or is_A != '1'";
  229. }
  230. if ("1".equals(persAreaPris.getIsB())) {
  231. isAll = "or is_B = '1'" + isAll;
  232. } else {
  233. isNotAll = "or is_A != '1'";
  234. }
  235. if ("1".equals(persAreaPris.getIsC())) {
  236. isAll = "or is_C = '1'" + isAll;
  237. } else {
  238. isNotAll = "or is_C != '1'";
  239. }
  240. if ("1".equals(persAreaPris.getIsD())) {
  241. isAll = "or is_d = '1'" + isAll;
  242. } else {
  243. isNotAll = "or is_d != '1'";
  244. }
  245. if ("1".equals(persAreaPris.getIsE())) {
  246. isAll = "or is_e = '1'" + isAll;
  247. } else {
  248. isNotAll = "or is_e != '1'";
  249. }
  250. if (isAll.length() > 0) {//去除or
  251. isAll = isAll.substring(2);
  252. }
  253. if (isNotAll.length() > 0) {//去除or
  254. isNotAll = isNotAll.substring(2);
  255. }
  256. }
  257. tacWorkerBParam.setIsAll(isAll);
  258. if ("1".equals(persAreaPris.getIsCommon())) {//一般库
  259. result.addAll(getWorkerByGourpType(tacWorkerBParam, persAreaPris, "1"));
  260. }
  261. if ("1".equals(persAreaPris.getIsProbation())) {//见习专家库
  262. result.addAll(getWorkerByGourpType(tacWorkerBParam, persAreaPris, "7"));
  263. }
  264. //择优选择
  265. if ("1".equals(persAreaPris.getIsPick())) {
  266. result.addAll(getWorkerByGourpType(tacWorkerBParam, persAreaPris, "4"));
  267. result.addAll(getWorkerByGourpType(tacWorkerBParam, persAreaPris, "5"));
  268. }
  269. //拼接新人
  270. //新人注释掉了
  271. if ("1".equals(persAreaPris.getIsNew())) {
  272. tacWorkerBParam.setNewSize(persAreaPris.getNewSize());
  273. result.addAll(getNewWorker(tacWorkerBParam, persAreaPris, "8", result));
  274. }
  275. TacInspYearBatch batch = yearBatchDao.get(tacWorkerBParam.getYearBatchId());
  276. // TacInspYearBatchGroupParam batchGroupParam=new TacInspYearBatchGroupParam();
  277. // batchGroupParam.setYear(batch.getYear());
  278. // batchGroupParam.setBatch(batch.getBatch());
  279. // batchGroupParam.setYearBatchId(batch.getId());
  280. // TacInspYearBatchGroup yearBatchGroup=groupService.getBy(batchGroupParam);
  281. for (TacWorkerB workerB : result) {
  282. TacInspYearBatchGroupPers groupPers = new TacInspYearBatchGroupPers();
  283. groupPers.setId(UuidUtil.uuid());
  284. groupPers.setYear(batch.getYear());
  285. groupPers.setBatch(batch.getBatch());
  286. groupPers.setYearBatchId(batch.getId());
  287. // if(yearBatchGroup!=null) {
  288. // groupPers.setGroupId(yearBatchGroup.getId());
  289. // }
  290. groupPers.setRoleType(workerB.getRoleType());
  291. groupPers.setPersId(workerB.getId());
  292. groupPers.setCtPersId(tacWorkerBParam.getCurrPersId());
  293. groupPers.setInTm(new Date());
  294. groupPers.setUpTm(new Date());
  295. groupPers.setIsNotice("0");
  296. groupPers.setIsSms("0");
  297. groupPers.setIsJoin("0");
  298. groupPers.setDataStat("0");
  299. groupPersDao.insert(groupPers);
  300. }
  301. return result;
  302. }
  303. private List<TacWorkerB> getNewWorker(TacWorkerBParam tacWorkerBParam, TacInspPersAreaPris persAreaPris, String groupType, List<TacWorkerB> list) {
  304. List<TacWorkerB> result = new ArrayList<>();
  305. TacTacInspPersPrisLtsParam ltsParam = new TacTacInspPersPrisLtsParam();
  306. TacTacInspPersPrisLts lts = null;
  307. if (StringUtils.isBlank(tacWorkerBParam.getPrisId())) {
  308. lts = new TacTacInspPersPrisLts();
  309. setLtsContent(lts, persAreaPris, groupType);
  310. } else {
  311. ltsParam.setPersPrisId(tacWorkerBParam.getPrisId());
  312. ltsParam.setTenetType(groupType);
  313. lts = ltsDao.getBy(ltsParam);
  314. }
  315. if (lts.getTotalSize() == 0) {
  316. return result;
  317. }
  318. if (lts.getSpecialSize() > 0) {
  319. result.addAll(getResultList(lts.getSpecialSize(), "20", persAreaPris.getIsReason(), tacWorkerBParam, list));
  320. }
  321. if (lts.getAssistantSize() > 0) {
  322. result.addAll(getResultList(lts.getSpecialSize(), "19", persAreaPris.getIsReason(), tacWorkerBParam, list));
  323. }
  324. if (lts.getEarlyTisSize() > 0) {
  325. result.addAll(getResultList(lts.getSpecialSize(), "11", persAreaPris.getIsReason(), tacWorkerBParam, list));
  326. }
  327. if (lts.getDevemanageTisSize() > 0) {
  328. result.addAll(getResultList(lts.getSpecialSize(), "12", persAreaPris.getIsReason(), tacWorkerBParam, list));
  329. }
  330. if (lts.getPlanTisSize() > 0) {
  331. result.addAll(getResultList(lts.getSpecialSize(), "13", persAreaPris.getIsReason(), tacWorkerBParam, list));
  332. }
  333. if (lts.getFinanceTisSize() > 0) {
  334. result.addAll(getResultList(lts.getSpecialSize(), "14", persAreaPris.getIsReason(), tacWorkerBParam, list));
  335. }
  336. if (lts.getQualityTisSize() > 0) {
  337. result.addAll(getResultList(lts.getSpecialSize(), "15", persAreaPris.getIsReason(), tacWorkerBParam, list));
  338. }
  339. if (lts.getSafetyTisSize() > 0) {
  340. result.addAll(getResultList(lts.getSpecialSize(), "16", persAreaPris.getIsReason(), tacWorkerBParam, list));
  341. }
  342. return result;
  343. }
  344. /**
  345. * 按照专家规则分配人员
  346. * @param tacWorkerBParam
  347. * @param persAreaPris 批次的专家人数以及规则
  348. * @param groupType 所属人员库别字典
  349. * @return
  350. */
  351. private List<TacWorkerB> getWorkerByGourpType(TacWorkerBParam tacWorkerBParam, TacInspPersAreaPris persAreaPris, String groupType) {
  352. List<TacWorkerB> result = new ArrayList<>();
  353. tacWorkerBParam.setGroupType(groupType);
  354. TacTacInspPersPrisLtsParam ltsParam = new TacTacInspPersPrisLtsParam();
  355. TacTacInspPersPrisLts lts = null;
  356. if (StringUtils.isBlank(tacWorkerBParam.getPrisId())) {
  357. lts = new TacTacInspPersPrisLts();
  358. setLtsContent(lts, persAreaPris, groupType);
  359. } else {//设置专家规则
  360. ltsParam.setPersPrisId(tacWorkerBParam.getPrisId());
  361. ltsParam.setTenetType(groupType);
  362. lts = ltsDao.getBy(ltsParam);
  363. }
  364. if (lts == null) {//设置专家规则
  365. return result;
  366. }
  367. if (lts.getTotalSize() == null || lts.getTotalSize() == 0) {//人员总数
  368. return result;
  369. }
  370. if (lts.getSpecialSize() != null && lts.getSpecialSize() > 0) {//特派员人数
  371. result.addAll(getResultList(lts.getSpecialSize(), "20", persAreaPris.getIsReason(), tacWorkerBParam, null));
  372. }
  373. if (lts.getAssistantSize() != null && lts.getAssistantSize() > 0) {//助理人数
  374. result.addAll(getResultList(lts.getAssistantSize(), "19", persAreaPris.getIsReason(), tacWorkerBParam, null));
  375. }
  376. if (lts.getEarlyTisSize() != null && lts.getEarlyTisSize() > 0) {//前期专家人数
  377. result.addAll(getResultList(lts.getEarlyTisSize(), "11", persAreaPris.getIsReason(), tacWorkerBParam, null));
  378. }
  379. if (lts.getDevemanageTisSize() != null && lts.getDevemanageTisSize() > 0) {//建管专家人数
  380. result.addAll(getResultList(lts.getDevemanageTisSize(), "12", persAreaPris.getIsReason(), tacWorkerBParam, null));
  381. }
  382. if (lts.getPlanTisSize() != null && lts.getPlanTisSize() > 0) {//计划专家人数
  383. result.addAll(getResultList(lts.getPlanTisSize(), "13", persAreaPris.getIsReason(), tacWorkerBParam, null));
  384. }
  385. if (lts.getFinanceTisSize() != null && lts.getFinanceTisSize() > 0) {//财务专家人数
  386. result.addAll(getResultList(lts.getFinanceTisSize(), "14", persAreaPris.getIsReason(), tacWorkerBParam, null));
  387. }
  388. if (lts.getQualityTisSize() != null && lts.getQualityTisSize() > 0) {//质量专家人数
  389. result.addAll(getResultList(lts.getQualityTisSize(), "15", persAreaPris.getIsReason(), tacWorkerBParam, null));
  390. }
  391. if (lts.getSafetyTisSize() != null && lts.getSafetyTisSize() > 0) {//安全专家人数
  392. result.addAll(getResultList(lts.getSafetyTisSize(), "16", persAreaPris.getIsReason(), tacWorkerBParam, null));
  393. }
  394. return result;
  395. }
  396. /**
  397. *
  398. * @param lts
  399. * @param persAreaPris
  400. * @param groupType
  401. */
  402. private void setLtsContent(TacTacInspPersPrisLts lts, TacInspPersAreaPris persAreaPris, String groupType) {
  403. List<TacCountDto> list = new ArrayList<>();
  404. switch (groupType) {
  405. case "1":
  406. list.addAll(persAreaPris.getCommList());
  407. break;
  408. case "7":
  409. list.addAll(persAreaPris.getProList());
  410. break;
  411. case "4":
  412. list.addAll(persAreaPris.getGoldList());
  413. break;
  414. case "5":
  415. list.addAll(persAreaPris.getRedList());
  416. break;
  417. case "8":
  418. list.addAll(persAreaPris.getNewList());
  419. break;
  420. }
  421. if (list.size() > 0) {
  422. lts.setTenetType(groupType);
  423. list.forEach(tacCountDto -> {
  424. if (StringUtils.isNotBlank(tacCountDto.getSelectCount())) {
  425. lts.setTotalSize((lts.getTotalSize() == null ? 0 : lts.getTotalSize()) + Long.valueOf(tacCountDto.getSelectCount()));
  426. switch (tacCountDto.getCode()) {
  427. case "20":
  428. lts.setSpecialSize(Long.valueOf(tacCountDto.getSelectCount()));
  429. break;
  430. case "19":
  431. lts.setAssistantSize(Long.valueOf(tacCountDto.getSelectCount()));
  432. break;
  433. case "11":
  434. lts.setEarlyTisSize(Long.valueOf(tacCountDto.getSelectCount()));
  435. break;
  436. case "12":
  437. lts.setDevemanageTisSize(Long.valueOf(tacCountDto.getSelectCount()));
  438. break;
  439. case "13":
  440. lts.setPlanTisSize(Long.valueOf(tacCountDto.getSelectCount()));
  441. break;
  442. case "14":
  443. lts.setFinanceTisSize(Long.valueOf(tacCountDto.getSelectCount()));
  444. break;
  445. case "15":
  446. lts.setQualityTisSize(Long.valueOf(tacCountDto.getSelectCount()));
  447. break;
  448. case "16":
  449. lts.setFinanceTisSize(Long.valueOf(tacCountDto.getSelectCount()));
  450. break;
  451. }
  452. }
  453. });
  454. }
  455. }
  456. /**
  457. * 把集合转换成角色 -> list 形式
  458. *
  459. * @param comList
  460. * @return
  461. */
  462. private Map<String, List<TacWorkerB>> converToMap(List<TacWorkerB> comList) {
  463. Map<String, List<TacWorkerB>> map = new HashMap<>();
  464. Collections.shuffle(comList);
  465. for (TacWorkerB tacWorkerB : comList) {
  466. if (StringUtils.isBlank(tacWorkerB.getRoleType())) {
  467. continue;
  468. }
  469. if (map.keySet().contains(tacWorkerB.getRoleType())) {
  470. if (map.get(tacWorkerB.getRoleType()) == null) {
  471. List<TacWorkerB> list = new ArrayList<>();
  472. list.add(tacWorkerB);
  473. map.put(tacWorkerB.getRoleType(), list);
  474. } else {
  475. map.get(tacWorkerB.getRoleType()).add(tacWorkerB);
  476. }
  477. } else {
  478. List<TacWorkerB> list = new ArrayList<>();
  479. list.add(tacWorkerB);
  480. map.put(tacWorkerB.getRoleType(), list);
  481. }
  482. }
  483. return map;
  484. }
  485. /**
  486. * 获取专家人员
  487. * @param size 获取对应专家人数
  488. * @param type 对应专家专业
  489. * @param isReason 是否理求合理分配
  490. * @return 专家人员列表
  491. */
  492. private List<TacWorkerB> getResultList(Long size, String type, String isReason, TacWorkerBParam tacWorkerBParam, List<TacWorkerB> list) {
  493. tacWorkerBParam.setRoleType(type);
  494. //排除匹配分组人员(过滤条件--筛选专业) 数据去重
  495. List<TacWorkerB> inList = this.tacWorkerBDao.getWorkerList(tacWorkerBParam);
  496. //排除匹配分组所有人员
  497. List<TacWorkerB> notInList = this.tacWorkerBDao.getIsNotFitWorkerList(tacWorkerBParam);
  498. if (list == null) {
  499. list = new ArrayList<>();
  500. }
  501. inList.removeAll(list);
  502. notInList.removeAll(list);
  503. if (size > (inList.size() + notInList.size())) {
  504. throw new NullPointerException("抽取失败:人员数量不够");
  505. }
  506. List<TacWorkerB> result = new ArrayList<>();
  507. if (size > inList.size()) {//规定专家人数大于排除匹配分组人员(过滤条件--筛选专业)
  508. int index = 0;
  509. for (TacWorkerB tacWorkerB : inList) {
  510. if (list.contains(tacWorkerB)) {
  511. continue;
  512. }
  513. tacWorkerB.setRoleType(type);
  514. index++;
  515. result.add(tacWorkerB);
  516. }
  517. //加入相同的数据?inList notInList 存在数据并集
  518. result.addAll(getReasonList(size - index, notInList, isReason, list, type));
  519. } else {
  520. //要求合理分配
  521. result.addAll(getReasonList(size, inList, isReason, list, type));
  522. }
  523. return result;
  524. }
  525. /**
  526. * 处理是否合理原则
  527. *
  528. * @param size
  529. * @param list
  530. * @param isReason
  531. * @return
  532. */
  533. private List<TacWorkerB> getReasonList(Long size, List<TacWorkerB> list, String isReason, List<TacWorkerB> bs, String type) {
  534. List<TacWorkerB> result = new ArrayList<>();
  535. Collections.shuffle(list);
  536. if ("1".equals(isReason)) {
  537. Map<Long, List<TacWorkerB>> map = new TreeMap<>();
  538. for (TacWorkerB tacWorkerB : list) {
  539. if (bs.contains(tacWorkerB)) {
  540. continue;
  541. }
  542. tacWorkerB.setRoleType(type);
  543. if (map.containsKey(tacWorkerB.getCount())) {
  544. if (map.get(tacWorkerB.getCount()) == null) {
  545. List<TacWorkerB> tacWorkers = new ArrayList<>();
  546. tacWorkers.add(tacWorkerB);
  547. map.put(tacWorkerB.getCount(), tacWorkers);
  548. } else {
  549. map.get(tacWorkerB.getCount()).add(tacWorkerB);
  550. }
  551. } else {
  552. List<TacWorkerB> tacWorkers = new ArrayList<>();
  553. tacWorkers.add(tacWorkerB);
  554. map.put(tacWorkerB.getCount(), tacWorkers);
  555. }
  556. }
  557. Long resultSize = size;
  558. for (Long index : map.keySet()) {
  559. if (map.get(index).size() <= resultSize) {
  560. result.addAll(map.get(index));
  561. resultSize = resultSize - map.get(index).size();
  562. } else {
  563. for (int i = 0; i < resultSize; i++) {
  564. int a = Math.round(map.get(index).size());
  565. TacWorkerB b = map.get(index).get(a == map.get(index).size() ? a - 1 : a);
  566. b.setRoleType(type);
  567. result.add(b);
  568. map.get(index).remove(b);
  569. }
  570. break;
  571. }
  572. }
  573. } else {
  574. for (int i = 0; i < size; i++) {
  575. int index = Math.round(list.size());
  576. TacWorkerB b = list.get(index == list.size() ? index - 1 : index);
  577. if (bs.contains(b)) {
  578. continue;
  579. }
  580. b.setRoleType(type);
  581. result.add(b);
  582. list.remove(b);
  583. }
  584. }
  585. return result;
  586. }
  587. @Override
  588. public PageInfo<TacWorkerB> getWorkerbsPage(TacWorkerBParam tacWorkerBParam) {
  589. PageHelper.startPage(tacWorkerBParam);
  590. List<TacWorkerB> list = this.tacWorkerBDao.getWorkerbsList(tacWorkerBParam);
  591. if (list.size() > 0) {
  592. for (TacWorkerB workerB : list) {
  593. TacWorkerTypeParam typeParam = new TacWorkerTypeParam();
  594. typeParam.setType("1");
  595. typeParam.setWorkerid(workerB.getId());
  596. workerB.setRoleTypeList(tacWorkerTypeDao.findList(typeParam));
  597. // 判断字段是否为 ‘null’,为null赋空值
  598. if (ifParamIsNull(workerB.getTelnumb())) {
  599. workerB.setTelnumb("");
  600. }
  601. if (ifParamIsNull(workerB.getOrgNm())) {
  602. workerB.setOrgNm("");
  603. }
  604. if (ifParamIsNull(workerB.getOe())) {
  605. workerB.setOe("");
  606. }
  607. if (ifParamIsNull(workerB.getRecommendedUnits())) {
  608. workerB.setRecommendedUnits("");
  609. }
  610. }
  611. }
  612. return new PageInfo<TacWorkerB>(list);
  613. }
  614. // 判断是否含有 null
  615. private boolean ifParamIsNull(String param) {
  616. return StringUtils.isNotBlank(param) && param.contains("null");
  617. }
  618. @Override
  619. public List<TacWorkerB> getWorkerbsList(TacWorkerBParam tacWorkerBParam) {
  620. List<TacWorkerB> list = this.tacWorkerBDao.getWorkerbsList(tacWorkerBParam);
  621. if ("1".equals(tacWorkerBParam.getIsExport())) {
  622. fieldFormat(list);
  623. }
  624. return list;
  625. }
  626. /**
  627. * 字段转换
  628. *
  629. * @param list
  630. */
  631. private void fieldFormat(List<TacWorkerB> list) {
  632. for (TacWorkerB workerB : list) {
  633. workerB.setGroupType(groupFormat(workerB.getGroupType()));
  634. workerB.setRoleType(roleFormat(workerB.getRoleType()));
  635. workerB.setEducation(educationFormat(workerB.getEducation()));
  636. workerB.setUnitRanks(unitRanksFormat(workerB.getUnitRanks()));
  637. workerB.setTitles(titlesFormat(workerB.getTitles()));
  638. workerB.setIsA(commonFormat(workerB.getIsA()));
  639. workerB.setIsB(commonFormat(workerB.getIsB()));
  640. workerB.setIsC(commonFormat(workerB.getIsC()));
  641. workerB.setIsD(commonFormat(workerB.getIsD()));
  642. workerB.setIsE(commonFormat(workerB.getIsE()));
  643. workerB.setIsNew(commonFormat(workerB.getIsNew()));
  644. workerB.setIsOffice(commonFormat(workerB.getIsOffice()));
  645. workerB.setIsTraining(commonFormat(workerB.getIsTraining()));
  646. }
  647. }
  648. private String titlesFormat(String key) {
  649. if ("1".equals(key)) {
  650. return "正高";
  651. }
  652. if ("2".equals(key)) {
  653. return "副高";
  654. }
  655. if ("3".equals(key)) {
  656. return "中级";
  657. }
  658. if ("4".equals(key)) {
  659. return "初级";
  660. }
  661. if ("正高".equals(key)) {
  662. return "1";
  663. }
  664. if ("副高".equals(key)) {
  665. return "2";
  666. }
  667. if ("中级".equals(key)) {
  668. return "3";
  669. }
  670. if ("初级".equals(key)) {
  671. return "4";
  672. }
  673. return "";
  674. }
  675. private String unitRanksFormat(String key) {
  676. if ("1".equals(key)) {
  677. return "省部级";
  678. }
  679. if ("2".equals(key)) {
  680. return "地市级";
  681. }
  682. if ("3".equals(key)) {
  683. return "县市级";
  684. }
  685. if ("省部级".equals(key)) {
  686. return "1";
  687. }
  688. if ("地市级".equals(key)) {
  689. return "2";
  690. }
  691. if ("县市级".equals(key)) {
  692. return "3";
  693. }
  694. return "";
  695. }
  696. private String educationFormat(String key) {
  697. if ("1".equals(key)) {
  698. return "专科及以下";
  699. }
  700. if ("2".equals(key)) {
  701. return "本科";
  702. }
  703. if ("3".equals(key)) {
  704. return "研究生";
  705. }
  706. if ("4".equals(key)) {
  707. return "博士";
  708. }
  709. if ("专科及以下".equals(key)) {
  710. return "1";
  711. }
  712. if ("本科".equals(key)) {
  713. return "2";
  714. }
  715. if ("研究生".equals(key)) {
  716. return "3";
  717. }
  718. if ("博士".equals(key)) {
  719. return "4";
  720. }
  721. return "";
  722. }
  723. private String groupFormat(String key) {
  724. if ("1".equals(key)) {
  725. return "一般库";
  726. }
  727. if ("2".equals(key)) {
  728. return "备用库";
  729. }
  730. if ("3".equals(key)) {
  731. return "退役库";
  732. }
  733. if ("4".equals(key)) {
  734. return "金名单";
  735. }
  736. if ("5".equals(key)) {
  737. return "红名单";
  738. }
  739. if ("6".equals(key)) {
  740. return "蓝名单";
  741. }
  742. if ("7".equals(key)) {
  743. return "见习专家库";
  744. }
  745. if ("一般库".equals(key)) {
  746. return "1";
  747. }
  748. if ("备用库".equals(key)) {
  749. return "2";
  750. }
  751. if ("退役库".equals(key)) {
  752. return "3";
  753. }
  754. if ("金名单".equals(key)) {
  755. return "4";
  756. }
  757. if ("红名单".equals(key)) {
  758. return "5";
  759. }
  760. if ("蓝名单".equals(key)) {
  761. return "6";
  762. }
  763. if ("见习专家库".equals(key)) {
  764. return "7";
  765. }
  766. return "";
  767. }
  768. /**
  769. * 角色转换,修改成逗号分隔形式
  770. *
  771. * @param key
  772. * @return
  773. */
  774. private String roleFormat(String key) {
  775. if (StringUtils.isBlank(key)) {
  776. return "";
  777. }
  778. String[] roleTypes = null;
  779. if (key.contains(",")) {
  780. roleTypes = key.split(",");
  781. } else {
  782. roleTypes = new String[]{key};
  783. }
  784. StringBuilder sb = new StringBuilder("");
  785. for (String roleType : roleTypes) {
  786. if ("20".equals(roleType)) {
  787. sb.append("特派员").append(",");
  788. }
  789. if ("19".equals(roleType)) {
  790. sb.append("助理").append(",");
  791. }
  792. if ("11".equals(roleType)) {
  793. sb.append("前期专家").append(",");
  794. }
  795. if ("12".equals(roleType)) {
  796. sb.append("建管专家").append(",");
  797. }
  798. if ("13".equals(roleType)) {
  799. sb.append("计划专家").append(",");
  800. }
  801. if ("14".equals(roleType)) {
  802. sb.append("财务专家").append(",");
  803. }
  804. if ("15".equals(roleType)) {
  805. sb.append("质量专家").append(",");
  806. }
  807. if ("16".equals(roleType)) {
  808. sb.append("安全专家").append(",");
  809. }
  810. if ("特派员".equals(roleType)) {
  811. sb.append("20").append(",");
  812. }
  813. if ("助理".equals(roleType)) {
  814. sb.append("19").append(",");
  815. }
  816. if ("前期专家".equals(roleType)) {
  817. sb.append("11").append(",");
  818. }
  819. if ("建管专家".equals(roleType)) {
  820. sb.append("12").append(",");
  821. }
  822. if ("计划专家".equals(roleType)) {
  823. sb.append("13").append(",");
  824. }
  825. if ("财务专家".equals(roleType)) {
  826. sb.append("14").append(",");
  827. }
  828. if ("质量专家".equals(roleType)) {
  829. sb.append("15").append(",");
  830. }
  831. if ("安全专家".equals(roleType)) {
  832. sb.append("16").append(",");
  833. }
  834. }
  835. return sb.length() > 0 ? sb.substring(0, sb.length() - 1) : "";
  836. }
  837. private String commonFormat(String key) {
  838. if ("1".equals(key)) {
  839. return "是";
  840. }
  841. if ("2".equals(key)) {
  842. return "否";
  843. }
  844. if ("是".equals(key)) {
  845. return "1";
  846. }
  847. if ("否".equals(key)) {
  848. return "2";
  849. }
  850. return "";
  851. }
  852. @Autowired
  853. private OlBisInspOrgService olBisInspOrgService;
  854. @Override
  855. public Map<String, Object> insertList(MultipartFile file, TacWorkerBParam tacWorkerBParam, String orgId) {
  856. Map<String, Object> map = new HashedMap();
  857. int success = 0;
  858. int fail = 0;
  859. String province = olBisInspOrgService.getRlProvince(orgId);
  860. List<Row> rowList = ExportUtil.getRowListByFile(file);
  861. List<TacWorkerB> list = new ArrayList<>();
  862. if (rowList.size() > 2) {
  863. Map<Integer, String> cols = new HashedMap();
  864. Row row = rowList.get(1);
  865. for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
  866. cols.put(j, String.valueOf(row.getCell(j)));
  867. }
  868. for (int i = 2; i < rowList.size(); i++) {
  869. row = rowList.get(i);
  870. TacWorkerB b = new TacWorkerB();
  871. for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
  872. if (row.getCell(j) == null) {
  873. continue;
  874. }
  875. if (row.getCell(j).getCellType() == CellType.NUMERIC) {
  876. if (80000000.0 - row.getCell(j).getNumericCellValue() < 0) {
  877. ExportUtil.setClassFiledValue(String.valueOf((long) row.getCell(j).getNumericCellValue()), cols.get(j), b, true);
  878. } else {
  879. ExportUtil.setClassFiledValue(String.valueOf(row.getCell(j)), cols.get(j), b, true);
  880. }
  881. } else {
  882. ExportUtil.setClassFiledValue(String.valueOf(row.getCell(j)), cols.get(j), b, true);
  883. }
  884. }
  885. b.setProvince(province);
  886. list.add(b);
  887. }
  888. }
  889. fieldFormat(list);
  890. for (TacWorkerB b : list) {
  891. if (StringUtils.isBlank(b.getMobilenumb())) {
  892. continue;
  893. }
  894. if(StringUtils.isNotBlank(b.getIdNo())){
  895. b.setIdNo(b.getIdNo().trim());
  896. }
  897. success++;
  898. TacWorkerBParam workerBParam = new TacWorkerBParam();
  899. workerBParam.setProvince(tacWorkerBParam.getProvince());
  900. workerBParam.setMobilenumb(b.getMobilenumb());
  901. workerBParam.setRoleType(b.getRoleType());
  902. b.setProvince(tacWorkerBParam.getProvince());
  903. TacWorkerB workerB = this.tacWorkerBDao.getBy(workerBParam);
  904. if (workerB == null) {
  905. //新增
  906. BisInspAllRlationPersParam param = new BisInspAllRlationPersParam();
  907. param.setMobilenumb(b.getMobilenumb());
  908. List<BisInspAllRlationPers> persList = persDao.findList(param);
  909. b.setId(UuidUtil.uuid());
  910. if (persList.size() == 0) {
  911. BisInspAllRlationPers pers = new BisInspAllRlationPers();
  912. BeanUtil.copyObject1(b, pers);
  913. pers.setGuid(UuidUtil.uuid());
  914. pers.setPwd("JinShui@433");
  915. pers.setOwnerSystem(SystemFlagEnum.DC_ALL.getValue());
  916. if (StringUtils.isNotBlank(pers.getSex())) {
  917. pers.setSex("男".equals(pers.getSex()) ? "1" : "2");
  918. }
  919. OlBisInspOrg olBisInspOrg = olBisInspOrgService.get(orgId);
  920. if (olBisInspOrg != null) {
  921. pers.setOrgNm(olBisInspOrg.getOrgNm());
  922. }
  923. pers.setPersType("4");
  924. pers.setOrgId(orgId);
  925. pers.setPersName(b.getName());
  926. addRole(orgId, pers, b);
  927. persDao.insert(pers);
  928. b.setLoginId(pers.getGuid());
  929. } else {
  930. b.setLoginId(persList.get(0).getGuid());
  931. }
  932. if (StringUtils.isNotBlank(b.getRoleType())) {
  933. String[] roleTypes = null;
  934. if (b.getRoleType().contains(",")) {
  935. roleTypes = b.getRoleType().split(",");
  936. } else {
  937. roleTypes = new String[]{b.getRoleType()};
  938. }
  939. for (String roleType : roleTypes) {
  940. TacWorkerType tacWorkerType = new TacWorkerType();
  941. tacWorkerType.setId(UuidUtil.uuid());
  942. tacWorkerType.setType("1");
  943. tacWorkerType.setWorkerid(b.getId());
  944. tacWorkerType.setValue(roleType);
  945. tacWorkerTypeDao.insert(tacWorkerType);
  946. }
  947. }
  948. tacWorkerBDao.insert(b);
  949. continue;
  950. }
  951. List<String> cols = new ArrayList<>();
  952. cols.add("id");
  953. cols.add("loginId");
  954. cols.add("orgCode");
  955. cols.add("isNew");
  956. cols.add("persId");
  957. cols.add("upTm");
  958. cols.add("dataStat");
  959. cols.add("count");
  960. BeanUtil.copyObject(b, workerB, cols);
  961. TacWorkerTypeParam tacWorkerTypeParam = new TacWorkerTypeParam();
  962. tacWorkerTypeParam.setType("1");
  963. tacWorkerTypeParam.setWorkerid(workerB.getId());
  964. List<TacWorkerType> tacWorkerTypes = tacWorkerTypeDao.findList(tacWorkerTypeParam);
  965. if (StringUtils.isNotBlank(b.getRoleType())) {
  966. String[] roleTypes = null;
  967. if (workerB.getRoleType().contains(",")) {
  968. roleTypes = workerB.getRoleType().split(",");
  969. } else {
  970. roleTypes = new String[]{workerB.getRoleType()};
  971. }
  972. for (String roleType : roleTypes) {
  973. if (isContain(tacWorkerTypes, roleType)) {
  974. continue;
  975. }
  976. TacWorkerType tacWorkerType = new TacWorkerType();
  977. tacWorkerType.setId(UuidUtil.uuid());
  978. tacWorkerType.setType("1");
  979. tacWorkerType.setWorkerid(workerB.getId());
  980. tacWorkerType.setValue(roleType);
  981. tacWorkerTypeDao.insert(tacWorkerType);
  982. }
  983. }
  984. if (tacWorkerTypes != null && tacWorkerTypes.size() > 0) {
  985. for (TacWorkerType tacWorkerType : tacWorkerTypes) {
  986. tacWorkerTypeDao.delete(tacWorkerType.getId());
  987. }
  988. }
  989. BisInspAllRlationPersParam param = new BisInspAllRlationPersParam();
  990. param.setMobilenumb(b.getMobilenumb());
  991. List<BisInspAllRlationPers> persList = persDao.findList(param);
  992. if (persList.size() == 0) {
  993. BisInspAllRlationPers pers = new BisInspAllRlationPers();
  994. BeanUtil.copyObject1(b, pers);
  995. pers.setGuid(UuidUtil.uuid());
  996. pers.setPwd("JinShui@433");
  997. if (StringUtils.isNotBlank(pers.getSex())) {
  998. pers.setSex("男".equals(pers.getSex()) ? "1" : "2");
  999. }
  1000. OlBisInspOrg olBisInspOrg = olBisInspOrgService.get(orgId);
  1001. if (olBisInspOrg != null) {
  1002. pers.setOrgNm(olBisInspOrg.getOrgNm());
  1003. }
  1004. pers.setPersType("4");
  1005. pers.setOrgId(orgId);
  1006. pers.setPersName(b.getName());
  1007. addRole(orgId, pers, workerB);
  1008. persDao.insert(pers);
  1009. workerB.setLoginId(pers.getGuid());
  1010. } else {
  1011. workerB.setLoginId(persList.get(0).getGuid());
  1012. }
  1013. tacWorkerBDao.update(workerB);
  1014. }
  1015. map.put("success", success);
  1016. map.put("fail", list.size() - success);
  1017. return map;
  1018. }
  1019. private boolean isContain(List<TacWorkerType> tacWorkerTypes, String roleType) {
  1020. Iterator<TacWorkerType> iterator = tacWorkerTypes.iterator();
  1021. while (iterator.hasNext()) {
  1022. TacWorkerType tacWorkerType = iterator.next();
  1023. if (roleType.equals(tacWorkerType.getValue())) {
  1024. tacWorkerTypes.remove(tacWorkerType);
  1025. return true;
  1026. }
  1027. }
  1028. return false;
  1029. }
  1030. private void addRole(String orgId, BisInspAllRlationPers pers, TacWorkerB workerB) {
  1031. BisInspPersOrg inspPersOrg = new BisInspPersOrg();
  1032. inspPersOrg.setOrgId(pers.getOrgId());
  1033. inspPersOrg.setPersId(pers.getGuid());
  1034. if (StringUtils.isNotBlank(pers.getPersType())) {
  1035. inspPersOrg.setUserType(pers.getPersType());
  1036. } else {
  1037. inspPersOrg.setUserType(AdCodeLabel.GROUP_LEADER);
  1038. }
  1039. persOrgService.insert(inspPersOrg);
  1040. if ("19".equals(workerB.getRoleType())) {
  1041. pers.setPermission("1");
  1042. RoleParam roleParam = new RoleParam();
  1043. roleParam.setRoleName("稽察助理");
  1044. roleParam.setOfcId(orgId);
  1045. Role role = roleDao.getBy(roleParam);
  1046. if (role != null) {
  1047. UserRole userRole = new UserRole();
  1048. userRole.setRoleId(role.getId());
  1049. userRole.setUserId(pers.getGuid());
  1050. userRoleDao.insert(userRole);
  1051. }
  1052. } else {
  1053. pers.setPermission("0");
  1054. RoleParam roleParam = new RoleParam();
  1055. roleParam.setRoleName("稽察填报");
  1056. roleParam.setOfcId(orgId);
  1057. Role role = roleDao.getone(roleParam);
  1058. if (role != null) {
  1059. UserRole userRole = new UserRole();
  1060. userRole.setRoleId(role.getId());
  1061. userRole.setUserId(pers.getGuid());
  1062. userRoleDao.insert(userRole);
  1063. }
  1064. }
  1065. }
  1066. @Override
  1067. public int distributePers(TacWorkerBParam tacWorkerBParam) {
  1068. TacInspPersAreaPris pris = prisDao.get(tacWorkerBParam.getPrisId());
  1069. TacWorkerBParam workerBParam = new TacWorkerBParam();
  1070. workerBParam.setProvince(tacWorkerBParam.getProvince());
  1071. workerBParam.setYearBatchId(pris.getYearBatchId());
  1072. if (pris.getYear() != null) {
  1073. workerBParam.setYear(pris.getYear() - 1);
  1074. }
  1075. //人员列表
  1076. List<TacWorkerB> list = this.tacWorkerBDao.getWorkerbsListByYear(workerBParam);
  1077. //组列表
  1078. TacInspYearBatchGroupParam groupParam = new TacInspYearBatchGroupParam();
  1079. groupParam.setYearBatchId(pris.getYearBatchId());
  1080. groupParam.setProvince(tacWorkerBParam.getProvince());
  1081. //分组人员固定后,人员分配,人员刷新,人员单角色刷新无法改变当前组的人员(浙江需求)
  1082. groupParam.setConfirmer("0");
  1083. List<TacInspYearBatchGroup> groupList = groupService.getGroupList(groupParam);
  1084. if ("1".equals(pris.getIsPorc())) {//是否合理搭配原则
  1085. return dealPris(tacWorkerBParam.getRoleType(), list, groupList, pris, tacWorkerBParam);
  1086. }
  1087. //得到角色-> 人员列表
  1088. Map<String, List<TacWorkerB>> disMap = converToMap(list);
  1089. //一般分配
  1090. for (TacInspYearBatchGroup tacInspYearBatchGroup : groupList) {
  1091. if (tacInspYearBatchGroup.getWorkersList() != null && tacInspYearBatchGroup.getWorkersList().size() > 0) {
  1092. //先删除以前关系
  1093. TacInspYearBatchGroupPersParam persParam = new TacInspYearBatchGroupPersParam();
  1094. persParam.setRoleType(tacWorkerBParam.getRoleType());
  1095. persParam.setGroupId(tacInspYearBatchGroup.getId());
  1096. groupPersDao.deleteGroupPersByGroupId(persParam);
  1097. }
  1098. if (StringUtils.isNotBlank(tacWorkerBParam.getRoleType())) {
  1099. insertGroupPersList(disMap.get(tacWorkerBParam.getRoleType()), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1100. } else {
  1101. //分配特派员
  1102. insertGroupPersList(disMap.get("20"), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1103. //分配助理
  1104. insertGroupPersList(disMap.get("19"), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1105. //分配专家;11前期专家 12建管专家 13计划专家 14财务专家 15质量专家 16安全专家
  1106. insertGroupPersList(disMap.get("11"), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1107. insertGroupPersList(disMap.get("12"), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1108. insertGroupPersList(disMap.get("13"), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1109. insertGroupPersList(disMap.get("14"), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1110. insertGroupPersList(disMap.get("15"), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1111. insertGroupPersList(disMap.get("16"), tacInspYearBatchGroup, tacWorkerBParam.getCurrPersId());
  1112. }
  1113. }
  1114. TacInspYearBatch batch = new TacInspYearBatch();
  1115. batch.setId(pris.getYearBatchId());
  1116. batch.setIsPersGroup("1");
  1117. yearBatchDao.update(batch);
  1118. return 1;
  1119. }
  1120. private int dealPris(String roleType, List<TacWorkerB> list, List<TacInspYearBatchGroup> groupList, TacInspPersAreaPris pris, TacWorkerBParam tacWorkerBParam) {
  1121. List<TacWorkerB> allTacWorker = new ArrayList<>();
  1122. //优生列表
  1123. if (pris.getSiBadPersNum() != null && pris.getSiBadPersNum().intValue() > 0) {
  1124. TacWorkerBParam bParam = new TacWorkerBParam();
  1125. bParam.setYear(pris.getYear() - 1);
  1126. bParam.setOrderBy("SYN_LOT");
  1127. bParam.setProvince(tacWorkerBParam.getProvince());
  1128. allTacWorker = tacWorkerBDao.getWorkerbsListByYear(bParam);
  1129. }
  1130. //差生列表
  1131. if (pris.getSiGoodPersNum() != null && pris.getSiGoodPersNum().intValue() > 0) {
  1132. if (allTacWorker == null) {
  1133. TacWorkerBParam bParam = new TacWorkerBParam();
  1134. bParam.setYear(pris.getYear() - 1);
  1135. // bParam.setYearBatchId(pris.getYearBatchId());
  1136. bParam.setOrderBy("SYN_LOT");
  1137. bParam.setProvince(tacWorkerBParam.getProvince());
  1138. allTacWorker = tacWorkerBDao.getWorkerbsListByYear(bParam);
  1139. }
  1140. }
  1141. if (allTacWorker.size() > 0) {
  1142. int badIndex = (int) (allTacWorker.size() * 0.2);
  1143. int goodIndex = (int) (allTacWorker.size() * 0.8);
  1144. for (TacWorkerB workerB : list) {
  1145. if (allTacWorker.indexOf(workerB) < 0) {
  1146. workerB.setLevel("2");
  1147. continue;
  1148. }
  1149. if (allTacWorker.indexOf(workerB) < goodIndex) {
  1150. workerB.setLevel("1");
  1151. continue;
  1152. }
  1153. if (allTacWorker.indexOf(workerB) > badIndex) {
  1154. workerB.setLevel("3");
  1155. continue;
  1156. }
  1157. workerB.setLevel("2");
  1158. }
  1159. }
  1160. //已选择的list
  1161. List<TacWorkerB> fitList = new ArrayList<>(list);
  1162. Map<String, List<TacWorkerB>> mapWork = new HashedMap();
  1163. list.forEach(tacWorkerB -> {
  1164. if (mapWork.keySet().contains(tacWorkerB.getWorkAd())) {
  1165. mapWork.get(tacWorkerB.getWorkAd()).add(tacWorkerB);
  1166. } else {
  1167. List<TacWorkerB> bs = new ArrayList<>();
  1168. bs.add(tacWorkerB);
  1169. mapWork.put(tacWorkerB.getWorkAd(), bs);
  1170. }
  1171. });
  1172. //处理年度
  1173. List<TacWorkerB> persList = new ArrayList<>();
  1174. if (pris.getAvoidYrSize() != null && pris.getAvoidYrSize().intValue() > 0) {
  1175. //得到前几年度的人员列表
  1176. Long styr = pris.getYear() - pris.getAvoidYrSize();
  1177. TacWorkerBParam bParam = new TacWorkerBParam();
  1178. bParam.setStyr(styr);
  1179. bParam.setEnyr(pris.getYear());
  1180. bParam.setProvince(tacWorkerBParam.getProvince());
  1181. persList.addAll(tacWorkerBDao.getWorkerList(bParam));
  1182. }
  1183. fitList.removeAll(persList);
  1184. //处理批次
  1185. List<TacWorkerB> bList = new ArrayList<>();
  1186. if (pris.getAvoidSize() != null && pris.getAvoidSize().intValue() > 0) {
  1187. TacWorkerBParam bParam = new TacWorkerBParam();
  1188. bParam.setProvince(tacWorkerBParam.getProvince());
  1189. if (pris.getAvoidSize() > pris.getBatch()) {
  1190. bParam.setStba(new Long(0));
  1191. } else {
  1192. bParam.setStba(pris.getBatch() - pris.getAvoidSize());
  1193. }
  1194. bParam.setEnba(pris.getBatch());
  1195. bList.addAll(tacWorkerBDao.getWorkerList(bParam));
  1196. }
  1197. fitList.removeAll(bList);
  1198. List<TacWorkerB> allList = new ArrayList<>(list);
  1199. for (TacInspYearBatchGroup tacInspYearBatchGroup : groupList) {
  1200. int sexNum = 0;
  1201. if (pris.getSiNvPersNum() != null && pris.getSiNvPersNum() > 0) {
  1202. sexNum = (int) (list.size() / groupList.size() * pris.getSiNvPersNum());
  1203. }
  1204. int saNum = 0;
  1205. if (pris.getSiSaPersNum() != null && pris.getSiSaPersNum() > 0) {
  1206. saNum = pris.getSiSaPersNum().intValue();
  1207. }
  1208. int siBad = 0;
  1209. if (pris.getSiBadPersNum() != null && pris.getSiBadPersNum() > 0) {
  1210. siBad = pris.getSiBadPersNum().intValue();
  1211. }
  1212. int siGood = 0;
  1213. if (pris.getSiGoodPersNum() != null && pris.getSiGoodPersNum() > 0) {
  1214. siGood = pris.getSiGoodPersNum().intValue();
  1215. }
  1216. //得到该组的所有符合原则的人员列表
  1217. List<TacWorkerB> groupPersList = new ArrayList<>(fitList);
  1218. List<TacWorkerB> notFitList = new ArrayList<>();
  1219. //工作地回避
  1220. if ("1".equals(pris.getIsArea())) {
  1221. //得到区域列表
  1222. List<TacInspYearBatchArea> areaList = tacInspYearBatchGroup.getAreaList();
  1223. //得到工作地列表的人员列表
  1224. areaList.forEach(tacInspYearBatchArea -> {
  1225. groupList.removeAll(mapWork.get(tacInspYearBatchArea.getAdCode()));
  1226. });
  1227. }
  1228. if (groupPersList.size() < list.size()) {
  1229. notFitList.addAll(list);
  1230. notFitList.removeAll(groupPersList);
  1231. }
  1232. //开始分配
  1233. if (tacInspYearBatchGroup.getWorkersList() != null && tacInspYearBatchGroup.getWorkersList().size() > 0) {
  1234. //先删除以前关系
  1235. TacInspYearBatchGroupPersParam persParam = new TacInspYearBatchGroupPersParam();
  1236. persParam.setRoleType(roleType);
  1237. if (StringUtils.isNotBlank(tacInspYearBatchGroup.getId())) {
  1238. persParam.setGroupId(tacInspYearBatchGroup.getId());
  1239. groupPersDao.deleteGroupPersByGroupId(persParam);
  1240. }
  1241. }
  1242. int a = distributePersByPris(allList, fitList, groupPersList, notFitList, list, tacInspYearBatchGroup, pris, tacWorkerBParam.getCurrPersId(), groupList.size(), sexNum, saNum, siBad, siGood, tacWorkerBParam.getRoleType());
  1243. }
  1244. return 0;
  1245. }
  1246. /**
  1247. * @param groupPersList
  1248. * @param notFitList
  1249. * @param tacInspYearBatchGroup
  1250. * @param pris
  1251. * @param currPersId
  1252. * @param groupSize
  1253. * @param sexNum
  1254. * @param saNum
  1255. * @param siBad
  1256. * @return
  1257. */
  1258. private int distributePersByPris(List<TacWorkerB> allList, List<TacWorkerB> fitList, List<TacWorkerB> groupPersList, List<TacWorkerB> notFitList, List<TacWorkerB> list, TacInspYearBatchGroup tacInspYearBatchGroup, TacInspPersAreaPris pris, String currPersId, int groupSize, int sexNum, int saNum, int siBad, int siGood, String roleType) {
  1259. List<TacWorkerB> selectList = new ArrayList<>();
  1260. Map<String, List<TacWorkerB>> map = converToMap(groupPersList);
  1261. Map<String, List<TacWorkerB>> notFitMap = converToMap(notFitList);
  1262. Map<String, List<TacWorkerB>> allMap = converToMap(list);
  1263. if (StringUtils.isNotBlank(roleType)) {
  1264. insertGroupPersList(allList, fitList, map, notFitMap, allMap, roleType, tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1265. } else {
  1266. //分配特派人
  1267. insertGroupPersList(allList, fitList, map, notFitMap, allMap, "20", tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1268. //分配助理
  1269. insertGroupPersList(allList, fitList, map, notFitMap, allMap, "19", tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1270. //分配专家
  1271. insertGroupPersList(allList, fitList, map, notFitMap, allMap, "11", tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1272. insertGroupPersList(allList, fitList, map, notFitMap, allMap, "12", tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1273. insertGroupPersList(allList, fitList, map, notFitMap, allMap, "13", tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1274. insertGroupPersList(allList, fitList, map, notFitMap, allMap, "14", tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1275. insertGroupPersList(allList, fitList, map, notFitMap, allMap, "15", tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1276. insertGroupPersList(allList, fitList, map, notFitMap, allMap, "16", tacInspYearBatchGroup, currPersId, pris, sexNum, saNum, siBad, siGood, groupSize, selectList);
  1277. }
  1278. return 1;
  1279. }
  1280. private void insertGroupPersList(List<TacWorkerB> allList, List<TacWorkerB> fitList, Map<String, List<TacWorkerB>> map, Map<String, List<TacWorkerB>> notFitMap, Map<String, List<TacWorkerB>> allMap, String roleType, TacInspYearBatchGroup tacInspYearBatchGroup, String currPersId, TacInspPersAreaPris pris, int sexNum, int saNum, int siBad, int siGood, int groupSize, List<TacWorkerB> selectList) {
  1281. insertGourpPers(allList, fitList, map.get(roleType), notFitMap.get(roleType), sexNum, saNum, siBad, siGood, tacInspYearBatchGroup, currPersId, selectList, pris);
  1282. }
  1283. private void insertGourpPers(List<TacWorkerB> allList, List<TacWorkerB> allFitList, List<TacWorkerB> fitList, List<TacWorkerB> notFitList, int sexNum, int saNum, int siBad, int siGood, TacInspYearBatchGroup tacInspYearBatchGroup, String currPersId, List<TacWorkerB> selectList, TacInspPersAreaPris pris) {
  1284. TacWorkerB b = null;
  1285. if (fitList == null || fitList.size() == 0) {
  1286. if (notFitList == null || notFitList.size() == 0) {
  1287. return;
  1288. }
  1289. int index = Math.round(notFitList.size());
  1290. b = notFitList.get(index == notFitList.size() ? index - 1 : index);
  1291. notFitList.remove(b);
  1292. tacInspYearBatchGroup.setDataStat("1");
  1293. tacInspYearBatchGroup.setPris("地域或年度批次回避失败");
  1294. insertGroupPers(tacInspYearBatchGroup, b, currPersId);
  1295. allList.remove(b);
  1296. allFitList.remove(b);
  1297. return;
  1298. }
  1299. int index = Math.round(fitList.size());
  1300. b = fitList.get(index == fitList.size() ? index - 1 : index);
  1301. //计算女性人数
  1302. if ("女".equalsIgnoreCase(b.getSex())) {
  1303. if (!calSexNum(sexNum, pris)) {
  1304. b = isFitSexObj(b, tacInspYearBatchGroup, fitList);
  1305. }
  1306. }
  1307. //计算同组专家人数
  1308. if (pris.getSiSaPersNum() != null && !"1".equals(tacInspYearBatchGroup.getDataStat())) {
  1309. b = calSiSaPersNum(b, fitList, saNum, sexNum, selectList, tacInspYearBatchGroup);
  1310. }
  1311. //计算最差人数
  1312. if (pris.getSiSaPersNum() != null && !"1".equals(tacInspYearBatchGroup.getDataStat())) {
  1313. b = calSiBadPersNum(b, fitList, siBad, siGood, saNum, sexNum, selectList, tacInspYearBatchGroup);
  1314. }
  1315. //计算最优人数
  1316. if (pris.getSiSaPersNum() != null && !"1".equals(tacInspYearBatchGroup.getDataStat())) {
  1317. b = calSiGoodPersNum(b, fitList, siGood, siBad, saNum, sexNum, selectList, tacInspYearBatchGroup);
  1318. }
  1319. selectList.add(b);
  1320. fitList.remove(b);
  1321. allList.remove(b);
  1322. allFitList.remove(b);
  1323. insertGroupPers(tacInspYearBatchGroup, b, currPersId);
  1324. }
  1325. private TacWorkerB calSiGoodPersNum(TacWorkerB b, List<TacWorkerB> fitList, int siGood, int siBad, int saNum, int sexNum, List<TacWorkerB> selectList, TacInspYearBatchGroup tacInspYearBatchGroup) {
  1326. if (siGood > 0) {
  1327. siGood--;
  1328. return b;
  1329. }
  1330. Map<String, List<TacWorkerB>> map = new HashedMap();
  1331. fitList.forEach(tacWorkerB -> {
  1332. if (map.keySet().contains(tacWorkerB.getLevel())) {
  1333. map.get(tacWorkerB.getLevel()).add(tacWorkerB);
  1334. } else {
  1335. List<TacWorkerB> list = new ArrayList<>();
  1336. list.add(tacWorkerB);
  1337. map.put(tacWorkerB.getLevel(), list);
  1338. }
  1339. });
  1340. if (map.get("2") != null || map.get("2").size() > 0) {
  1341. return calSiSaPersNum(b, map.get("2"), saNum, sexNum, selectList, tacInspYearBatchGroup);
  1342. }
  1343. if (map.get("3") != null || map.get("3").size() > 0) {
  1344. if (siBad > 0) {
  1345. siBad--;
  1346. return calSiSaPersNum(b, map.get("3"), saNum, sexNum, selectList, tacInspYearBatchGroup);
  1347. }
  1348. }
  1349. tacInspYearBatchGroup.setPris("不符合优等生原则");
  1350. tacInspYearBatchGroup.setDataStat("1");
  1351. return b;
  1352. }
  1353. private TacWorkerB calSiBadPersNum(TacWorkerB b, List<TacWorkerB> fitList, int siBad, int siGood, int saNum, int sexNum, List<TacWorkerB> selectList, TacInspYearBatchGroup tacInspYearBatchGroup) {
  1354. if (siBad > 0) {
  1355. siBad--;
  1356. return b;
  1357. }
  1358. Map<String, List<TacWorkerB>> map = new HashedMap();
  1359. fitList.forEach(tacWorkerB -> {
  1360. if (map.keySet().contains(tacWorkerB.getLevel())) {
  1361. map.get(tacWorkerB.getLevel()).add(tacWorkerB);
  1362. } else {
  1363. List<TacWorkerB> list = new ArrayList<>();
  1364. list.add(tacWorkerB);
  1365. map.put(tacWorkerB.getLevel(), list);
  1366. }
  1367. });
  1368. if (map.get("2") != null || map.get("2").size() > 0) {
  1369. return calSiSaPersNum(b, map.get("2"), saNum, sexNum, selectList, tacInspYearBatchGroup);
  1370. }
  1371. if (map.get("1") != null || map.get("1").size() > 0) {
  1372. if (siGood > 0) {
  1373. siGood--;
  1374. return calSiSaPersNum(b, map.get("1"), saNum, sexNum, selectList, tacInspYearBatchGroup);
  1375. }
  1376. }
  1377. tacInspYearBatchGroup.setPris("不符合差生原则");
  1378. tacInspYearBatchGroup.setDataStat("1");
  1379. return b;
  1380. }
  1381. private TacWorkerB calSiSaPersNum(TacWorkerB b, List<TacWorkerB> fitList, int saNum, int sexNum, List<TacWorkerB> selectList, TacInspYearBatchGroup tacInspYearBatchGroup) {
  1382. if (saNum > 0) {
  1383. saNum--;
  1384. return b;
  1385. }
  1386. Map<String, List<TacWorkerB>> map = new HashedMap();
  1387. selectList.forEach(tacWorkerB -> {
  1388. if (map.keySet().contains(tacWorkerB.getWorkAd())) {
  1389. map.get(tacWorkerB.getWorkAd()).add(tacWorkerB);
  1390. } else {
  1391. List<TacWorkerB> list = new ArrayList<>();
  1392. list.add(tacWorkerB);
  1393. map.put(tacWorkerB.getWorkAd(), list);
  1394. }
  1395. });
  1396. List<TacWorkerB> tempList = new ArrayList(fitList);
  1397. if (map.get(b.getWorkAd()) != null) {
  1398. if (map.get(b.getWorkAd()).size() + 1 > saNum) {
  1399. for (List<TacWorkerB> bs : map.values()) {
  1400. if (bs.size() >= saNum) {
  1401. tempList.removeAll(bs);
  1402. }
  1403. }
  1404. if (sexNum > 0) {
  1405. //抽取
  1406. int index = Math.round(tempList.size());
  1407. return tempList.get(index == tempList.size() ? index - 1 : index);
  1408. }
  1409. Map<String, List<TacWorkerB>> tempMap = new HashedMap();
  1410. tempList.forEach(tacWorkerB -> {
  1411. if (tempMap.keySet().contains(tacWorkerB.getSex())) {
  1412. tempMap.get(tacWorkerB.getSex()).add(tacWorkerB);
  1413. } else {
  1414. List<TacWorkerB> list = new ArrayList<>();
  1415. list.add(tacWorkerB);
  1416. tempMap.put(tacWorkerB.getSex(), list);
  1417. }
  1418. });
  1419. if (tempMap.get("男") == null || tempMap.get("男").size() == 0) {
  1420. tacInspYearBatchGroup.setPris("同组专家工作地原则不符");
  1421. tacInspYearBatchGroup.setDataStat("1");
  1422. return b;
  1423. }
  1424. }
  1425. }
  1426. return b;
  1427. }
  1428. private TacWorkerB isFitSexObj(TacWorkerB b, TacInspYearBatchGroup tacInspYearBatchGroup, List<TacWorkerB> fitList) {
  1429. Map<String, List<TacWorkerB>> map = new HashedMap();
  1430. fitList.forEach(tacWorkerB -> {
  1431. if (map.keySet().contains(tacWorkerB.getSex())) {
  1432. map.get(tacWorkerB.getSex()).add(tacWorkerB);
  1433. } else {
  1434. List<TacWorkerB> list = new ArrayList<>();
  1435. list.add(tacWorkerB);
  1436. map.put(tacWorkerB.getSex(), list);
  1437. }
  1438. });
  1439. if (map.get("男") == null || map.get("男").size() == 0) {
  1440. tacInspYearBatchGroup.setPris("性别原则不符和");
  1441. tacInspYearBatchGroup.setDataStat("1");
  1442. return b;
  1443. }
  1444. int index = Math.round(map.get("男").size());
  1445. return map.get("男").get(index == map.get("男").size() ? index - 1 : index);
  1446. }
  1447. private boolean calSexNum(int sexNum, TacInspPersAreaPris pris) {
  1448. if (pris.getSiNvPersNum() == null) {
  1449. return true;
  1450. }
  1451. if (pris.getSiNvPersNum() > 0) {
  1452. if (sexNum > 0) {
  1453. sexNum--;
  1454. return true;
  1455. }
  1456. return false;
  1457. }
  1458. return true;
  1459. }
  1460. /**
  1461. * @param tacInspYearBatchGroup 组对象
  1462. * @param currPersId 当前用户id
  1463. */
  1464. private void insertGroupPersList(List<TacWorkerB> list, TacInspYearBatchGroup tacInspYearBatchGroup, String currPersId) {
  1465. // for (int i = 0; i < map.get(roleType).size()/groupSize; i++) {
  1466. // insertGourpPers(list,tacInspYearBatchGroup,currPersId);
  1467. // }
  1468. // if (map.get(roleType).size() % groupSize > 0) {
  1469. // insertGourpPers(list,tacInspYearBatchGroup,currPersId);
  1470. // map.get(roleType).remove(0);
  1471. // }
  1472. insertGourpPers(list, tacInspYearBatchGroup, currPersId);
  1473. }
  1474. private void insertGroupPers(TacInspYearBatchGroup group, TacWorkerB b, String currPersId) {
  1475. TacInspYearBatchGroupPersParam persParam = new TacInspYearBatchGroupPersParam();
  1476. persParam.setYearBatchId(group.getYearBatchId());
  1477. persParam.setPersId(b.getId());
  1478. List<TacInspYearBatchGroupPers> groupPersDaoList = groupPersDao.findList(persParam);
  1479. if (groupPersDaoList != null) {
  1480. TacInspYearBatchGroupPers groupPers = groupPersDaoList.get(0);
  1481. groupPers.setGroupNm(group.getGroupNm());
  1482. groupPers.setGroupId(group.getId());
  1483. groupPers.setIsNotice("0");
  1484. groupPers.setIsSms("0");
  1485. groupPers.setIsJoin("0");
  1486. groupPers.setSendsmsTm(null);
  1487. groupPersDao.update(groupPers);
  1488. } else {
  1489. TacInspYearBatch batch = yearBatchDao.get(group.getYearBatchId());
  1490. TacInspYearBatchGroupPers groupPers = new TacInspYearBatchGroupPers();
  1491. groupPers.setId(UuidUtil.uuid());
  1492. groupPers.setYear(batch.getYear());
  1493. groupPers.setBatch(batch.getBatch());
  1494. groupPers.setYearBatchId(batch.getId());
  1495. groupPers.setRoleType(b.getRoleType());
  1496. groupPers.setPersId(b.getId());
  1497. groupPers.setCtPersId(currPersId);
  1498. groupPers.setInTm(new Date());
  1499. groupPers.setUpTm(new Date());
  1500. groupPers.setIsNotice("0");
  1501. groupPers.setIsSms("0");
  1502. groupPers.setIsJoin("0");
  1503. groupPers.setDataStat("0");
  1504. groupPers.setGroupNm(group.getGroupNm());
  1505. groupPers.setGroupId(group.getId());
  1506. groupPersDao.insert(groupPers);
  1507. }
  1508. if (StringUtils.isNotBlank(group.getPris())) {
  1509. this.groupService.update(group);
  1510. }
  1511. }
  1512. private void insertGourpPers(List<TacWorkerB> list, TacInspYearBatchGroup tacInspYearBatchGroup, String currPersId) {
  1513. if (list == null || list.size() == 0) {
  1514. return;
  1515. }
  1516. int index = Math.round(list.size());
  1517. TacWorkerB b = list.get(index == list.size() ? index - 1 : index);
  1518. insertGroupPers(tacInspYearBatchGroup, b, currPersId);
  1519. list.remove(b);
  1520. }
  1521. @Override
  1522. public List<TacWorkerB> countPersBatch(TacWorkerBParam tacWorkerBParam) {
  1523. return tacWorkerBDao.countPersBatch(tacWorkerBParam);
  1524. }
  1525. @Override
  1526. public List<TacWorkerB> getWorkerbsListExpId(TacWorkerBParam tacWorkerBParam) {
  1527. List<TacWorkerB> list = tacWorkerBDao.getWorkerbsListById(tacWorkerBParam);
  1528. if (list.size() > 0) {
  1529. for (TacWorkerB workerB : list) {
  1530. TacInspYearBatchGroupPersParam groupPersParam = new TacInspYearBatchGroupPersParam();
  1531. groupPersParam.setPersId(workerB.getId());
  1532. groupPersParam.setYearBatchId(tacWorkerBParam.getYearBatchId());
  1533. groupPersParam.setProvince(tacWorkerBParam.getProvince());
  1534. List<TacInspYearBatchGroupPers> groupPersList = groupPersDao.findList(groupPersParam);
  1535. List<TacWorkerType> roleTypeList = new ArrayList<>();
  1536. for (TacInspYearBatchGroupPers groupPers : groupPersList) {
  1537. //去除重复的角色
  1538. if(cn.com.goldenwater.dcproj.utils.StringUtils.isEmpty(roleTypeList.stream().filter(f->groupPers.getRoleType().equals(f.getValue())).collect(Collectors.toList()) )){
  1539. TacWorkerType tacWorkerType = new TacWorkerType();
  1540. tacWorkerType.setValue(groupPers.getRoleType());
  1541. roleTypeList.add(tacWorkerType);
  1542. }
  1543. }
  1544. workerB.setRoleTypeList(roleTypeList);
  1545. }
  1546. }
  1547. return list;
  1548. }
  1549. @Override
  1550. public List<TacWorkerB> getWorkerList(TacWorkerBParam tacWorkerBParam) {
  1551. List<TacWorkerB> list = tacWorkerBDao.getWorkerList(tacWorkerBParam);
  1552. if (list.size() > 0) {
  1553. for (TacWorkerB workerB : list) {
  1554. TacWorkerTypeParam typeParam = new TacWorkerTypeParam();
  1555. typeParam.setType("1");
  1556. typeParam.setWorkerid(workerB.getId());
  1557. workerB.setRoleTypeList(tacWorkerTypeDao.findList(typeParam));
  1558. }
  1559. }
  1560. return list;
  1561. }
  1562. @Override
  1563. public List<TacCountDto> countRoleNew(TacWorkerBParam tacWorkerBParam) {
  1564. return tacWorkerBDao.countByRoleNew(tacWorkerBParam);
  1565. }
  1566. @Override
  1567. public List<TacWorkerB> getWorkerListByPris(TacInspPersAreaPris persAreaPris) {
  1568. List<TacWorkerB> result = new ArrayList<>();
  1569. TacWorkerBParam tacWorkerBParam = new TacWorkerBParam();
  1570. tacWorkerBParam.setYearBatchId(persAreaPris.getYearBatchId());
  1571. String isAll = "";
  1572. String isNotAll = "";
  1573. if ("1".equals(persAreaPris.getIsFit())) {
  1574. if ("1".endsWith(persAreaPris.getIsA())) {
  1575. isAll = "or is_a = '1'" + isAll;
  1576. } else {
  1577. isNotAll = "or is_a != '1'";
  1578. }
  1579. if ("1".endsWith(persAreaPris.getIsB())) {
  1580. isAll = "or is_B = '1'" + isAll;
  1581. } else {
  1582. isNotAll = "or is_B != '1'";
  1583. }
  1584. if ("1".endsWith(persAreaPris.getIsC())) {
  1585. isAll = "or is_c = '1'" + isAll;
  1586. } else {
  1587. isNotAll = "or is_c != '1'";
  1588. }
  1589. if ("1".endsWith(persAreaPris.getIsD())) {
  1590. isAll = "or is_d = '1'" + isAll;
  1591. } else {
  1592. isNotAll = "or is_d != '1'";
  1593. }
  1594. if ("1".endsWith(persAreaPris.getIsE())) {
  1595. isAll = "or is_e = '1'" + isAll;
  1596. } else {
  1597. isNotAll = "or is_e != '1'";
  1598. }
  1599. if (isAll.length() > 0) {
  1600. isAll = isAll.substring(2);
  1601. }
  1602. if (isNotAll.length() > 0) {
  1603. isNotAll = isNotAll.substring(2);
  1604. }
  1605. }
  1606. tacWorkerBParam.setIsAll(isAll);
  1607. if ("1".equals(persAreaPris.getIsCommon())) {
  1608. result.addAll(getWorkerByGourpType(tacWorkerBParam, persAreaPris, "1"));
  1609. }
  1610. if ("1".equals(persAreaPris.getIsProbation())) {
  1611. result.addAll(getWorkerByGourpType(tacWorkerBParam, persAreaPris, "7"));
  1612. }
  1613. //择优选择
  1614. if ("1".equals(persAreaPris.getIsPick())) {
  1615. result.addAll(getWorkerByGourpType(tacWorkerBParam, persAreaPris, "4"));
  1616. result.addAll(getWorkerByGourpType(tacWorkerBParam, persAreaPris, "5"));
  1617. }
  1618. //拼接新人
  1619. if ("1".equals(persAreaPris.getIsNew())) {
  1620. tacWorkerBParam.setNewSize(persAreaPris.getNewSize());
  1621. getNewWorker(tacWorkerBParam, persAreaPris, "8", result);
  1622. }
  1623. for (TacWorkerB workerB : result) {
  1624. TacInspYearBatch batch = yearBatchDao.get(tacWorkerBParam.getYearBatchId());
  1625. TacInspYearBatchGroupPers groupPers = new TacInspYearBatchGroupPers();
  1626. groupPers.setId(UuidUtil.uuid());
  1627. groupPers.setYear(batch.getYear());
  1628. groupPers.setBatch(batch.getBatch());
  1629. groupPers.setYearBatchId(batch.getId());
  1630. groupPers.setRoleType(workerB.getRoleType());
  1631. groupPers.setPersId(workerB.getId());
  1632. groupPers.setCtPersId(persAreaPris.getPersId());
  1633. groupPers.setInTm(new Date());
  1634. groupPers.setUpTm(new Date());
  1635. groupPers.setIsNotice("0");
  1636. groupPers.setIsSms("0");
  1637. groupPers.setIsJoin("0");
  1638. groupPers.setDataStat("0");
  1639. groupPersDao.insert(groupPers);
  1640. }
  1641. return result;
  1642. }
  1643. @Override
  1644. public List<TacWorkerB> insertTacWorkerB(TacWorkerBDto bDto) {
  1645. if (bDto == null) {
  1646. return null;
  1647. }
  1648. TacInspYearBatch batch = yearBatchDao.get(bDto.getYearBatchId());
  1649. if (batch == null) {
  1650. return null;
  1651. }
  1652. for (TacWorkerB workerB : bDto.getWorkerBList()) {
  1653. if (workerB.getRoleTypeList() == null) {
  1654. continue;
  1655. }
  1656. TacInspYearBatchGroupPers groupPers = new TacInspYearBatchGroupPers();
  1657. // TacInspYearBatchGroupParam batchGroupParam=new TacInspYearBatchGroupParam();
  1658. // batchGroupParam.setYear(batch.getYear());
  1659. // batchGroupParam.setBatch(batch.getBatch());
  1660. // batchGroupParam.setYearBatchId(batch.getId());
  1661. // TacInspYearBatchGroup yearBatchGroup=groupService.getBy(batchGroupParam);
  1662. groupPers.setYear(batch.getYear());
  1663. groupPers.setBatch(batch.getBatch());
  1664. groupPers.setYearBatchId(batch.getId());
  1665. groupPers.setPersId(workerB.getId());
  1666. groupPers.setCtPersId(bDto.getPersId());
  1667. groupPers.setInTm(new Date());
  1668. // if(yearBatchGroup!=null) {
  1669. // groupPers.setGroupId(yearBatchGroup.getId());
  1670. // }
  1671. groupPers.setUpTm(new Date());
  1672. groupPers.setIsNotice("0");
  1673. groupPers.setIsSms("0");
  1674. groupPers.setIsJoin("0");
  1675. groupPers.setDataStat("0");
  1676. for (TacWorkerType tacWorkerType : workerB.getRoleTypeList()) {
  1677. groupPers.setId(UuidUtil.uuid());
  1678. groupPers.setRoleType(tacWorkerType.getValue());
  1679. groupPersDao.insert(groupPers);
  1680. }
  1681. }
  1682. return bDto.getWorkerBList();
  1683. }
  1684. @Override
  1685. public List<TacWorkerB> getNotDisPersList(TacWorkerBParam tacWorkerBParam) {
  1686. List<TacWorkerB> list = null;
  1687. if (tacWorkerBParam.getWorkerList() != null && tacWorkerBParam.getWorkerList().size() > 0) {
  1688. list = tacWorkerBParam.getWorkerList();
  1689. } else {
  1690. TacWorkerBParam param = new TacWorkerBParam();
  1691. param.setGroupId(tacWorkerBParam.getGroupId());
  1692. param.setProvince(tacWorkerBParam.getProvince());
  1693. param.setRoleType(tacWorkerBParam.getRoleType());
  1694. list = tacWorkerBDao.getWorkerbsListById(param);
  1695. }
  1696. StringBuilder sb = new StringBuilder("");
  1697. list.forEach(tacWorkerB -> {
  1698. sb.append("'").append(tacWorkerB.getId()).append("'").append(",");
  1699. });
  1700. if (sb.length() > 1) {
  1701. tacWorkerBParam.setWorkerIds(sb.substring(0, sb.length() - 1));
  1702. }
  1703. List<TacWorkerB> tacWorkerBS = tacWorkerBDao.getNotDisPersList(tacWorkerBParam);
  1704. for (TacWorkerB tacWorkerB : tacWorkerBS) {
  1705. if (tacWorkerB.getRoleTypeList() == null) {
  1706. List<TacWorkerType> roleTypeList = new ArrayList<>();
  1707. TacWorkerType tacWorkerType = new TacWorkerType();
  1708. tacWorkerType.setValue(tacWorkerBParam.getRoleType());
  1709. roleTypeList.add(tacWorkerType);
  1710. tacWorkerB.setRoleTypeList(roleTypeList);
  1711. }
  1712. }
  1713. return tacWorkerBS;
  1714. }
  1715. @Override
  1716. public List<TacWorkerB> getObjTacWorkerbList(TacWorkerBParam tacWorkerBParam) {
  1717. return tacWorkerBDao.getObjTacWorkerbList(tacWorkerBParam);
  1718. }
  1719. @Override
  1720. public PageInfo<TacWorkerB> getObjTacWorkerbPage(TacWorkerBParam tacWorkerBParam) {
  1721. PageHelper.startPage(tacWorkerBParam);
  1722. List<TacWorkerB> list = tacWorkerBDao.getObjTacWorkerbList(tacWorkerBParam);
  1723. PageInfo<TacWorkerB> pageInfo = new PageInfo<>(list);
  1724. return pageInfo;
  1725. }
  1726. @Override
  1727. public PageInfo<TacWorkerB> getWorkerPage(TacWorkerBParam tacWorkerBParam) {
  1728. PageHelper.startPage(tacWorkerBParam);
  1729. List<TacWorkerB> list = tacWorkerBDao.getWorkerList(tacWorkerBParam);
  1730. if (list.size() > 0) {
  1731. for (TacWorkerB workerB : list) {
  1732. TacWorkerTypeParam typeParam = new TacWorkerTypeParam();
  1733. typeParam.setType("1");
  1734. typeParam.setWorkerid(workerB.getId());
  1735. workerB.setRoleTypeList(tacWorkerTypeDao.findList(typeParam));
  1736. }
  1737. }
  1738. PageInfo<TacWorkerB> pageInfo = new PageInfo<>(list);
  1739. return pageInfo;
  1740. }
  1741. @Override
  1742. public boolean updateWorkerbList(TacWorkerBDto dto) {
  1743. if (dto == null) {
  1744. return false;
  1745. }
  1746. if (dto.getWorkerBList() != null && dto.getWorkerBList().size() > 0) {
  1747. dto.getWorkerBList().forEach(tacWorkerB -> {
  1748. if (StringUtils.isNotBlank(dto.getGroupType())) {
  1749. tacWorkerB.setGroupType(dto.getGroupType());
  1750. }
  1751. if (StringUtils.isNotBlank(dto.getIsTraining())) {
  1752. tacWorkerB.setIsTraining(dto.getIsTraining());
  1753. }
  1754. tacWorkerBDao.update(tacWorkerB);
  1755. });
  1756. }
  1757. return true;
  1758. }
  1759. @Override
  1760. public PageInfo<TacWorkerbAuditDto> countWorkerAudit(TacWorkerBParam tacWorkerBParam) {
  1761. PageHelper.startPage(tacWorkerBParam);
  1762. parseParam(tacWorkerBParam);
  1763. List<TacWorkerbAuditDto> list = tacWorkerBDao.countWorkerAudit(tacWorkerBParam);
  1764. PageInfo pageInfo = new PageInfo(list);
  1765. return pageInfo;
  1766. }
  1767. @Override
  1768. public int downWorkerExcel(TacWorkerBDto dto, HttpServletResponse response) {
  1769. List<TacWorkerB> list = new ArrayList<>();
  1770. if (dto != null) {
  1771. list = dto.getWorkerBList();
  1772. }
  1773. if (list != null && list.size() > 0) {
  1774. fieldFormat(list);
  1775. List<Map<String, Object>> map = listToMap(list);
  1776. try {
  1777. ExportUtil.download(response, map, templatePath + "/人员列表.xls");
  1778. } catch (IOException e) {
  1779. return 0;
  1780. }
  1781. } else {
  1782. try {
  1783. ExportUtil.download(response, new ArrayList<Map<String, Object>>(), templatePath + "/人员列表.xls");
  1784. } catch (IOException e) {
  1785. return 0;
  1786. }
  1787. }
  1788. return 1;
  1789. }
  1790. private List<Map<String, Object>> listToMap(List<TacWorkerB> list) {
  1791. List<Map<String, Object>> mapList = new ArrayList<>();
  1792. if (list == null || list.size() == 0) {
  1793. return mapList;
  1794. }
  1795. list.forEach(tacWorkerB -> {
  1796. Map<String, Object> map = ExportUtil.objToMap(tacWorkerB, true);
  1797. if (map != null) {
  1798. mapList.add(map);
  1799. }
  1800. });
  1801. return mapList;
  1802. }
  1803. @Override
  1804. public Map<String, Object> uploadWorkerExcel(MultipartFile file, TacWorkerBParam tacWorkerBParam) {
  1805. List<Row> rowList = ExportUtil.getRowListByFile(file);
  1806. List<TacWorkerB> list = new ArrayList<>();
  1807. if (rowList.size() > 2) {
  1808. List<Map<String, Object>> mapList = ExportUtil.rowToMap(rowList, 1);
  1809. if (mapList.size() > 0) {
  1810. list = ExportUtil.mapToObj(mapList, TacWorkerB.class, true);
  1811. }
  1812. }
  1813. if (list.size() > 0) {
  1814. fieldFormat(list);
  1815. list.forEach(tacWorkerB -> {
  1816. if (StringUtils.isBlank(tacWorkerB.getId())) {
  1817. TacWorkerBParam param = new TacWorkerBParam();
  1818. param.setMobilenumb(tacWorkerB.getMobilenumb());
  1819. List<TacWorkerB> bs = tacWorkerBDao.findList(param);
  1820. if (bs.size() == 1) {
  1821. tacWorkerB.setId(bs.get(0).getId());
  1822. tacWorkerBDao.update(tacWorkerB);
  1823. } else if (bs.size() == 0) {
  1824. tacWorkerBDao.insert(tacWorkerB);
  1825. }
  1826. } else {
  1827. tacWorkerBDao.update(tacWorkerB);
  1828. }
  1829. });
  1830. }
  1831. Map<String, Object> map = new HashedMap();
  1832. map.put("success", String.valueOf(list.size()));
  1833. map.put("fail", String.valueOf(rowList.size() - list.size() - 2));
  1834. return map;
  1835. }
  1836. @Override
  1837. public PageInfo<TacWorkerBCountDto> getWorkerNotJoinCount(TacWorkerBParam tacWorkerBParam) {
  1838. parseParam(tacWorkerBParam);
  1839. PageHelper.startPage(tacWorkerBParam);
  1840. List<TacWorkerBCountDto> list = tacWorkerBDao.getWorkerNotJoinCountList(tacWorkerBParam);
  1841. PageInfo<TacWorkerBCountDto> pageInfo = new PageInfo<>(list);
  1842. return pageInfo;
  1843. }
  1844. @Override
  1845. public int downWorkerNotJoinExcel(TacWorkerBParam param, HttpServletResponse response) {
  1846. parseParam(param);
  1847. List<TacWorkerBCountDto> list = tacWorkerBDao.getWorkerNotJoinCountList(param);
  1848. List<String> columns = new ArrayList<>();
  1849. columns.add("id");
  1850. ExportUtil.exportExcel(list, response, "未参加稽察人员列表", columns, TacWorkerBCountDto.class);
  1851. return 0;
  1852. }
  1853. @Value("${api.url}")
  1854. private String apiUrl;
  1855. @Override
  1856. public String sendMessage(TacWorkerBParam tacWorkerBParam) throws Exception {
  1857. TacInspYearBatchGroupPersParam persParam = new TacInspYearBatchGroupPersParam();
  1858. persParam.setYearBatchId(tacWorkerBParam.getYearBatchId());
  1859. List<TacInspYearBatchGroupPers> list = groupPersDao.findList(persParam);
  1860. if (list.size() > 0) {
  1861. boolean flag = false;
  1862. Base64.Encoder encoder = Base64.getEncoder();
  1863. Map<String, String> params = new HashMap<String, String>();
  1864. params.put("apiKey", apiKey);
  1865. params.put("apiSecrect", apiSecrect);
  1866. params.put("signName", "金水云平台");
  1867. for (TacInspYearBatchGroupPers groupPers : list) {
  1868. if ("1".equals(groupPers.getIsSms())) {
  1869. continue;
  1870. }
  1871. if (StringUtils.isBlank(groupPers.getPhone())) {
  1872. continue;
  1873. }
  1874. if (!flag) {
  1875. flag = true;
  1876. }
  1877. String message = groupPers.getPhone() + groupPers.getYearBatchId();
  1878. String code = encoder.encodeToString(message.getBytes());
  1879. params.put("mobile", groupPers.getPhone());
  1880. HttpClientUtils.simplePostInvoke(apiUrl+"/gateway/api/sms/send", params);
  1881. groupPers.setIsSms("1");
  1882. groupPers.setIsNotice("1");
  1883. groupPersDao.update(groupPers);
  1884. }
  1885. if (flag && tacWorkerBParam.getHour() != 0) {
  1886. //创建定时任务
  1887. Timer timer = new Timer("发送通知定时任务");
  1888. TimerTask task = new TimerTask() {
  1889. @Override
  1890. public void run() {
  1891. if (StringUtils.isNotBlank(tacWorkerBParam.getYearBatchId())) {
  1892. List<TacInspYearBatchGroupPers> list = groupPersDao.findList(persParam);
  1893. if (list.size() > 0) {
  1894. list.forEach(groupPers -> {
  1895. if ("1".equals(groupPers.getIsSms())) {
  1896. if ("0".equals(groupPers.getIsJoin()) || StringUtils.isBlank(groupPers.getIsJoin())) {
  1897. //回复超时
  1898. } else if ("2".equals(groupPers.getIsJoin())) {
  1899. //确认不参加
  1900. }
  1901. }
  1902. });
  1903. }
  1904. }
  1905. }
  1906. };
  1907. LocalDateTime dt = LocalDateTime.now();
  1908. dt.minusHours(tacWorkerBParam.getHour());
  1909. ZoneId zone = ZoneId.systemDefault();
  1910. String time = dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
  1911. redisTemplate.opsForValue().set(tacWorkerBParam.getYearBatchId(), time, tacWorkerBParam.getHour(), TimeUnit.HOURS);
  1912. Instant instant = dt.atZone(zone).toInstant();
  1913. Date date = Date.from(instant);
  1914. timer.schedule(task, date);
  1915. }
  1916. }
  1917. return SmsCodeEnum.SUCCESS.getKey();
  1918. }
  1919. @Autowired
  1920. private GwComFileService gwComFileService;
  1921. @Value("${getFile.prefix}")
  1922. public String prefix;
  1923. @Value("${web.upload-path}")
  1924. public String fileDir;
  1925. @Override
  1926. public int uploadBio(MultipartFile file, TacWorkerBParam tacWorkerBParam) throws Exception {
  1927. List<GwComFile> list = FileUtil.getFileList(file, prefix, fileDir);
  1928. if (list != null && list.size() > 0) {
  1929. list.forEach(gwComFile -> {
  1930. String persNameAndIdNum = gwComFile.getFileName();
  1931. String persName = persNameAndIdNum.split("-")[0];
  1932. String idNum = persNameAndIdNum.split("-")[1].substring(0, persNameAndIdNum.split("-")[1].indexOf("."));
  1933. TacWorkerBParam param = new TacWorkerBParam();
  1934. param.setIdNo(idNum);
  1935. param.setName(persName);
  1936. param.setProvince(tacWorkerBParam.getProvince());
  1937. TacWorkerB b = tacWorkerBDao.getBy(param);
  1938. if (b != null) {
  1939. List<GwComFile> gwComFiles = gwComFileService.findFileByBiz(b.getId());
  1940. if (gwComFiles.size() > 0) {
  1941. //删除关联简历
  1942. GwComFileParam gwComFileParam = new GwComFileParam();
  1943. gwComFileParam.setBizId(b.getId());
  1944. }
  1945. gwComFile.setBizId(b.getId());
  1946. }
  1947. });
  1948. }
  1949. return 0;
  1950. }
  1951. @Override
  1952. public List<TacWorkerB> findPerInZLOrTPY(String currentPersId) {
  1953. return tacWorkerBDao.findPerInZLOrTPY(currentPersId);
  1954. }
  1955. @Autowired
  1956. private BisInspPersOrgService persOrgService;
  1957. @Autowired
  1958. private RoleDao roleDao;
  1959. @Autowired
  1960. private UserRoleDao userRoleDao;
  1961. @Override
  1962. public int makeData(String orgId) {
  1963. String province = olBisInspOrgService.getRlProvince(orgId);
  1964. List<TacWorkerB> workerBList = tacWorkerBDao.findBlankList(province);
  1965. for (TacWorkerB workerB : workerBList) {
  1966. BisInspAllRlationPersParam rlationPersParam = new BisInspAllRlationPersParam();
  1967. rlationPersParam.setMobilenumb(workerB.getMobilenumb());
  1968. BisInspAllRlationPers allRlationPers = persDao.getBy(rlationPersParam);
  1969. if (allRlationPers == null) {
  1970. allRlationPers = new BisInspAllRlationPers();
  1971. allRlationPers.setGuid(UuidUtil.uuid());
  1972. allRlationPers.setPersType("4");
  1973. allRlationPers.setAdmDuty(workerB.getDuty());
  1974. allRlationPers.setEmail(workerB.getEmail());
  1975. allRlationPers.setBornDate(workerB.getBirthdate());
  1976. allRlationPers.setMobilenumb(workerB.getMobilenumb());
  1977. OlBisInspOrg olBisInspOrg = olBisInspOrgService.get(orgId);
  1978. if (olBisInspOrg != null) {
  1979. allRlationPers.setOrgNm(olBisInspOrg.getOrgNm());
  1980. }
  1981. allRlationPers.setPermission("0");
  1982. allRlationPers.setPwd("JinShui@433");
  1983. allRlationPers.setOrgId(orgId);
  1984. allRlationPers.setOwnerSystem("DC_ALL");
  1985. allRlationPers.setPersName(workerB.getName());
  1986. BisInspPersOrg inspPersOrg = new BisInspPersOrg();
  1987. inspPersOrg.setOrgId(allRlationPers.getOrgId());
  1988. inspPersOrg.setPersId(allRlationPers.getGuid());
  1989. if (StringUtils.isNotBlank(allRlationPers.getPersType())) {
  1990. inspPersOrg.setUserType(allRlationPers.getPersType());
  1991. } else {
  1992. inspPersOrg.setUserType(AdCodeLabel.GROUP_LEADER);
  1993. }
  1994. addRole(orgId, allRlationPers, workerB);
  1995. allRlationPers.setCollTime(new Date());
  1996. persOrgService.insert(inspPersOrg);
  1997. persDao.insert(allRlationPers);
  1998. }
  1999. workerB.setLoginId(allRlationPers.getGuid());
  2000. tacWorkerBDao.update(workerB);
  2001. }
  2002. return 0;
  2003. }
  2004. @Override
  2005. public int insertIntoData(TacWorkerType workerType) {
  2006. TacWorkerBParam param = new TacWorkerBParam();
  2007. List<TacWorkerB> list = tacWorkerBDao.findList(param);
  2008. for (TacWorkerB workerB : list) {
  2009. if (StringUtils.isBlank(workerType.getType())) {
  2010. continue;
  2011. }
  2012. if ("1".equals(workerType.getType())) {
  2013. if (StringUtils.isBlank(workerB.getRoleType())) {
  2014. continue;
  2015. }
  2016. TacWorkerType wt = new TacWorkerType();
  2017. String[] roltypes = null;
  2018. if (workerB.getRoleType().contains(",")) {
  2019. roltypes = workerB.getRoleType().split(",");
  2020. } else {
  2021. roltypes = new String[]{workerB.getRoleType()};
  2022. }
  2023. for (String roltype : roltypes) {
  2024. wt.setId(UuidUtil.uuid());
  2025. wt.setWorkerid(workerB.getId());
  2026. wt.setType(workerType.getType());
  2027. wt.setValue(roltype);
  2028. tacWorkerTypeDao.insert(wt);
  2029. }
  2030. }
  2031. }
  2032. return 0;
  2033. }
  2034. @Override
  2035. public PageInfo<TacWorkerPerDto> listByList(Map<String, String> paramMap) {
  2036. PageHelper.startPage(MapUtils.getIntValue(paramMap, "pageNum"), MapUtils.getIntValue(paramMap, "pageSize"));
  2037. String province = olBisInspOrgService.getRlProvince(paramMap.get("orgId"));
  2038. paramMap.put("province",province);
  2039. List<TacWorkerPerDto> persList = tacWorkerBDao.listByMap(paramMap);
  2040. for (TacWorkerPerDto tacWorkerPerDto : persList) {
  2041. //手机号脱敏处理
  2042. tacWorkerPerDto.setMobilenumb(UserMsgSectrityUtils.blurPhoneNotExc(tacWorkerPerDto.getMobilenumb()));
  2043. }
  2044. return new PageInfo<>(persList);
  2045. }
  2046. @Override
  2047. public List<TacWorkerB> findListExist(TacWorkerB param) {
  2048. return tacWorkerBDao.findListExist(param);
  2049. }
  2050. }