f1cebabcf1e8f4fdb0914e6266231052f1226619.svn-base 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package cn.com.goldenwater.dcproj.service.impl.travel;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.constValue.SplitValue;
  4. import cn.com.goldenwater.dcproj.dao.BisInspAllDao;
  5. import cn.com.goldenwater.dcproj.dao.BisInspTravelPlanDao;
  6. import cn.com.goldenwater.dcproj.dao.BisInspTravelPlanPointDao;
  7. import cn.com.goldenwater.dcproj.dao.GeneralInfoDao;
  8. import cn.com.goldenwater.dcproj.model.AttInteBase;
  9. import cn.com.goldenwater.dcproj.model.BisInspAll;
  10. import cn.com.goldenwater.dcproj.model.BisInspTravelPlan;
  11. import cn.com.goldenwater.dcproj.model.BisInspTravelPlanPoint;
  12. import cn.com.goldenwater.dcproj.param.BisInspTravelPlanParam;
  13. import cn.com.goldenwater.dcproj.param.BisInspTravelPlanPointParam;
  14. import cn.com.goldenwater.dcproj.service.BisInspTravelPlanService;
  15. import cn.com.goldenwater.id.util.UuidUtil;
  16. import freemarker.template.Configuration;
  17. import freemarker.template.Template;
  18. import freemarker.template.TemplateException;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.beans.factory.annotation.Value;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import java.io.*;
  25. import java.nio.charset.StandardCharsets;
  26. import java.text.SimpleDateFormat;
  27. import java.util.Date;
  28. import java.util.HashMap;
  29. import java.util.List;
  30. import java.util.Map;
  31. /**
  32. * @author lhc
  33. * @date 2019-9-17
  34. */
  35. @Service
  36. @Transactional
  37. public class BisInspTravelPlanServiceImpl extends AbstractCrudService<BisInspTravelPlan, BisInspTravelPlanParam> implements BisInspTravelPlanService {
  38. @Autowired
  39. private BisInspTravelPlanDao bisInspTravelPlanDao;
  40. @Autowired
  41. private BisInspTravelPlanPointDao bisInspTravelPlanPointDao;
  42. @Autowired
  43. private GeneralInfoDao generalInfoDao;
  44. @Autowired
  45. private BisInspAllDao bisInspAllDao;
  46. @Value("${export.templatePath}" + "/")
  47. private String templatePath;
  48. private static final String TEMP_FILE_NAME = "travel.ftl";
  49. @Value("${export.basePath.docx}" + "/")
  50. private String tempFilePath;
  51. private Configuration configuration;
  52. public BisInspTravelPlanServiceImpl(BisInspTravelPlanDao bisInspTravelPlanDao) {
  53. super(bisInspTravelPlanDao);
  54. this.bisInspTravelPlanDao = bisInspTravelPlanDao;
  55. configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
  56. configuration.setDefaultEncoding("utf-8");
  57. }
  58. @Override
  59. public List<BisInspTravelPlan> getMyTravelPlan(String persId) {
  60. return bisInspTravelPlanDao.getMyTravelPlan(persId);
  61. }
  62. @Override
  63. public List<BisInspTravelPlan> getTravelByPlanId(String planId) {
  64. return bisInspTravelPlanDao.getTravelByPlanId(planId);
  65. }
  66. @Override
  67. public Integer sharePoint(String persId, String travelPlanId) {
  68. Integer row = 0;
  69. //获取行程下的点标注
  70. BisInspTravelPlanPointParam bisInspTravelPlanPointParam = new BisInspTravelPlanPointParam();
  71. bisInspTravelPlanPointParam.setTravelPlanId(travelPlanId);
  72. List<BisInspTravelPlanPoint> bisInspTravelPlanPoints = bisInspTravelPlanPointDao.findList(bisInspTravelPlanPointParam);
  73. //插入标注点到收藏点
  74. SimpleDateFormat sdf = new SimpleDateFormat(SplitValue.TIME_SPLIT_SEC);
  75. for (BisInspTravelPlanPoint bisInspTravelPlanPoint : bisInspTravelPlanPoints
  76. ) {
  77. AttInteBase attInteBase = new AttInteBase();
  78. attInteBase.setId(UuidUtil.uuid());
  79. attInteBase.setLgtd(bisInspTravelPlanPoint.getLgtd());
  80. attInteBase.setLttd(bisInspTravelPlanPoint.getLttd());
  81. attInteBase.setInteName(bisInspTravelPlanPoint.getName());
  82. attInteBase.setInteTime(sdf.format(new Date()));
  83. attInteBase.setPersid(persId);
  84. generalInfoDao.insertInte(attInteBase);
  85. row++;
  86. }
  87. //更新路书已经被收藏
  88. BisInspTravelPlan bisInspTravelPlan = new BisInspTravelPlan();
  89. bisInspTravelPlan.setId(travelPlanId);
  90. bisInspTravelPlan.setIsCollect("1");
  91. bisInspTravelPlanDao.update(bisInspTravelPlan);
  92. return row;
  93. }
  94. @Override
  95. public String getTravelPlanInfo(String travelPlanId) throws IOException {
  96. BisInspTravelPlan bisInspTravelPlan = bisInspTravelPlanDao.getTravelPlanInfo(travelPlanId);
  97. Map<String, Object> dataMap = new HashMap<>();
  98. String fileName = UuidUtil.uuid() + ".doc";
  99. String filePath = tempFilePath + "/" + fileName;
  100. //获取信息的业务逻辑
  101. dataMap = this.getDataMap(dataMap, bisInspTravelPlan);
  102. /*
  103. 替换模板
  104. dataMap 要填入模本的数据文件
  105. 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以从servlet,classpath,数据库装载,
  106. 这里我们的模板是放在template包下面
  107. */
  108. configuration.setDirectoryForTemplateLoading(new File(templatePath));
  109. // 通过模板名称获取模板
  110. Template template = configuration.getTemplate(TEMP_FILE_NAME);
  111. // 开始装载并输出
  112. if (template != null) {
  113. //输出文档路径及名称
  114. File outFile = new File(filePath);
  115. Writer out = null;
  116. FileOutputStream fos = null;
  117. try {
  118. fos = new FileOutputStream(outFile);
  119. OutputStreamWriter oWriter = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
  120. //这个地方对流的编码不可或缺,使用main()单独调用时,应该可以,但是如果是web请求导出时导出后word文档就会打不开,并且包XML文件错误。主要是编码格式不正确,无法解析。
  121. //out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
  122. out = new BufferedWriter(oWriter);
  123. //向模板里替换数据
  124. template.process(dataMap, out);
  125. } catch (FileNotFoundException | TemplateException e) {
  126. e.printStackTrace();
  127. } finally {
  128. if (out != null) {
  129. out.close();
  130. }
  131. if (fos != null) {
  132. fos.close();
  133. }
  134. }
  135. }
  136. //输出文件到指定路径
  137. return fileName;
  138. //return bisInspTravelPlan;
  139. }
  140. @Override
  141. public Integer cancelTravelPlan(String travelPlanId) throws IOException {
  142. /**
  143. * 取出路书关联的督查组,设置督查组关联路书状态为未关联,再更新路书的计划id和名称为空
  144. *
  145. */
  146. BisInspTravelPlan bisInspTravelPlan = bisInspTravelPlanDao.get(travelPlanId);
  147. if (StringUtils.isNotBlank(bisInspTravelPlan.getPlanId())) {
  148. BisInspAll bisInspAll = new BisInspAll();
  149. bisInspAll.setId(bisInspTravelPlan.getPlanId());
  150. bisInspAll.setIsTravel("0");
  151. bisInspAllDao.update(bisInspAll);
  152. }
  153. return bisInspTravelPlanDao.cancelTravelPlan(travelPlanId);
  154. }
  155. private Map<String, Object> getDataMap(Map<String, Object> dataMap, BisInspTravelPlan bisInspTravelPlan) {
  156. dataMap.put("title", bisInspTravelPlan.getTitle());
  157. dataMap.put("dayList", bisInspTravelPlan.getBisInspTravelPlanDayList());
  158. dataMap.put("sttm", bisInspTravelPlan.getSttm());
  159. dataMap.put("entm", bisInspTravelPlan.getEntm());
  160. /*List<Map<String, Object>> planDayList = new ArrayList<Map<String, Object>>();
  161. for (BisInspTravelPlanDay bisInspTravelPlanDay : bisInspTravelPlan.getBisInspTravelPlanDayList()
  162. ) {
  163. Map<String, Object> map = new HashMap<String, Object>();
  164. map.put("dayTitle", bisInspTravelPlanDay.getTitle());
  165. planDayList.add(map);
  166. List<Map<String, Object>> planPointList = new ArrayList<Map<String, Object>>();
  167. for (BisInspTravelPlanPoint bisInspTravelPlanPoint : bisInspTravelPlanDay.getBisInspTravelPlanPoints()) {
  168. Map<String, Object> mapPoint = new HashMap<String, Object>();
  169. mapPoint.put("pointTitle", bisInspTravelPlanPoint.getName());
  170. mapPoint.put("sttm", bisInspTravelPlanPoint.getSttm() == null ? "" : bisInspTravelPlanPoint.getSttm().toString());
  171. mapPoint.put("entm", bisInspTravelPlanPoint.getEntm() == null ? "" : bisInspTravelPlanPoint.getEntm().toInstant());
  172. planPointList.add(mapPoint);
  173. }
  174. dataMap.put("pointList", planPointList);
  175. }
  176. dataMap.put("dayList", planDayList);
  177. */
  178. return dataMap;
  179. }
  180. @Override
  181. public int update(BisInspTravelPlan bisInspTravelPlan) {
  182. bisInspTravelPlan.setUptm(new Date());
  183. //如果督查组不为空则设置 计划列表对象关联到路书
  184. if (null != bisInspTravelPlan.getPlanId()) {
  185. BisInspAll bisInspAll = new BisInspAll();
  186. bisInspAll.setId(bisInspTravelPlan.getPlanId());
  187. bisInspAll.setIsTravel("1");
  188. bisInspAllDao.update(bisInspAll);
  189. }
  190. return bisInspTravelPlanDao.update(bisInspTravelPlan);
  191. }
  192. @Override
  193. public int delete(String id) {
  194. return bisInspTravelPlanDao.delete(id);
  195. }
  196. @Override
  197. public int insert(BisInspTravelPlan bisInspTravelPlan) {
  198. /**
  199. * 设置时间及其他参数
  200. */
  201. bisInspTravelPlan.setIntm(new Date());
  202. bisInspTravelPlan.setUptm(new Date());
  203. bisInspTravelPlan.setId(UuidUtil.uuid());
  204. bisInspTravelPlan.setDataStat("0");
  205. if (null == bisInspTravelPlan.getSttm()) {
  206. bisInspTravelPlan.setSttm(new Date());
  207. }
  208. if (null == bisInspTravelPlan.getDayCount()) {
  209. bisInspTravelPlan.setDayCount(1);
  210. }
  211. return bisInspTravelPlanDao.insert(bisInspTravelPlan);
  212. }
  213. }