SendMessageContorller.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. package com.ssm.controller.business;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. import java.util.List;
  9. import java.util.Map;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import javax.servlet.http.HttpSession;
  13. import com.alibaba.fastjson.JSON;
  14. import net.sf.json.JSONObject;
  15. import org.apache.log4j.Logger;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Controller;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import org.springframework.ui.Model;
  20. import org.springframework.validation.BindingResult;
  21. import org.springframework.validation.FieldError;
  22. import org.springframework.validation.annotation.Validated;
  23. import org.springframework.web.bind.annotation.ModelAttribute;
  24. import org.springframework.web.bind.annotation.RequestMapping;
  25. import org.springframework.web.bind.annotation.RequestMethod;
  26. import org.springframework.web.bind.annotation.RequestParam;
  27. import org.springframework.web.bind.annotation.ResponseBody;
  28. import org.springframework.web.multipart.MultipartFile;
  29. import org.springframework.web.multipart.MultipartHttpServletRequest;
  30. import com.ssm.model.business.SmsRecord;
  31. import com.ssm.model.business.SmsSendState;
  32. import com.ssm.model.business.SmsUpMessage;
  33. import com.ssm.model.business.SmsUser;
  34. import com.ssm.model.system.SysDictionary;
  35. import com.ssm.model.system.SysUser;
  36. import com.ssm.service.business.SmsRecordService;
  37. import com.ssm.service.business.SmsSendStateService;
  38. import com.ssm.service.business.SmsUpMessageService;
  39. import com.ssm.service.business.SmsUserService;
  40. import com.ssm.service.business.UploadService;
  41. import com.ssm.service.system.SysDictionaryService;
  42. import com.ssm.util.MD5Utils;
  43. import com.ssm.util.Util;
  44. import com.ssm.util.page.PagedResult;
  45. import com.ssm.util.sms.SmsConst;
  46. import com.ssm.util.sms.SmsUtil;
  47. import com.ssm.util.sms.UploadProcess;
  48. import com.ssm.util.sms.excel.exception.ExcelParseException;
  49. import com.ssm.util.sms.excel.parser.ExcelParserImpl;
  50. import com.ssm.util.sms.excel.validation.rule.ValidationRule;
  51. import com.ssm.web.Const;
  52. import com.ssm.web.RoleLimit;
  53. import com.ssm.web.WithoutUserLogin;
  54. @RequestMapping("sms")
  55. @Controller
  56. public class SendMessageContorller {
  57. static Logger logger = Logger.getLogger(SendMessageContorller.class);
  58. @Autowired
  59. private SmsUserService smsUserService;
  60. @Autowired
  61. private SmsRecordService smsRecordService;
  62. @Autowired
  63. private SmsSendStateService smsSendStateService;
  64. @Autowired
  65. private SysDictionaryService sysDictionaryService;
  66. @Autowired
  67. private SmsUpMessageService smsUpMessageService;
  68. @Autowired
  69. private UploadService uploadService;
  70. /**
  71. * 进入发送信息主页面
  72. * @param model
  73. * @return
  74. */
  75. @RoleLimit(pid = "sms", mid = "sendSmsList")
  76. @RequestMapping(value="sendSmsList")
  77. public String sendSmsListMessage(Model model){
  78. List<SysDictionary> constList = sysDictionaryService.selectByEnabledNamespace(SmsConst.SMS_DEPARTMENT);
  79. model.addAttribute("constList", constList);
  80. return "sms/sendSmsList";
  81. }
  82. /**
  83. * 加载用户数据
  84. * @param request
  85. * @param model
  86. * @param smsUser
  87. * @param pageNo
  88. * @param pageSize
  89. * @return
  90. */
  91. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  92. @RequestMapping(value="initDataList")
  93. public String initDataList(HttpServletRequest request, Model model,SmsUser smsUser, Integer pageNo, Integer pageSize){
  94. PagedResult<SmsUser> smsUserList = smsUserService.selectSmsUser(smsUser,pageNo,pageSize);
  95. model.addAttribute("list", smsUserList);
  96. return "sms/dataList";
  97. }
  98. /**
  99. * 发送短信
  100. *
  101. * @param request
  102. * @return
  103. */
  104. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  105. @Transactional(value = "txManager")
  106. @RequestMapping(value = "sendMessage")
  107. public Map<String, Object> sendMessage(HttpServletRequest request) {
  108. SysUser sysuser = Util.getUserSession(request);
  109. Map<String, Object> map = new HashMap<String, Object>();
  110. if (sysuser != null) {
  111. try {
  112. request.setCharacterEncoding("utf-8");
  113. String smsUserPhoens = request.getParameter("smsUserPhoens");
  114. String content = request.getParameter("content");
  115. String res = SmsUtil.sendNewSmsPost(smsUserPhoens, content);
  116. Map mapObj = JSON.parseObject(res, Map.class);
  117. String msgNo = mapObj.get("msg_no").toString();
  118. Integer code = Integer.valueOf(mapObj.get("code").toString());
  119. //将短信记录保存进数据库
  120. SmsRecord smsRecord = new SmsRecord();
  121. smsRecord.setContent(content);
  122. smsRecord.setCreateDate(new Date());
  123. smsRecord.setPhoens(smsUserPhoens);
  124. smsRecord.setMsgid(msgNo);
  125. smsRecordService.insertSelective(smsRecord);
  126. if (code == 0) {// 提交供应商成功,查询发送是否成功
  127. SmsSendState sss = new SmsSendState();
  128. sss.setMsgid(msgNo);
  129. sss.setCreateDate(new Date());
  130. sss.setContents(res);
  131. smsSendStateService.insertSelective(sss);
  132. map.put("status", SmsConst.SUCCESS);
  133. map.put("message", "发送成功");
  134. }
  135. } catch (Exception e) {
  136. map.put("status", SmsConst.ERROR);
  137. map.put("message", e);
  138. // System.err.println(e.getMessage());
  139. e.printStackTrace();
  140. }
  141. } else {
  142. map.put("status", SmsConst.FAILURE);
  143. map.put("message", "请登录以后再执行此操作");
  144. }
  145. return map;
  146. }
  147. /**
  148. * 接口发送短信
  149. * @param phones 手机号码
  150. * @param Contents 发送内容
  151. * @param md5 加密
  152. * @return
  153. */
  154. @WithoutUserLogin
  155. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  156. @Transactional(value = "txManager")
  157. @RequestMapping(value = "sendSms")
  158. public void sendSms(HttpServletRequest request, HttpServletResponse response) {
  159. JSONObject json = new JSONObject();
  160. try {
  161. request.setCharacterEncoding("utf-8");
  162. String smsUserPhoens = request.getParameter("phones");
  163. String content = request.getParameter("contents");
  164. String res = SmsUtil.sendNewSmsPost(smsUserPhoens, content);
  165. Map mapObj = JSON.parseObject(res, Map.class);
  166. String msgNo = mapObj.get("msg_no").toString();
  167. Integer code = Integer.valueOf(mapObj.get("code").toString());
  168. //将短信记录保存进数据库
  169. SmsRecord smsRecord = new SmsRecord();
  170. smsRecord.setContent(content);
  171. smsRecord.setCreateDate(new Date());
  172. smsRecord.setPhoens(smsUserPhoens);
  173. smsRecord.setMsgid(msgNo);
  174. smsRecordService.insertSelective(smsRecord);
  175. if (code == 0) {// 提交供应商成功,查询发送是否成功
  176. SmsSendState sss = new SmsSendState();
  177. sss.setMsgid(msgNo);
  178. sss.setCreateDate(new Date());
  179. sss.setContents(res);
  180. smsSendStateService.insertSelective(sss);
  181. json.element("status", "0");
  182. json.element("message", "发送成功");
  183. } else {
  184. json.element("status", "3");
  185. json.element("message", "校验失败");
  186. }
  187. } catch (Exception e) {
  188. json.element("status", SmsConst.ERROR);
  189. json.element("message", "发送异常");
  190. e.printStackTrace();
  191. }
  192. Util.json(response, json.toString());
  193. }
  194. /**
  195. * 接口发送短信
  196. * @param phones 手机号码
  197. * @param Contents 发送内容
  198. * @param md5 加密
  199. * @return
  200. */
  201. @WithoutUserLogin
  202. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  203. @Transactional(value = "txManager")
  204. @RequestMapping(value = "sendTemplateSms")
  205. public void sendTemplateSms(HttpServletRequest request, HttpServletResponse response) {
  206. JSONObject json = new JSONObject();
  207. try {
  208. request.setCharacterEncoding("utf-8");
  209. String smsUserPhones = request.getParameter("phones");
  210. String content = request.getParameter("contents");
  211. String templateId = request.getParameter("templateId");
  212. String res = SmsUtil.sendTemplateSmsPost(smsUserPhones, content, templateId);
  213. Map mapObj = JSON.parseObject(res, Map.class);
  214. String msgNo = mapObj.get("msg_no").toString();
  215. Integer code = Integer.valueOf(mapObj.get("code").toString());
  216. //将短信记录保存进数据库
  217. SmsRecord smsRecord = new SmsRecord();
  218. smsRecord.setContent(content);
  219. smsRecord.setCreateDate(new Date());
  220. smsRecord.setPhoens(smsUserPhones);
  221. smsRecord.setMsgid(msgNo);
  222. smsRecordService.insertSelective(smsRecord);
  223. if (code == 0) {// 提交供应商成功,查询发送是否成功
  224. SmsSendState sss = new SmsSendState();
  225. sss.setMsgid(msgNo);
  226. sss.setCreateDate(new Date());
  227. sss.setContents(res);
  228. smsSendStateService.insertSelective(sss);
  229. json.element("status", "0");
  230. json.element("message", "发送成功");
  231. } else {
  232. json.element("status", "3");
  233. json.element("message", "校验失败");
  234. }
  235. } catch (Exception e) {
  236. json.element("status", SmsConst.ERROR);
  237. json.element("message", "发送异常");
  238. e.printStackTrace();
  239. }
  240. Util.json(response, json.toString());
  241. }
  242. /**
  243. * 添加用户
  244. */
  245. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  246. @RequestMapping(value="addSmsUserGet")
  247. public String addSmsUserGet(Model model){
  248. List<SysDictionary> constList = sysDictionaryService.selectByEnabledNamespace(SmsConst.SMS_DEPARTMENT);
  249. model.addAttribute("constList", constList);
  250. if(!model.containsAttribute("smsUser"))
  251. model.addAttribute("smsUser", new SmsUser());
  252. return "sms/addSmsUserList";
  253. }
  254. /**
  255. * 将用户信息保存入数据库
  256. *
  257. */
  258. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  259. @Transactional(value="txManager")
  260. @RequestMapping(value="addSmsUser" , method = RequestMethod.POST)
  261. public String addSmsUser(@Validated @ModelAttribute("smsUser") SmsUser smsUser,BindingResult result,
  262. Model model,HttpServletRequest request){
  263. String phoen = smsUser.getPhoen();
  264. //查询号码是否已经存在
  265. int count = smsUserService.selectSmsUserCountByPhoen(phoen);
  266. if(count > 0){
  267. result.addError(new FieldError("smsUser", "phoen","该"+ phoen+" 号码已存在"));
  268. return addSmsUserGet(model);
  269. }
  270. SysUser sysUser = Util.getUserSession(request);
  271. smsUser.setCreateDate(new Date());
  272. smsUser.setUserid(sysUser.getUserid());
  273. smsUserService.insertSelective(smsUser);
  274. return "redirect:/sms/sendSmsList";
  275. }
  276. /**
  277. * 编辑用户
  278. * @param request
  279. * @param model
  280. * @return
  281. */
  282. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  283. @RequestMapping(value="updateSmsUser")
  284. public String updateSmsUser(HttpServletRequest request,Model model){
  285. List<SysDictionary> constList = sysDictionaryService.selectByEnabledNamespace(SmsConst.SMS_DEPARTMENT);
  286. String smsUserId= request.getParameter("smsuserId");
  287. SmsUser smsUser = smsUserService.selectSmsUserByUserId(Integer.valueOf(smsUserId));
  288. model.addAttribute("constList", constList);
  289. model.addAttribute("SmsUser", smsUser);
  290. return "sms/updateSmsUser";
  291. }
  292. /**
  293. * 编辑信息,保存到数据库
  294. * @param smsUser
  295. * @param result
  296. * @param request
  297. * @return
  298. */
  299. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  300. @RequestMapping(value="updateSmsUserSave")
  301. public String updateSmsUserSave(@Validated @ModelAttribute("smsUser") SmsUser smsUser,BindingResult result,
  302. HttpServletRequest request){
  303. SysUser sysUser = Util.getUserSession(request);
  304. smsUser.setCreateDate(new Date());
  305. smsUser.setUserid(sysUser.getUserid());
  306. smsUserService.updateSmsUserSave(smsUser);
  307. return "redirect:/sms/sendSmsList";
  308. }
  309. /**
  310. * 删除用户
  311. * @param smsuserIds
  312. * @return
  313. */
  314. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  315. @Transactional(value="txManager")
  316. @RequestMapping(value="deleteSmsUser")
  317. public Map<String,Object> deleteSmsUser(@RequestParam("smsuserIds") String smsuserIds){
  318. Map<String,Object> map = new HashMap<String, Object>();
  319. String[] suIds = smsuserIds.split(",");
  320. for (String suId : suIds) {
  321. int count = smsUserService.deleteByPrimaryKey(Integer.valueOf(suId));
  322. if(count == 1){
  323. map.put("status", SmsConst.SUCCESS);
  324. map.put("message", "删除成功");
  325. }else{
  326. map.put("status", SmsConst.FAILURE);
  327. map.put("message", "删除失败");
  328. }
  329. }
  330. return map;
  331. }
  332. /**
  333. * 进入导入用户页面
  334. * @param model
  335. * @return
  336. */
  337. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  338. @RequestMapping(value="smsUserImport", method = RequestMethod.GET)
  339. public String smsUserImport(Model model){
  340. List<SysDictionary> constList = sysDictionaryService.selectByEnabledNamespace(SmsConst.SMS_DEPARTMENT);
  341. model.addAttribute("constList", constList);
  342. return "sms/smsUserImport";
  343. }
  344. /**
  345. * 解析用户
  346. * @return
  347. * @throws IOException
  348. */
  349. @ResponseBody
  350. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  351. @RequestMapping(value="upload", method = RequestMethod.POST)
  352. public Map<String, Object> upload(MultipartHttpServletRequest request, HttpSession session) throws IOException{
  353. //获取部门分组
  354. final String classify = request.getParameter("classify");
  355. final SysUser user = Util.getUserSession(request);
  356. @SuppressWarnings("deprecation")
  357. String path = request.getRealPath("/upload");
  358. File dir = new File(path);
  359. if (!dir.exists())
  360. dir.mkdirs();
  361. UploadProcess process = new UploadProcess() {
  362. @Override
  363. public int doProcess(UploadService service,
  364. ExcelParserImpl excelParser) throws Exception {
  365. if (excelParser.getRow() < 2) {
  366. throw new Exception("表格为空!");
  367. }
  368. //验证规则
  369. //姓名不等于null
  370. ValidationRule rule1 = new ValidationRule("not null", new Integer[]{0,1});
  371. //电话号码必须是数字
  372. //RegexValidation regex2 = new RegexValidation("^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$", "“手机号码”列格式填写错误!");
  373. //ValidationRule rule2 = new ValidationRule("not null", new Integer[]{1});
  374. List<List<String>> buildList = excelParser.build(rule1);
  375. if(excelParser.getBuildMessage().length() != 0) {
  376. return 0;
  377. }
  378. int count = 0;
  379. for(int i =0;i<buildList.size();i++){
  380. List<String> list = buildList.get(i);
  381. SmsUser smsUser = new SmsUser();
  382. smsUser.setName(list.get(0).toString());
  383. smsUser.setPhoen(list.get(1).toString());
  384. smsUser.setClassify(classify);
  385. smsUser.setCreateDate(new Date());
  386. smsUser.setUserid(user.getUserid());
  387. count += service.addsmsUser(smsUser);
  388. }
  389. return count;
  390. }
  391. };
  392. Iterator<String> itr = request.getFileNames();
  393. MultipartFile mpf = null;
  394. while (itr.hasNext()) {
  395. mpf = request.getFile(itr.next());
  396. String fileName = mpf.getOriginalFilename();
  397. String suffix = fileName.substring(fileName.lastIndexOf("."));
  398. long time = new Date().getTime();
  399. File file = new File(path, time+suffix);
  400. mpf.transferTo(file);
  401. return this.uploadExcel(file, process);
  402. }
  403. return null;
  404. }
  405. public Map<String, Object> uploadExcel(File upload, UploadProcess process){
  406. return this.uploadExcel(upload, 0, process);
  407. }
  408. public Map<String, Object> uploadExcel(File upload, int index, UploadProcess process){
  409. Map<String, Object> map = new HashMap<String, Object>();
  410. ExcelParserImpl excelParser = new ExcelParserImpl(upload);
  411. try {
  412. excelParser.parse(index);
  413. } catch (ExcelParseException e) {
  414. e.printStackTrace();
  415. map.put("status", SmsConst.FAILURE);
  416. map.put("message", "表格读取异常");
  417. return map;
  418. }
  419. try {
  420. int count = process.doProcess(uploadService, excelParser);
  421. if(excelParser.getBuildMessage().length() != 0) {
  422. map.put("status", SmsConst.FAILURE);
  423. map.put("message", excelParser.getBuildMessage().toString());
  424. return map;
  425. } else {
  426. map.put("status", SmsConst.SUCCESS);
  427. map.put("message", "成功导入" + count + "条信息!");
  428. return map;
  429. }
  430. } catch (Exception e) {
  431. e.printStackTrace();
  432. map.put("status", SmsConst.FAILURE);
  433. map.put("message", e.getMessage());
  434. return map;
  435. }
  436. }
  437. /**
  438. * 进入历史记录页
  439. * @param model
  440. * @return
  441. */
  442. @RoleLimit(pid = "sms", mid = "sendHistoryList")
  443. @RequestMapping(value="sendHistoryList")
  444. public String sendHistory(Model model){
  445. return "sms/sendHistoryList";
  446. }
  447. /**
  448. * 加载历史记录数据
  449. * @param request
  450. * @param model
  451. * @param smsUser
  452. * @param pageNo
  453. * @param pageSize
  454. * @return
  455. */
  456. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID, mid = Const.SYSTEM_ROLE_LIMIT_MID)
  457. @RequestMapping(value="HistoryInItDataList")
  458. public String HistoryInItDataList(Model model,SmsRecord smsRecord, Integer pageNo, Integer pageSize){
  459. PagedResult<SmsRecord> smsRecordList = smsRecordService.selectSmsRecord(smsRecord,pageNo,pageSize);
  460. model.addAttribute("list", smsRecordList);
  461. return "sms/historyDataList";
  462. }
  463. /**
  464. * 查询上行数据,进入上行信息记录页
  465. * @param model
  466. * @return
  467. */
  468. @RoleLimit(pid="sms" , mid = "upMessageList")
  469. @RequestMapping(value="upMessageList")
  470. public String upMessage(Model model){
  471. //查询上行数据,并写入数据库
  472. try {
  473. List<String> list = SmsUtil.MongateCsGetSmsExExPost();
  474. SmsUpMessage smsUpMessage = null;
  475. for (String string : list) {
  476. String[] resuleArray = string.split(",");
  477. smsUpMessage = new SmsUpMessage();
  478. smsUpMessage.setDateTime(resuleArray[0]+" "+resuleArray[1]);
  479. smsUpMessage.setPhoen(resuleArray[2]);
  480. smsUpMessage.setUpGallery(resuleArray[3]);
  481. smsUpMessage.setUpGalleryChild(resuleArray[4]);
  482. smsUpMessage.setContent(resuleArray[5]);
  483. smsUpMessageService.insertSelective(smsUpMessage);
  484. }
  485. } catch (Exception e) {
  486. e.printStackTrace();
  487. }
  488. return "sms/upMessageList";
  489. }
  490. /**
  491. * 加载上行信息记录
  492. * @param model
  493. * @param smsRecord
  494. * @param pageNo
  495. * @param pageSize
  496. * @return
  497. */
  498. @RoleLimit(pid = Const.SYSTEM_ROLE_LIMIT_PID , mid = Const.SYSTEM_ROLE_LIMIT_MID)
  499. @RequestMapping(value="upMessageInItDataList")
  500. public String upMessageInItDataList(Model model,SmsUpMessage smsUpMessage, Integer pageNo, Integer pageSize){
  501. PagedResult<SmsUpMessage> smsUpMessageList = smsUpMessageService.selectsmsUpMessage(smsUpMessage,pageNo,pageSize);
  502. model.addAttribute("list", smsUpMessageList);
  503. return "sms/upMessageDataList";
  504. }
  505. }