358fc7bf2f1cf331547444dcc1581e3d54e262a0.svn-base 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. package cn.com.goldenwater.dcproj.service.impl.ducha;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.dao.BisInspPlanDpDao;
  4. import cn.com.goldenwater.dcproj.dao.BisInspPlanYearDao;
  5. import cn.com.goldenwater.dcproj.dao.BisInspPlandpRlDao;
  6. import cn.com.goldenwater.dcproj.dao.DictTypeDao;
  7. import cn.com.goldenwater.dcproj.model.AttAdBase;
  8. import cn.com.goldenwater.dcproj.model.BisInspPlanDp;
  9. import cn.com.goldenwater.dcproj.model.BisInspPlanYear;
  10. import cn.com.goldenwater.dcproj.model.BisInspPlandpRl;
  11. import cn.com.goldenwater.dcproj.model.DictType;
  12. import cn.com.goldenwater.dcproj.param.BisInspPlanDpParam;
  13. import cn.com.goldenwater.dcproj.param.BisInspPlanYearParam;
  14. import cn.com.goldenwater.dcproj.param.BisInspPlandpRlParam;
  15. import cn.com.goldenwater.dcproj.param.DictTypeParam;
  16. import cn.com.goldenwater.dcproj.service.AttAdBaseService;
  17. import cn.com.goldenwater.dcproj.service.BisInspPlanDpService;
  18. import cn.com.goldenwater.dcproj.service.BisInspPlanYearService;
  19. import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
  20. import cn.com.goldenwater.dcproj.utils.AdLevelUtil;
  21. import cn.com.goldenwater.dcproj.utils.Constant;
  22. import cn.com.goldenwater.dcproj.utils.StringUtils;
  23. import cn.com.goldenwater.id.util.UuidUtil;
  24. import com.github.pagehelper.PageHelper;
  25. import com.github.pagehelper.PageInfo;
  26. import org.apache.commons.collections.CollectionUtils;
  27. import org.apache.poi.ss.usermodel.Cell;
  28. import org.apache.poi.ss.usermodel.CellStyle;
  29. import org.apache.poi.ss.usermodel.HorizontalAlignment;
  30. import org.apache.poi.ss.usermodel.Row;
  31. import org.apache.poi.ss.usermodel.Sheet;
  32. import org.apache.poi.ss.usermodel.VerticalAlignment;
  33. import org.apache.poi.ss.usermodel.Workbook;
  34. import org.apache.poi.ss.usermodel.WorkbookFactory;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.beans.factory.annotation.Value;
  37. import org.springframework.stereotype.Service;
  38. import org.springframework.transaction.annotation.Transactional;
  39. import javax.servlet.http.HttpServletResponse;
  40. import java.io.File;
  41. import java.io.FileInputStream;
  42. import java.io.IOException;
  43. import java.io.InputStream;
  44. import java.io.OutputStream;
  45. import java.net.URLEncoder;
  46. import java.text.SimpleDateFormat;
  47. import java.util.ArrayList;
  48. import java.util.Arrays;
  49. import java.util.Date;
  50. import java.util.HashMap;
  51. import java.util.List;
  52. import java.util.Map;
  53. import java.util.Optional;
  54. import java.util.Set;
  55. import java.util.stream.Collectors;
  56. /**
  57. * @author lhc
  58. * @date 2022-3-3
  59. */
  60. @Service
  61. @Transactional
  62. public class BisInspPlanYearServiceImpl extends AbstractCrudService<BisInspPlanYear, BisInspPlanYearParam> implements BisInspPlanYearService {
  63. @Autowired
  64. private BisInspPlanYearDao bisInspPlanYearDao;
  65. @Value("${export.templatePath}")
  66. private String templatePath;
  67. @Autowired
  68. private DictTypeDao dictTypeDao;
  69. @Autowired
  70. private BisInspPlandpRlDao bisInspPlandpRlDao;
  71. @Autowired
  72. private BisInspPlanDpDao bisInspPlanDpDao;
  73. @Autowired
  74. private OlBisInspOrgService olBisInspOrgService;
  75. @Autowired
  76. private BisInspPlanDpService bisInspPlanDpService;
  77. @Autowired
  78. private AttAdBaseService attAdBaseService;
  79. private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
  80. public BisInspPlanYearServiceImpl(BisInspPlanYearDao bisInspPlanYearDao) {
  81. super(bisInspPlanYearDao);
  82. this.bisInspPlanYearDao = bisInspPlanYearDao;
  83. }
  84. @Override
  85. public int insert(BisInspPlanYear bisInspPlanYear) {
  86. String uuid = UuidUtil.uuid(); // 生成uuid
  87. bisInspPlanYear.setId(uuid);
  88. bisInspPlanYear.setIntm(new Date());
  89. bisInspPlanYear.setUptm(new Date());
  90. bisInspPlanYear.setDataStat("0");
  91. bisInspPlanYear.setState("0");
  92. return this.bisInspPlanYearDao.insert(bisInspPlanYear);
  93. }
  94. @Override
  95. public int update(BisInspPlanYear bisInspPlanYear) {
  96. bisInspPlanYear.setUptm(new Date());
  97. return this.bisInspPlanYearDao.update(bisInspPlanYear);
  98. }
  99. @Override
  100. public int delete(String id) {
  101. return this.bisInspPlanYearDao.delete(id);
  102. }
  103. @Override
  104. public PageInfo<BisInspPlanYear> findPageList(BisInspPlanYearParam bisInspPlanYearParam) {
  105. PageHelper.startPage(bisInspPlanYearParam);
  106. List<BisInspPlanYear> list = bisInspPlanYearDao.findList(bisInspPlanYearParam);
  107. String adCodeSub = StringUtils.substring(bisInspPlanYearParam.getAdCode(), Constant.INT_ZERO, Constant.INT_TWO);
  108. //山东
  109. if (StringUtils.equalsAny(adCodeSub, "37")) {
  110. List<BisInspPlanDp> dpList = bisInspPlanDpDao.findList(new BisInspPlanDpParam(adCodeSub));
  111. list.parallelStream().forEach(l -> {
  112. if (StringUtils.isNotBlank(l.getAdCode())) {
  113. Optional.ofNullable(attAdBaseService.getByAdcode(l.getAdCode())).ifPresent(ad -> {
  114. l.setAdFullName(ad.getAdFullName());
  115. l.setAdGrad(ad.getAdGrad());
  116. });
  117. }
  118. //参加处室单位
  119. Optional.ofNullable(bisInspPlandpRlDao.findByPlanDpIdList(new BisInspPlandpRlParam(l.getId(), Constant.STRING_ZERO))).ifPresent(c -> {
  120. l.setJoinDep(dpList.stream().filter(dp -> c.contains(dp.getId())).map(BisInspPlanDp::getDpName).collect(Collectors.joining(",")));
  121. l.setPlanDpRlIds(c);
  122. });
  123. //牵头处室
  124. if (StringUtils.isNotBlank(l.getLeadDepId())) {
  125. l.setLeadDep(dpList.stream().filter(dp -> StringUtils.equals(dp.getId(), l.getLeadDepId())).map(BisInspPlanDp::getDpName).collect(Collectors.joining(",")));
  126. }
  127. });
  128. }
  129. return new PageInfo<>(list);
  130. }
  131. @Override
  132. public Integer bingObjType(BisInspPlanYear bisInspPlanYear) {
  133. bisInspPlanYear.setUptm(new Date());
  134. //绑定督查类型
  135. //通用督查添加 字典添加子对象类型
  136. if (bisInspPlanYear.getObjType().equals("111")) {
  137. DictTypeParam dicParam = new DictTypeParam();
  138. dicParam.setOwnerOfc(bisInspPlanYear.getOrgId());
  139. dicParam.setOwnerSystem("gnrl");
  140. dicParam.setDictTypeDesc(bisInspPlanYear.getChkName());
  141. List<DictType> dictTypes = dictTypeDao.findList(dicParam);
  142. if (dictTypes.size() == 0) {
  143. //插入通用类型
  144. DictType dictType = new DictType();
  145. dictType.setId(UuidUtil.uuid());
  146. dictType.setOwnerSystem("gnrl");
  147. dictType.setFlagValid("1");
  148. dictType.setOwnerOfc(bisInspPlanYear.getOrgId());
  149. dictType.setDictTypeDesc(bisInspPlanYear.getChkName());
  150. dictType.setDictTypeCd(getMaxDicTypeCd("gnrl"));
  151. dictTypeDao.insert(dictType);
  152. }
  153. }
  154. return this.bisInspPlanYearDao.update(bisInspPlanYear);
  155. }
  156. public String getMaxDicTypeCd(String ownerSystem) {
  157. DictTypeParam dicParam = new DictTypeParam();
  158. dicParam.setOwnerSystem("gnrl");
  159. List<DictType> dictTypes = dictTypeDao.findList(dicParam);
  160. if (dictTypes.size() == 0) {
  161. return "700";
  162. } else {
  163. String maxDicTypeCd = dictTypes.get(0).getDictTypeCd();
  164. maxDicTypeCd = String.valueOf(Integer.parseInt(maxDicTypeCd) + 1);
  165. return maxDicTypeCd;
  166. }
  167. }
  168. @Override
  169. public void export(HttpServletResponse response, BisInspPlanYearParam bisInspPlanYearParam) {
  170. String templateFilePath = templatePath + File.separator + "planCheckSd.xls";
  171. File file = new File(templateFilePath);
  172. if (file.exists()) {
  173. try {
  174. InputStream inputStream = new FileInputStream(file);
  175. Workbook workbook = WorkbookFactory.create(inputStream);
  176. exportFile(workbook, bisInspPlanYearParam);
  177. writeToResponse(response, workbook, "山东年度检查计划.xls");
  178. } catch (Exception e) {
  179. e.printStackTrace();
  180. }
  181. }
  182. }
  183. private void exportFile(Workbook xssfWorkbook, BisInspPlanYearParam bisInspPlanYearParam) {
  184. List<BisInspPlanYear> list = bisInspPlanYearDao.findList(bisInspPlanYearParam);
  185. String adCodeSub = StringUtils.substring(bisInspPlanYearParam.getAdCode(), Constant.INT_ZERO, Constant.INT_TWO);
  186. //山东
  187. if (StringUtils.equalsAny(adCodeSub, "37")) {
  188. List<BisInspPlanDp> dpList = bisInspPlanDpDao.findList(new BisInspPlanDpParam(adCodeSub));
  189. list.parallelStream().forEach(l -> {
  190. if (StringUtils.isNotBlank(l.getAdCode())) {
  191. Optional.ofNullable(attAdBaseService.getByAdcode(l.getAdCode())).ifPresent(ad -> {
  192. l.setAdFullName(ad.getAdFullName());
  193. l.setAdGrad(ad.getAdGrad());
  194. });
  195. }
  196. //参加处室单位
  197. Optional.ofNullable(bisInspPlandpRlDao.findByPlanDpIdList(new BisInspPlandpRlParam(l.getId(), Constant.STRING_ZERO))).ifPresent(c -> {
  198. l.setJoinDep(dpList.stream().filter(dp -> c.contains(dp.getId())).map(BisInspPlanDp::getDpName).collect(Collectors.joining(",")));
  199. l.setPlanDpRlIds(c);
  200. });
  201. //牵头处室
  202. if (StringUtils.isNotBlank(l.getLeadDepId())) {
  203. l.setLeadDep(dpList.stream().filter(dp -> StringUtils.equals(dp.getId(), l.getLeadDepId())).map(BisInspPlanDp::getDpName).collect(Collectors.joining(",")));
  204. }
  205. });
  206. }
  207. Sheet sheet = xssfWorkbook.getSheetAt(0);
  208. String title = "年度检查计划";
  209. if (bisInspPlanYearParam.getChkYear() != null) {
  210. title = bisInspPlanYearParam.getChkYear() + title;
  211. }
  212. CellStyle styleContent = xssfWorkbook.createCellStyle();
  213. styleContent.setAlignment(HorizontalAlignment.CENTER);
  214. styleContent.setVerticalAlignment(VerticalAlignment.CENTER);
  215. setCellValue(sheet, 0, 1, title);
  216. if (list != null && list.size() > 0) {
  217. for (int i = 0; i < list.size(); i++) {
  218. Row row = sheet.createRow(3 + i);
  219. int cols = 15;
  220. for (int j = 0; j <= cols; j++) {
  221. Cell cell = row.createCell(j);
  222. cell.setCellStyle(styleContent);
  223. }
  224. }
  225. for (int i = 0; i < list.size(); i++) {
  226. BisInspPlanYear bisInspPlanYear = list.get(i);
  227. setAllCell(sheet, i, bisInspPlanYear);
  228. }
  229. }
  230. }
  231. private void setAllCell(Sheet sheet, int i, BisInspPlanYear bisInspPlanYear) {
  232. setCellValue(sheet, 3 + i, 0, String.valueOf(bisInspPlanYear.getOrdr()));
  233. setCellValue(sheet, 3 + i, 1, String.valueOf(bisInspPlanYear.getChkYear()));
  234. AttAdBase byAdcode = attAdBaseService.getByAdcode(bisInspPlanYear.getAdCode());
  235. setCellValue(sheet, 3 + i, 2, byAdcode.getAdName());
  236. setCellValue(sheet, 3 + i, 3, byAdcode.getLabelFromAdGrad());
  237. setCellValue(sheet, 3 + i, 4, bisInspPlanYear.getChkName());
  238. setCellValue(sheet, 3 + i, 5, bisInspPlanYear.getChkType());
  239. setCellValue(sheet, 3 + i, 6, bisInspPlanYear.getChkContent());
  240. setCellValue(sheet, 3 + i, 7, simpleDateFormat.format(bisInspPlanYear.getPlanSttm()));
  241. setCellValue(sheet, 3 + i, 8, simpleDateFormat.format(bisInspPlanYear.getPlanEntm()));
  242. setCellValue(sheet, 3 + i, 9, bisInspPlanYear.getLeadDep());
  243. setCellValue(sheet, 3 + i, 10, bisInspPlanYear.getJoinDep());
  244. setCellValue(sheet, 3 + i, 11, bisInspPlanYear.getChkForm());
  245. setCellValue(sheet, 3 + i, 12, bisInspPlanYear.getChkScope());
  246. setCellValue(sheet, 3 + i, 13, bisInspPlanYear.getChkRly());
  247. setCellValue(sheet, 3 + i, 14, "1".equals(bisInspPlanYear.getState())?"是":"否");
  248. setCellValue(sheet, 3 + i, 15, bisInspPlanYear.getNote());
  249. }
  250. private void setCellValue(Sheet sheet, int rownum, int cellnum, String value) {
  251. Cell cell = sheet.getRow(rownum).getCell(cellnum);
  252. cell.setCellValue(value);
  253. }
  254. private void writeToResponse(HttpServletResponse response, Workbook workbook, String name) throws IOException {
  255. // 修改模板内容导出新模板
  256. response.setContentType("application/x-msdownload");
  257. String fileNameURL = URLEncoder.encode(name, "UTF-8");
  258. response.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";filename*=utf-8''" + fileNameURL);
  259. OutputStream out = response.getOutputStream();
  260. workbook.write(out);
  261. out.flush();
  262. out.close();
  263. }
  264. /**
  265. * 针对 年度计划的子表参加处室(单位) 更新数据
  266. * @param bisInspPlanYear
  267. */
  268. @Override
  269. public void updatePostProcessing(BisInspPlanYear bisInspPlanYear) {
  270. //清空
  271. bisInspPlandpRlDao.deleteBy(new BisInspPlandpRlParam(bisInspPlanYear.getId(), Constant.STRING_ZERO));
  272. List<String> rlIds = bisInspPlanYear.getPlanDpRlIds();
  273. //自定义 参加单位 添加
  274. String planDpRlNames = bisInspPlanYear.getJoinDep();
  275. //参加处室(单位)
  276. Map<String,BisInspPlandpRl> list = new HashMap<>();
  277. if (CollectionUtils.isNotEmpty(rlIds)) {
  278. for (String planDpId : rlIds) {
  279. list.put(planDpId,new BisInspPlandpRl(bisInspPlanYear.getId(), planDpId, Constant.STRING_ZERO, bisInspPlanYear.getPersId()));
  280. }
  281. }
  282. if (StringUtils.isNotBlank(planDpRlNames)) {
  283. Set<String> dpRlNames = Arrays.stream(StringUtils.split(planDpRlNames, ",")).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
  284. String province = AdLevelUtil.getAddvcd(olBisInspOrgService.getRlProvince(bisInspPlanYear.getOrgId()));
  285. List<BisInspPlanDp> rlist = new ArrayList<>();
  286. dpRlNames.forEach(dpRlName -> rlist.add(new BisInspPlanDp(dpRlName, Constant.STRING_TWO, bisInspPlanYear.getPersId(), province)));
  287. if(rlist.size()>0){
  288. bisInspPlanDpService.batchInsert(rlist);
  289. }
  290. if (CollectionUtils.isNotEmpty(rlist)) {
  291. rlist.forEach(dp -> {
  292. list.put(dp.getId(),new BisInspPlandpRl(bisInspPlanYear.getId(), dp.getId(), Constant.STRING_ZERO, bisInspPlanYear.getPersId()));
  293. });
  294. }
  295. }
  296. if (list.size() > 0 && null !=list.values() && list.values().size()>0) {
  297. bisInspPlandpRlDao.batchInsert(new ArrayList<>(list.values()));
  298. }
  299. }
  300. }