SendMessageContorller.java 17 KB

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