6520f43b8ddf45d3562b5f43b46fa622b20d89fc.svn-base 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. package cn.com.goldenwater.dcproj.service.impl.tac;
  2. import cn.com.goldenwater.core.model.BaseBean;
  3. import cn.com.goldenwater.core.service.AbstractCrudService;
  4. import cn.com.goldenwater.dcproj.annotation.NotExport;
  5. import cn.com.goldenwater.dcproj.constValue.BisInspEnum;
  6. import cn.com.goldenwater.dcproj.constValue.SplitValue;
  7. import cn.com.goldenwater.dcproj.dao.BisInspPblmPlistDao;
  8. import cn.com.goldenwater.dcproj.dao.TacProvincePblmMendInfoDao;
  9. import cn.com.goldenwater.dcproj.dto.TacProvincePblmInfoFromDto;
  10. import cn.com.goldenwater.dcproj.model.*;
  11. import cn.com.goldenwater.dcproj.param.BisInspLocalConfigParam;
  12. import cn.com.goldenwater.dcproj.param.TacProvincePblmMendInfoParam;
  13. import cn.com.goldenwater.dcproj.service.*;
  14. import cn.com.goldenwater.dcproj.util.BisInspPblmPlistConventUtil;
  15. import cn.com.goldenwater.dcproj.util.CheckUtil;
  16. import cn.com.goldenwater.dcproj.util.FileUtil;
  17. import cn.com.goldenwater.dcproj.utils.DateUtils;
  18. import cn.com.goldenwater.dcproj.utils.InspPblmUtils;
  19. import cn.com.goldenwater.dcproj.utils.expExcel.ExcelExport;
  20. import cn.com.goldenwater.dcproj.utils.expExcel.ExportAbstract;
  21. import cn.com.goldenwater.dcproj.utils.expExcel.ExportUtil;
  22. import cn.com.goldenwater.id.util.UuidUtil;
  23. import cn.com.goldenwater.target.CheckException;
  24. import com.github.pagehelper.PageHelper;
  25. import com.github.pagehelper.PageInfo;
  26. import com.workflow.bpm.api.bpmservices.ActionConstant;
  27. import com.workflow.bpm.api.bpmservices.BpmProcessInstService;
  28. import com.workflow.bpm.api.bpmservices.BpmTaskService;
  29. import com.workflow.bpm.api.bpmservices.co.processinstance.ProcessStartCO;
  30. import com.workflow.bpm.api.bpmservices.co.taskinst.QueryTaskActionCO;
  31. import com.workflow.common.struct.res.impl.APIResult;
  32. import io.swagger.annotations.ApiModelProperty;
  33. import org.apache.commons.collections.CollectionUtils;
  34. import org.apache.commons.collections.MapUtils;
  35. import org.apache.commons.lang3.ArrayUtils;
  36. import org.apache.commons.lang3.StringUtils;
  37. import org.slf4j.Logger;
  38. import org.slf4j.LoggerFactory;
  39. import org.springframework.beans.factory.annotation.Autowired;
  40. import org.springframework.beans.factory.annotation.Value;
  41. import org.springframework.stereotype.Service;
  42. import org.springframework.transaction.annotation.Transactional;
  43. import javax.servlet.http.HttpServletResponse;
  44. import java.io.*;
  45. import java.lang.reflect.Field;
  46. import java.nio.charset.StandardCharsets;
  47. import java.util.*;
  48. import static cn.com.goldenwater.dcproj.utils.BeanUtil.transBean2Map;
  49. import static cn.com.goldenwater.dcproj.utils.expExcel.ExportUtil.COMMONLIST_AND_OPEN_ANNOTATION;
  50. /**
  51. * @author lhc
  52. * @date 2021-6-2
  53. */
  54. @Service
  55. @Transactional
  56. public class TacProvincePblmMendInfoServiceImpl extends AbstractCrudService<TacProvincePblmMendInfo, TacProvincePblmMendInfoParam> implements TacProvincePblmMendInfoService {
  57. @Autowired
  58. private TacProvincePblmMendInfoDao tacProvincePblmMendInfoDao;
  59. @Autowired
  60. private BisInspBpmOrgService bisInspBpmOrgService;
  61. @Autowired
  62. private BpmProcessInstService bpmProcessInstService;
  63. @Autowired
  64. private BpmTaskService bpmTaskService;
  65. @Autowired
  66. private TacProvincePblmInfoService tacProvincePblmInfoService;
  67. @Autowired
  68. private TacPawpRgstrService tacPawpRgstrService;
  69. @Autowired
  70. private AttAdBaseService attAdBaseService;
  71. @Autowired
  72. private BisInspPblmPlistDao bisInspPblmPlistDao;
  73. @Autowired
  74. private BisInspLocalConfigService bisInspLocalConfigService;
  75. @Autowired
  76. private GwComFileService gwComFileService;
  77. @Value("${export.templatePath}")
  78. private String templatePath;
  79. @Value("${web.upload-path}")
  80. private String uploadPath;
  81. private Logger logger = LoggerFactory.getLogger(TacProvincePblmMendInfoServiceImpl.class);
  82. public TacProvincePblmMendInfoServiceImpl(TacProvincePblmMendInfoDao tacProvincePblmMendInfoDao) {
  83. super(tacProvincePblmMendInfoDao);
  84. this.tacProvincePblmMendInfoDao = tacProvincePblmMendInfoDao;
  85. }
  86. @Override
  87. public int insert(TacProvincePblmMendInfo tacProvincePblmMendInfo) {
  88. tacProvincePblmMendInfo.setSetpPblmId(tacProvincePblmMendInfo.getPblmId());
  89. String uuid = UuidUtil.uuid(); // 生成uuid
  90. tacProvincePblmMendInfo.setId(uuid);
  91. tacProvincePblmMendInfo.setIntm(new Date());
  92. tacProvincePblmMendInfo.setUptm(new Date());
  93. tacProvincePblmMendInfo.setDataStat("0");
  94. tacProvincePblmMendInfo.setIsStart("0");
  95. tacProvincePblmMendInfo.setPblmOut("0");
  96. tacProvincePblmMendInfo.setCrtState("0");
  97. tacProvincePblmMendInfo.setIsRect("0");
  98. //根据 问题id补充工程行政区代码及工程名称
  99. String rgstrId = tacProvincePblmMendInfo.getRgstrId();
  100. TacPawpRgstr tacPawpRgstr = tacPawpRgstrService.get(rgstrId);
  101. tacProvincePblmMendInfo.setAdCode(tacPawpRgstr.getAdCode());
  102. tacProvincePblmMendInfo.setPrjName(tacPawpRgstr.getName());
  103. tacProvincePblmMendInfo.setPrjtId(tacPawpRgstr.getObjId());
  104. tacProvincePblmMendInfo.setGroupId(tacPawpRgstr.getGroupId());
  105. tacProvincePblmMendInfo.setLocation(attAdBaseService.getByAdcode(tacPawpRgstr.getAdCode()).getAdFullName());
  106. return this.tacProvincePblmMendInfoDao.insert(tacProvincePblmMendInfo);
  107. }
  108. @Override
  109. public int update(TacProvincePblmMendInfo tacProvincePblmMendInfo) {
  110. tacProvincePblmMendInfo.setUptm(new Date());
  111. return this.tacProvincePblmMendInfoDao.update(tacProvincePblmMendInfo);
  112. }
  113. @Override
  114. public int delete(String id) {
  115. return this.tacProvincePblmMendInfoDao.delete(id);
  116. }
  117. @Override
  118. public PageInfo<TacProvincePblmMendInfo> getList(TacProvincePblmMendInfoParam tacProvincePblmMendInfoParam) {
  119. if (StringUtils.isNotBlank(tacProvincePblmMendInfoParam.getArea())) {
  120. //截取行政区划
  121. }
  122. PageHelper.startPage(tacProvincePblmMendInfoParam);
  123. List<TacProvincePblmMendInfo> list = this.tacProvincePblmMendInfoDao.getList(tacProvincePblmMendInfoParam);
  124. PageInfo<TacProvincePblmMendInfo> pageInfo = new PageInfo<>(list);
  125. for (TacProvincePblmMendInfo tacProvincePblmMendInfo : pageInfo.getList()) {
  126. //补充省市县
  127. if (tacProvincePblmMendInfo.getLocation() != null) {
  128. if (tacProvincePblmMendInfo.getLocation().contains(SplitValue.HENG_SPLIT)) {
  129. String[] split = tacProvincePblmMendInfo.getLocation().split(SplitValue.HENG_SPLIT);
  130. if (split.length == 3) {
  131. tacProvincePblmMendInfo.setProvince(split[0]);
  132. tacProvincePblmMendInfo.setCity(split[1]);
  133. tacProvincePblmMendInfo.setCounty(split[2]);
  134. }
  135. if (split.length == 2) {
  136. tacProvincePblmMendInfo.setProvince(split[0]);
  137. tacProvincePblmMendInfo.setCity(split[1]);
  138. tacProvincePblmMendInfo.setCounty("");
  139. }
  140. } else {
  141. tacProvincePblmMendInfo.setProvince(tacProvincePblmMendInfo.getLocation());
  142. }
  143. }
  144. // 查询
  145. List<Map<String, String>> bpmDataIdList = bisInspPblmPlistDao.getBpmDataId(tacProvincePblmMendInfo.getId(), tacProvincePblmMendInfoParam.getOrgId(), tacProvincePblmMendInfoParam.getProvince());
  146. if (CollectionUtils.isNotEmpty(bpmDataIdList)) {
  147. Map<String, String> bpmData = bpmDataIdList.get(0);
  148. tacProvincePblmMendInfo.setTaskInstId(bpmData.get("taskInstId"));
  149. tacProvincePblmMendInfo.setProcInstId(bpmData.get("procInstId"));
  150. tacProvincePblmMendInfo.setProcTypeName("稽察-" + bpmData.get("procTypeName"));
  151. }
  152. }
  153. return pageInfo;
  154. }
  155. /**
  156. * 是否直管县
  157. *
  158. * @param objAdCode
  159. * @return
  160. */
  161. public Boolean isLocalAd(String objAdCode) {
  162. BisInspLocalConfigParam bisInspLocalConfigParam = new BisInspLocalConfigParam();
  163. bisInspLocalConfigParam.setAdCode(objAdCode);
  164. List<BisInspLocalConfig> bisInspLocalConfigs = bisInspLocalConfigService.findList(bisInspLocalConfigParam);
  165. if (bisInspLocalConfigs != null && bisInspLocalConfigs.size() > 0) {
  166. return true;
  167. } else {
  168. return false;
  169. }
  170. }
  171. @Override
  172. public boolean saveFormsAndStartFlow(TacProvincePblmInfoFromDto form, String userId, String orgId, String province) {
  173. TacProvincePblmMendInfo tacProvincePblmMendInfo = tacProvincePblmMendInfoDao.get(form.getPblmPlist().getId());
  174. CheckUtil.notNull(tacProvincePblmMendInfo, "数据异常!");
  175. CheckUtil.check(!"1".equals(tacProvincePblmMendInfo.getIsStart()), "工作流已经启动,请勿重复启动!");
  176. CheckUtil.check(!"1".equals(tacProvincePblmMendInfo.getPblmOut()), "整改问题已销号!");
  177. form.getPblmPlist().setIsStart("1");
  178. update(form.getPblmPlist());
  179. ProcessStartCO processStartCO = new ProcessStartCO();
  180. processStartCO.setBizKey(form.getPblmPlist().getId());
  181. processStartCO.setFormUrl("pdcApi/tac/province/pblm/mendInfo/" + form.getPblmPlist().getId());
  182. processStartCO.setProcessName("稽察整改-" + getBpmName(form));
  183. processStartCO.setProcessTypeCode(getBpmCode(province, "稽察整改").getBpmCode());// 根据当前用户所属省份和督查类型 取出对应工作流 id
  184. processStartCO.setTenantId("1");
  185. processStartCO.setUserId(userId);
  186. processStartCO.setProvince(province);
  187. processStartCO.setCompleteFirstTaskFlag(true);
  188. Map<String, Object> sendVar = new HashMap<>();
  189. if (isLocalAd(form.getPblmPlist().getObjAdCode())) {
  190. //直管县
  191. sendVar.put("sendLocal", "zg");
  192. } else {
  193. //非直管县
  194. sendVar.put("sendLocal", "fzg");
  195. }
  196. sendVar.put("sendVar", "city");
  197. sendVar.put("sendSpc", "spc");// 山东省 --监督处是否专家审核
  198. sendVar.put("sendBsnm", "九龙江流域");// 福建流域
  199. if (form.getPblmPlist().getBsnm() == null) {
  200. if (null == tacProvincePblmMendInfoDao.get(form.getPblmPlist().getId()).getBsnm()) {
  201. form.getPblmPlist().setBsnm("九龙江流域");
  202. } else {
  203. form.getPblmPlist().setBsnm(tacProvincePblmMendInfoDao.get(form.getPblmPlist().getId()).getBsnm());
  204. }
  205. }
  206. if (form.getPblmPlist().getBsnm().equals("九龙江流域")) {
  207. sendVar.put("sendBsnm", "九龙江流域");// 福建流域
  208. } else if (form.getPblmPlist().getBsnm().equals("闽江流域")) {
  209. sendVar.put("sendBsnm", "闽江流域");// 福建流域
  210. } else {
  211. sendVar.put("sendBsnm", "九龙江流域");// 福建流域
  212. }
  213. processStartCO.setVariables(sendVar);
  214. APIResult apiResult = bpmProcessInstService.startProcInst(processStartCO, userId, orgId);
  215. if (apiResult.isRetStatus()) {
  216. return true;
  217. } else {
  218. throw new CheckException("发起流程失败!");
  219. }
  220. }
  221. public BisInspBpmOrg getBpmCode(String province, String ptype) {
  222. BisInspBpmOrg bisInspBpmOrg = bisInspBpmOrgService.getBpmCodeBypp(province, ptype);
  223. return bisInspBpmOrg;
  224. }
  225. public String getBpmName(TacProvincePblmInfoFromDto form) {
  226. String nameString = "";
  227. //获取对象所属行政区代码
  228. String objAdCode = form.getPblmPlist().getAdCode();
  229. //查询此行政是否是直辖县
  230. if (isLocalAd(objAdCode)) {
  231. nameString = form.getPblmPlist().getProvince();
  232. if (form.getPblmPlist().getCounty() != null) {
  233. nameString = nameString + "-" + form.getPblmPlist().getCounty();
  234. }
  235. nameString = nameString + "-" + form.getPblmPlist().getPrjName() + ":" + form.getPblmPlist().getPblmNm();
  236. } else {
  237. nameString = form.getPblmPlist().getProvince();
  238. if (null != form.getPblmPlist().getCity()) {
  239. nameString = nameString + "-" + form.getPblmPlist().getCity();
  240. }
  241. if (null != form.getPblmPlist().getCounty()) {
  242. nameString = nameString + "-" + form.getPblmPlist().getCounty();
  243. }
  244. nameString = nameString + "-" + form.getPblmPlist().getPrjName() + ":" + form.getPblmPlist().getPblmNm();
  245. }
  246. return nameString;
  247. }
  248. @Override
  249. public void allStartup(TacProvincePblmMendInfoParam tacProvincePblmMendInfoParam) {
  250. String persId = tacProvincePblmMendInfoParam.getPersId();
  251. String orgId = tacProvincePblmMendInfoParam.getOrgId();
  252. String province = tacProvincePblmMendInfoParam.getProvince();
  253. tacProvincePblmMendInfoParam.setPersId(null);
  254. tacProvincePblmMendInfoParam.setOrgId(null);
  255. tacProvincePblmMendInfoParam.setProvince(null);
  256. // 查询
  257. List<TacProvincePblmInfoFromDto> tacProvincePblmInfoFromDtos = new ArrayList<>();
  258. List<TacProvincePblmMendInfo> list = this.tacProvincePblmMendInfoDao.getList(tacProvincePblmMendInfoParam);
  259. if (list != null && list.size() > 0) {
  260. for (TacProvincePblmMendInfo tacProvincePblmMendInfo : list) {
  261. if ("1".equals(tacProvincePblmMendInfo.getIsStart())) {
  262. continue;
  263. }
  264. if (tacProvincePblmMendInfo.getLocation() != null) {
  265. if (tacProvincePblmMendInfo.getLocation().contains(SplitValue.HENG_SPLIT)) {
  266. String[] split = tacProvincePblmMendInfo.getLocation().split(SplitValue.HENG_SPLIT);
  267. if (split.length == 3) {
  268. tacProvincePblmMendInfo.setProvince(split[0]);
  269. tacProvincePblmMendInfo.setCity(split[1]);
  270. tacProvincePblmMendInfo.setCounty(split[2]);
  271. }
  272. if (split.length == 2) {
  273. tacProvincePblmMendInfo.setProvince(split[0]);
  274. tacProvincePblmMendInfo.setCity(split[1]);
  275. tacProvincePblmMendInfo.setCounty("");
  276. }
  277. } else {
  278. tacProvincePblmMendInfo.setProvince(tacProvincePblmMendInfo.getLocation());
  279. }
  280. }
  281. TacProvincePblmInfoFromDto dto = new TacProvincePblmInfoFromDto();
  282. dto.setPblmPlist(tacProvincePblmMendInfo);
  283. tacProvincePblmInfoFromDtos.add(dto);
  284. }
  285. }
  286. for (TacProvincePblmInfoFromDto tacProvincePblmInfoFromDto : tacProvincePblmInfoFromDtos) {
  287. saveFormsAndStartFlow(tacProvincePblmInfoFromDto, persId, orgId, province);
  288. }
  289. }
  290. @Override
  291. public boolean submitForm(TacProvincePblmInfoFromDto form, String userId, String orgId) {
  292. QueryTaskActionCO task = form.getQueryTaskActionCO();
  293. task.setActionType(ActionConstant.ACTION_SUBMIT);
  294. task.setClaimTaskDirectExeFlag(true);
  295. APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId);
  296. return apiResult.isRetStatus();
  297. }
  298. @Override
  299. public boolean backwardForm(TacProvincePblmInfoFromDto form, String userId, String orgId) {
  300. QueryTaskActionCO task = form.getQueryTaskActionCO();
  301. task.setActionType(ActionConstant.ACTION_BACK);
  302. task.setClaimTaskDirectExeFlag(true);
  303. APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId);
  304. return apiResult.isRetStatus();
  305. }
  306. @Override
  307. public boolean feedbackForm(TacProvincePblmInfoFromDto form, String userId, String orgId) {
  308. form.getPblmPlist().setIsRect("1");//是否反馈
  309. update(form.getPblmPlist());
  310. QueryTaskActionCO task = form.getQueryTaskActionCO();
  311. task.setActionType(ActionConstant.ACTION_SUBMIT);
  312. task.setClaimTaskDirectExeFlag(true);
  313. APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId);
  314. return apiResult.isRetStatus();
  315. }
  316. @Override
  317. public boolean feedbackCityForm(TacProvincePblmInfoFromDto form, String userId, String orgId) {
  318. QueryTaskActionCO task = form.getQueryTaskActionCO();
  319. task.setActionType(ActionConstant.ACTION_SUBMIT);
  320. Map<String, Object> sendVar = new HashMap<>();
  321. sendVar.put("sendVar", "city");
  322. task.setVariables(sendVar);
  323. task.setClaimTaskDirectExeFlag(true);
  324. APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId);
  325. return apiResult.isRetStatus();
  326. }
  327. @Override
  328. public boolean sendCountyForm(TacProvincePblmInfoFromDto form, String userId, String orgId) {
  329. QueryTaskActionCO task = form.getQueryTaskActionCO();
  330. Map<String, Object> sendVar = new HashMap<>();
  331. sendVar.put("sendVar", "county");
  332. task.setVariables(sendVar);
  333. task.setActionType(ActionConstant.ACTION_SUBMIT);
  334. task.setClaimTaskDirectExeFlag(true);
  335. APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId);
  336. return apiResult.isRetStatus();
  337. }
  338. @Override
  339. public boolean complete(TacProvincePblmInfoFromDto form, String userId, String orgId) {
  340. form.getPblmPlist().setPblmOut("1");//已销号
  341. update(form.getPblmPlist());
  342. QueryTaskActionCO task = form.getQueryTaskActionCO();
  343. Map<String, Object> sendVar = new HashMap<>();
  344. sendVar.put("sendVar", "county");
  345. task.setVariables(sendVar);
  346. task.setActionType(ActionConstant.ACTION_SUBMIT);
  347. task.setClaimTaskDirectExeFlag(true);
  348. APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId);
  349. return apiResult.isRetStatus();
  350. }
  351. @Override
  352. public boolean sendProvinceForm(TacProvincePblmInfoFromDto form, String userId, String orgId) {
  353. update(form.getPblmPlist());
  354. QueryTaskActionCO task = form.getQueryTaskActionCO();
  355. Map<String, Object> sendVar = new HashMap<>();
  356. sendVar.put("sendLocal", "province");
  357. task.setVariables(sendVar);
  358. task.setActionType(ActionConstant.ACTION_SUBMIT);
  359. task.setClaimTaskDirectExeFlag(true);
  360. APIResult apiResult = bpmTaskService.taskAction(task, userId, orgId);
  361. return apiResult.isRetStatus();
  362. }
  363. @Override
  364. public void export(TacProvincePblmMendInfoParam tacProvincePblmMendInfoParam, HttpServletResponse response) throws Exception {
  365. if (StringUtils.isNotBlank(tacProvincePblmMendInfoParam.getArea())) {
  366. //截取行政区划
  367. }
  368. List<TacProvincePblmMendInfo> list = this.tacProvincePblmMendInfoDao.getList(tacProvincePblmMendInfoParam);
  369. PageInfo<TacProvincePblmMendInfo> pageInfo = new PageInfo<>(list);
  370. for (TacProvincePblmMendInfo tacProvincePblmMendInfo : pageInfo.getList()) {
  371. //补充省市县
  372. if (tacProvincePblmMendInfo.getLocation() != null) {
  373. if (tacProvincePblmMendInfo.getLocation().contains(SplitValue.HENG_SPLIT)) {
  374. String[] split = tacProvincePblmMendInfo.getLocation().split(SplitValue.HENG_SPLIT);
  375. if (split.length == 3) {
  376. tacProvincePblmMendInfo.setProvince(split[0]);
  377. tacProvincePblmMendInfo.setCity(split[1]);
  378. tacProvincePblmMendInfo.setCounty(split[2]);
  379. }
  380. if (split.length == 2) {
  381. tacProvincePblmMendInfo.setProvince(split[0]);
  382. tacProvincePblmMendInfo.setCity(split[1]);
  383. tacProvincePblmMendInfo.setCounty("");
  384. }
  385. } else {
  386. tacProvincePblmMendInfo.setProvince(tacProvincePblmMendInfo.getLocation());
  387. }
  388. }
  389. }
  390. String mkdirName = templatePath + File.separator + "整改问题_" + DateUtils.getToday("yyyyMMddHHmmss");
  391. File file = new File(mkdirName);
  392. if (!file.exists()) {
  393. file.mkdirs();
  394. }
  395. try {
  396. exportExcel(list, response, "整改问题列表", mkdirName, COMMONLIST_AND_OPEN_ANNOTATION, TacProvincePblmMendInfo.class);
  397. } catch (Exception e) {
  398. logger.error("导出excel出错");
  399. }
  400. if (list != null && list.size() > 0) {
  401. for (int i = 1; i <= list.size(); i++) {
  402. // 添加文件夹
  403. addMkdir(list.get(i - 1), i, mkdirName);
  404. }
  405. }
  406. /* 4. 导出 */
  407. String zipFileName = "整改问题_" + DateUtils.getToday("yyyyMMddHHmmss") + ".zip";
  408. FileUtil.compressToZip(mkdirName, templatePath, zipFileName);
  409. logger.info("--------------------------------------exp pblm mend zip -----------------------------------------------");
  410. /* 5.压缩包导出 */
  411. File zipFile = new File(templatePath + File.separator + zipFileName);
  412. response.setCharacterEncoding("UTF-8");
  413. response.setHeader("Content-Disposition",
  414. "attachment; filename=" + new String(zipFileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1"));
  415. response.setContentLength((int) zipFile.length());
  416. response.setContentType("application/zip");// 定义输出类型
  417. FileInputStream fis = new FileInputStream(zipFile);
  418. BufferedInputStream buff = new BufferedInputStream(fis);
  419. byte[] b = new byte[1024];// 相当于我们的缓存
  420. long k = 0;// 该值用于计算当前实际下载了多少字节
  421. OutputStream myout = response.getOutputStream();// 从response对象中得到输出流,准备下载
  422. // 开始循环下载
  423. while (k < zipFile.length()) {
  424. int j = buff.read(b, 0, 1024);
  425. k += j;
  426. myout.write(b, 0, j);
  427. }
  428. myout.flush();
  429. buff.close();
  430. zipFile.delete();
  431. }
  432. @Override
  433. public int updateAddvcd(TacProvincePblmMendInfo tacProvincePblmMendInfo) {
  434. return this.tacProvincePblmMendInfoDao.updateAddvcd(tacProvincePblmMendInfo);
  435. }
  436. private File createFile(String fileName) {
  437. File file = new File(fileName);
  438. // 如果文件夹不存在
  439. if (!file.exists()) {
  440. // 创建文件夹
  441. file.mkdirs();
  442. }
  443. return file;
  444. }
  445. void addMkdir(TacProvincePblmMendInfo tacProvincePblmMendInfo, int number, String filePath) {
  446. /* 1. 获取附件信息 */
  447. List<GwComFile> gwComFileList = gwComFileService.findFileByBiz(tacProvincePblmMendInfo.getId());
  448. // 问题没附件,退出
  449. if (gwComFileList == null || gwComFileList.size() == 0) {
  450. return;
  451. }
  452. // 创建附件文件夹
  453. String fujianFilePath = filePath + File.separator + number;
  454. createFile(fujianFilePath);
  455. gwComFileList.forEach(file -> {
  456. // 获取要复制的文件
  457. File oldfile = new File(uploadPath.replace("upload/", "") + file.getFilePath().replaceAll("\\\\", "/").replaceAll("//", "/"));
  458. //要生成的新文件(指定路径如果没有则创建)
  459. File newfile = new File(fujianFilePath + File.separator + file.getFileName());
  460. try {
  461. newfile.createNewFile();
  462. } catch (IOException e) {
  463. logger.error("整改问题导出-创建新文件失败!");
  464. e.printStackTrace();
  465. }
  466. try (//文件输入流,用于读取要复制的文件
  467. FileInputStream fileInputStream = new FileInputStream(oldfile);
  468. //新文件输出流
  469. FileOutputStream fileOutputStream = new FileOutputStream(newfile);) {
  470. byte[] buffer = new byte[1024];
  471. int len;
  472. // 将文件流信息读取文件缓存区,如果读取结果不为-1就代表文件没有读取完毕,反之已经读取完毕
  473. while ((len = fileInputStream.read(buffer)) != -1) {
  474. fileOutputStream.write(buffer, 0, len);
  475. fileOutputStream.flush();
  476. }
  477. } catch (IOException e) {
  478. logger.error("整改问题导出-复制文件失败!");
  479. e.printStackTrace();
  480. }
  481. });
  482. }
  483. void conventPblmPlist(Map<String, Object> map) {
  484. map.put("isStart", BisInspPblmPlistConventUtil.isRect(MapUtils.getString(map, "isStart", "")));
  485. map.put("pblmPasi", InspPblmUtils.plbmCateDesc(MapUtils.getString(map, "pblmPasi", "")));
  486. map.put("ifCasePblm", BisInspPblmPlistConventUtil.isRect(MapUtils.getString(map, "ifCasePblm", "")));
  487. map.put("crtState", BisInspPblmPlistConventUtil.crtState(MapUtils.getString(map, "crtState", "")));
  488. map.put("pblmCrtm", map.get("pblmCrtm") != null ? DateUtils.Date2Str((Date) map.get("pblmCrtm")) : "");
  489. map.put("isRect", BisInspPblmPlistConventUtil.isRect(MapUtils.getString(map, "isRect", "")));
  490. map.put("pblmOut", BisInspPblmPlistConventUtil.isRect(MapUtils.getString(map, "pblmOut", "")));
  491. }
  492. void exportExcel(List<?> result, HttpServletResponse response, String fileName, String filePath, List<String> list, Class cla) throws NoSuchFieldException {
  493. if (list == null || list.size() == 0) {
  494. exportExcel(result, response, fileName);
  495. return;
  496. }
  497. List<Map<String, Object>> mapList = new ArrayList<>();
  498. result.forEach(worker -> mapList.add(transBean2Map(worker)));
  499. mapList.forEach(worker -> conventPblmPlist(worker));
  500. ExportAbstract export = new ExcelExport();
  501. if (StringUtils.isBlank(fileName)) {
  502. fileName = "结果列表";
  503. }
  504. export.setFileName(fileName);
  505. export.setExport_ps_export(true);
  506. export.setExport_ps_type(ExportAbstract.XLS);
  507. export.setExport_bzip(false);
  508. export.setTitle(fileName);
  509. ArrayList<Object> cols = new ArrayList<Object>();
  510. Field[] fields;
  511. if (cla == TacProvincePblmMendInfo.class) {
  512. Class superClass = BaseBean.class;
  513. fields = new Field[18];
  514. fields[0] = superClass.getDeclaredField("province"); // 省
  515. fields[1] = cla.getDeclaredField("city"); // 市
  516. fields[2] = cla.getDeclaredField("county"); // 县
  517. fields[3] = cla.getDeclaredField("pblmNub"); // 印发文号
  518. fields[4] = cla.getDeclaredField("pblmNubName"); // 印发文件名
  519. fields[5] = cla.getDeclaredField("prjName"); // 工程名称
  520. fields[6] = cla.getDeclaredField("subjectNames"); // 责任单位
  521. fields[7] = cla.getDeclaredField("pblmNm"); // 问题名称
  522. fields[8] = cla.getDeclaredField("pblmDesc"); // 问题阐述
  523. fields[9] = cla.getDeclaredField("pblmTypeDesc"); // 问题定性描述
  524. fields[10] = cla.getDeclaredField("pblmPasi");// 严重程度
  525. fields[11] = cla.getDeclaredField("ifCasePblm");// 是否典型
  526. fields[12] = cla.getDeclaredField("crtState");// 整改状态
  527. fields[13] = cla.getDeclaredField("pblmCrtm");// 整改时限
  528. fields[14] = cla.getDeclaredField("pblmReason");// 整改建议
  529. fields[15] = cla.getDeclaredField("isRect");// 是否反馈
  530. fields[16] = cla.getDeclaredField("crtInfo");// 整改措施
  531. fields[17] = cla.getDeclaredField("pblmOut");// 是否销号
  532. } else {
  533. fields = cla.getDeclaredFields();
  534. Class clazz = cla.getSuperclass();
  535. if (clazz != null && clazz != Objects.class) {
  536. fields = ArrayUtils.addAll(fields, clazz.getDeclaredFields());
  537. }
  538. }
  539. for (int j = 0; j <= fields.length - 1; j++) {
  540. //设置可访问
  541. Field field = fields[j];
  542. if (list.contains(field.getName())) {
  543. continue;
  544. }
  545. field.setAccessible(true);
  546. if (field.getAnnotation(ApiModelProperty.class) != null && field.getAnnotation(NotExport.class) == null) {
  547. cols.add(field.getName() + "[" + ExportUtil.fileFormat(field.getAnnotation(ApiModelProperty.class).value()) + "]");
  548. }
  549. }
  550. if (cols.size() < 1) {
  551. cols.add("name[名称]");
  552. cols.add("code[编码]");
  553. }
  554. export.setCols(cols);
  555. export.setGroupable(false);
  556. // 设置视图指标
  557. export.setLevel(1);
  558. export.setLocksize(0);
  559. try {
  560. export.Export(response);
  561. // 导出表头
  562. export.ExportHeadForCustom(response);
  563. export.ContinueExport(mapList);
  564. FileOutputStream output = new FileOutputStream(filePath + File.separator + fileName + ".xls");
  565. // 写入磁盘
  566. export.getWb().write(output);
  567. } catch (Exception e) {
  568. e.printStackTrace();
  569. }
  570. }
  571. void exportExcel(List<?> result, HttpServletResponse response, String fileName) {
  572. List<Map<String, Object>> mapList = new ArrayList<>();
  573. ExportAbstract export = new ExcelExport();
  574. if (StringUtils.isBlank(fileName)) {
  575. fileName = "结果列表";
  576. }
  577. export.setFileName(fileName);
  578. export.setExport_ps_export(true);
  579. export.setExport_ps_type(ExportAbstract.XLS);
  580. export.setExport_bzip(false);
  581. export.setTitle(fileName);
  582. ArrayList<Object> cols = new ArrayList<Object>();
  583. boolean flag = true;
  584. for (Object o : result) {
  585. mapList.add(transBean2Map(o));
  586. if (flag) {
  587. Field[] fields = o.getClass().getDeclaredFields();
  588. for (int j = 0; j <= fields.length - 1; j++) {
  589. //设置可访问
  590. Field field = fields[j];
  591. // if (list.contains(field.getName())) {
  592. // continue;
  593. // }
  594. field.setAccessible(true);
  595. if (field.getAnnotation(ApiModelProperty.class) != null) {
  596. cols.add(field.getName() + "[" + field.getAnnotation(ApiModelProperty.class).value() + "]");
  597. }
  598. }
  599. flag = false;
  600. }
  601. }
  602. if (cols.size() < 1) {
  603. cols.add("name[名称]");
  604. cols.add("code[编码]");
  605. cols.add("location[地址]");
  606. cols.add("adCode[行政区划编码]");
  607. }
  608. export.setCols(cols);
  609. export.setGroupable(false);
  610. // 设置视图指标
  611. export.setLevel(1);
  612. export.setLocksize(0);
  613. try {
  614. export.Export(response);
  615. //导出表头
  616. export.ExportHeadForCustom(response);
  617. export.ContinueExport(mapList);
  618. FileOutputStream output = new FileOutputStream(templatePath + File.separator + "整改问题_" + File.separator + fileName + ".xls");
  619. // 写入磁盘
  620. export.getWb().write(output);
  621. } catch (Exception e) {
  622. e.printStackTrace();
  623. }
  624. }
  625. @Override
  626. public TacProvincePblmMendInfo getProblemListInfo(String plistId) {
  627. return tacProvincePblmMendInfoDao.get(plistId);
  628. }
  629. @Override
  630. public int updateByPblmId(TacProvincePblmMendInfo tacProvincePblmMendInfo) {
  631. return tacProvincePblmMendInfoDao.updateByPblmId(tacProvincePblmMendInfo);
  632. }
  633. }