ActivityService.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. package com.yihu.jw.service;/**
  2. * Created by nature of king on 2018/4/27.
  3. */
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.yihu.jw.dao.ActivityDao;
  6. import com.yihu.jw.dao.ActivityRuleDao;
  7. import com.yihu.jw.dao.TaskDao;
  8. import com.yihu.jw.dao.TaskPatientDetailDao;
  9. import com.yihu.jw.entity.health.bank.ActivityDO;
  10. import com.yihu.jw.entity.health.bank.ActivityRuleDO;
  11. import com.yihu.jw.entity.health.bank.TaskDO;
  12. import com.yihu.jw.entity.health.bank.TaskPatientDetailDO;
  13. import com.yihu.jw.restmodel.web.MixEnvelop;
  14. import com.yihu.jw.restmodel.web.ObjEnvelop;
  15. import com.yihu.jw.rm.health.bank.HealthBankMapping;
  16. import com.yihu.jw.util.ISqlUtils;
  17. import com.yihu.jw.util.date.DateUtil;
  18. import com.yihu.mysql.query.BaseJpaService;
  19. import org.apache.commons.lang.time.DateFormatUtils;
  20. import org.apache.commons.lang3.StringUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  23. import org.springframework.jdbc.core.JdbcTemplate;
  24. import org.springframework.stereotype.Service;
  25. import javax.transaction.Transactional;
  26. import java.text.ParseException;
  27. import java.text.SimpleDateFormat;
  28. import java.util.Date;
  29. import java.util.List;
  30. import java.util.Map;
  31. /**
  32. * @author wangzhinan
  33. * @create 2018-04-27 14:38
  34. * @desc health activity Service
  35. **/
  36. @Service
  37. @Transactional
  38. public class ActivityService extends BaseJpaService<ActivityDO,ActivityDao> {
  39. @Autowired
  40. private ActivityDao activityDao;
  41. @Autowired
  42. private TaskPatientDetailDao taskPatientDetailDao;
  43. @Autowired
  44. private TaskDao taskDao;
  45. @Autowired
  46. private JdbcTemplate jdbcTemplate;
  47. @Autowired
  48. private ActivityRuleDao activityRuleDao;
  49. /**
  50. * insert activityDO
  51. *
  52. * @param activityDO 活动参数对象
  53. * @return
  54. */
  55. public MixEnvelop<Boolean, Boolean> insert(ActivityDO activityDO,String value1,String value2,String value3){
  56. if (value2 != null){
  57. JSONObject object = JSONObject.parseObject(value2);
  58. activityDO.setActivityOfflineTime(object.getDate("activityOfflineTime"));
  59. activityDO.setRegistrationTime(object.getDate("registrationTime"));
  60. activityDO.setDeadLine(object.getDate("deadLine"));
  61. }
  62. activityDO.setCreateTime(new Date());
  63. activityDO.setUpdateTime(new Date());
  64. // if (1 == activityDO.getStatus()) {
  65. // activityDO.setReleaseTime(new Date());
  66. // }
  67. activityDO.setDelFlag(1);
  68. activityDO= activityDao.save(activityDO);
  69. ActivityRuleDO activityRuleDO = new ActivityRuleDO();
  70. activityRuleDO.setCreateTime(new Date());
  71. activityRuleDO.setUpdateTime(new Date());
  72. activityRuleDO.setActivityId(activityDO.getId());
  73. activityRuleDO.setSaasId("dev");
  74. activityRuleDO.setValue1(value1);
  75. activityRuleDO.setValue2(value2);
  76. activityRuleDO.setValue3(value3);
  77. activityRuleDO.setDelFlag(1);
  78. activityRuleDao.save(activityRuleDO);
  79. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  80. envelop.setObj(true);
  81. return envelop;
  82. }
  83. /**
  84. * find by condition
  85. *
  86. * @param activityDO 活动参数对象
  87. * @param page 页码
  88. * @param size 每页大小
  89. * @return
  90. * @throws ParseException
  91. */
  92. public MixEnvelop<ActivityDO, ActivityDO> findByCondition(ActivityDO activityDO, Integer page, Integer size) throws ParseException {
  93. String sql = new ISqlUtils().getSql(activityDO,page,size,"*");
  94. List<ActivityDO> activityDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(ActivityDO.class));
  95. for (ActivityDO activityDO1:activityDOS){
  96. String taskSql = "SELECT" +
  97. " COUNT(1) AS total1 " +
  98. "FROM " +
  99. " ( " +
  100. " SELECT DISTINCT " +
  101. " (btpd.patient_id) " +
  102. " FROM " +
  103. " wlyy_health_bank_task_patient_detail btpd " +
  104. " WHERE " +
  105. " activity_id = '" +activityDO1.getId()+
  106. "' ) btpd1";
  107. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(taskSql);
  108. Long count = 0L;
  109. if(rstotal!=null&&rstotal.size()>0){
  110. count = (Long) rstotal.get(0).get("total1");
  111. }
  112. activityDO1.setTotal(count);
  113. String taskSql1 = "select * from wlyy_health_bank_task_patient_detail btpd where activity_id = '"+activityDO1.getId()
  114. +"' and (patient_idcard = '"+activityDO.getPatientIdcard()+"' OR union_id = '"+activityDO.getUnionId()+"')";
  115. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  116. activityDO1.setTaskPatientDetailDOS(taskPatientDetailDOS);
  117. String tasksql = "select * from wlyy_health_bank_task where transaction_id = '"+activityDO1.getId()+"'";
  118. List<TaskDO> taskDOList = jdbcTemplate.query(tasksql,new BeanPropertyRowMapper(TaskDO.class));
  119. activityDO1.setTaskDOS(taskDOList);
  120. }
  121. String sqlcount = new ISqlUtils().getSql(activityDO,0,0,"count");
  122. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  123. Long count = 0L;
  124. if(rstotal!=null&&rstotal.size()>0){
  125. count = (Long) rstotal.get(0).get("total");
  126. }
  127. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success,activityDOS,page,size,count);
  128. }
  129. /**
  130. * update activityDO
  131. *
  132. * @param activityDO 活动参数对象
  133. * @return
  134. */
  135. public MixEnvelop<Boolean, Boolean> update(ActivityDO activityDO, String value1, String value2, String value3) throws Exception {
  136. if (StringUtils.isBlank(activityDO.getId())) {
  137. throw new Exception("活动id不能为空!");
  138. }
  139. ActivityRuleDO activityRuleDO = activityRuleDao.selectByActivityId(activityDO.getId());
  140. activityRuleDO.setUpdateTime(new Date());
  141. activityRuleDO.setSaasId("dev");
  142. // if (1 == activityDO.getStatus()) {
  143. // activityDO.setReleaseTime(new Date());
  144. // }
  145. activityRuleDO.setValue1(value1);
  146. activityRuleDO.setValue2(value2);
  147. activityRuleDO.setValue3(value3);
  148. activityRuleDO.setDelFlag(1);
  149. activityRuleDO= activityRuleDao.save(activityRuleDO);
  150. activityDao.save(activityDO);
  151. activityDO.setActivityRuleDO(activityRuleDO);
  152. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  153. envelop.setObj(true);
  154. return envelop;
  155. }
  156. /**
  157. * 获取参与的活动
  158. *
  159. * @param activityDO 活动对象
  160. * @param page 页码
  161. * @param size 分页大小
  162. * @return
  163. */
  164. public MixEnvelop<ActivityDO, ActivityDO> selectByPatient(ActivityDO activityDO, Integer page, Integer size){
  165. String sql ="SELECT * " +
  166. " FROM wlyy_health_bank_activity " +
  167. "WHERE " +
  168. "id IN ( " +
  169. "SELECT bt.transaction_id " +
  170. "FROM wlyy_health_bank_task bt " +
  171. "WHERE id IN (" +
  172. " SELECT task_id FROM " +
  173. "wlyy_health_bank_task_patient_detail" +
  174. " WHERE " +
  175. " patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"')" +
  176. " )" +
  177. " LIMIT "+(page-1)*size +","+size;
  178. List<ActivityDO> activityDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(ActivityDO.class));
  179. for (ActivityDO activityDO1:activityDOS){
  180. String activitySql ="SELECT btpd1.sum AS total FROM (SELECT " +
  181. " SUM(total) AS sum , " +
  182. " patient_id, " +
  183. " patient_openid, " +
  184. " patient_idcard, " +
  185. " activity_id," +
  186. " union_id " +
  187. " FROM " +
  188. " wlyy_health_bank_task_patient_detail " +
  189. "GROUP BY patient_openid,patient_idcard,union_id)btpd1 " +
  190. "WHERE " +
  191. " btpd1.activity_id = '"+activityDO1.getId() +"' AND patient_openid = '"+activityDO.getOpenId()+ "' AND patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"'";
  192. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(activitySql);
  193. Long count = 0L;
  194. if(rstotal!=null&&rstotal.size()>0){
  195. Object object = rstotal.get(0).get("total");
  196. count = Long.parseLong(object.toString());
  197. }
  198. activityDO1.setSum(count);
  199. String rankingSql = "SELECT count(1)+1 AS total FROM (SELECT " +
  200. " SUM(total) AS sum , " +
  201. " patient_id, " +
  202. " patient_openid, " +
  203. " patient_idcard, " +
  204. " activity_id " +
  205. "FROM " +
  206. " wlyy_health_bank_task_patient_detail " +
  207. "GROUP BY patient_openid,patient_idcard,union_id)btpd1 " +
  208. "WHERE " +
  209. " btpd1.activity_id = '"+activityDO1.getId()+"' AND btpd1.sum >" +activityDO1.getSum() ;
  210. List<Map<String,Object>> rstotal1 = jdbcTemplate.queryForList(rankingSql);
  211. Integer count1 = 0;
  212. if(rstotal1!=null&&rstotal1.size()>0){
  213. Object object = rstotal1.get(0).get("total");
  214. count1 = Integer.parseInt(object.toString());
  215. }
  216. activityDO1.setActivityRanking(count1);
  217. String taskSql = "SELECT" +
  218. " COUNT(1) AS total1 " +
  219. "FROM " +
  220. " ( " +
  221. " SELECT * " +
  222. " FROM " +
  223. " wlyy_health_bank_task_patient_detail btpd " +
  224. " WHERE " +
  225. " activity_id = '" +activityDO1.getId()+
  226. "' GROUP BY patient_openid,patient_idcard,union_id) btpd1";
  227. List<Map<String,Object>> rstotal2 = jdbcTemplate.queryForList(taskSql);
  228. Long count2 = 0L;
  229. if(rstotal2!=null&&rstotal2.size()>0){
  230. count2 = (Long) rstotal2.get(0).get("total1");
  231. }
  232. activityDO1.setTotal(count2);
  233. }
  234. String sqlcount = "SELECT count(1) AS total" +
  235. " FROM wlyy_health_bank_activity " +
  236. "WHERE " +
  237. "id IN ( " +
  238. "SELECT bt.transaction_id " +
  239. "FROM wlyy_health_bank_task bt " +
  240. "WHERE id IN (" +
  241. " SELECT task_id FROM " +
  242. "wlyy_health_bank_task_patient_detail" +
  243. " WHERE " +
  244. " patient_openid = '"+activityDO.getOpenId()+ "' AND patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"' )" +
  245. " )";
  246. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  247. Long count = 0L;
  248. if(rstotal!=null&&rstotal.size()>0){
  249. count = (Long) rstotal.get(0).get("total");
  250. }
  251. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success,activityDOS,page,size,count);
  252. }
  253. /**
  254. * 批量删除活动
  255. *
  256. * @param ids 活动id集合
  257. * @return
  258. */
  259. public MixEnvelop<Boolean, Boolean> batchDelete(List<String> ids){
  260. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  261. for (int i =0;i<ids.size();i++){
  262. List<TaskDO> taskDOList = taskDao.selectByActivityId(ids.get(i));
  263. for (TaskDO taskDO:taskDOList){
  264. taskDO.setStatus(0);
  265. taskDO.setCreateTime(new Date());
  266. taskDO.setUpdateTime(new Date());
  267. taskDao.save(taskDO);
  268. }
  269. List<TaskPatientDetailDO> taskPatientDetailDOS = taskPatientDetailDao.selectByActivityId(ids.get(i));
  270. for(TaskPatientDetailDO taskPatientDetailDO:taskPatientDetailDOS){
  271. taskPatientDetailDO.setStatus(-1);
  272. taskPatientDetailDO.setCreateTime(new Date());
  273. taskPatientDetailDO.setUpdateTime(new Date());
  274. taskPatientDetailDao.save(taskPatientDetailDO);
  275. }
  276. ActivityRuleDO ruleDO = activityRuleDao.selectByActivityId(ids.get(i));
  277. if(null!=ruleDO){
  278. ruleDO.setDelFlag(0);
  279. activityRuleDao.save(ruleDO);
  280. }
  281. ActivityDO activityDO = activityDao.findOne(ids.get(i));
  282. activityDO.setStatus(-1);
  283. activityDO.setCreateTime(new Date());
  284. activityDO.setUpdateTime(new Date());
  285. activityDO.setDelFlag(0);
  286. activityDao.save(activityDO);
  287. }
  288. return envelop;
  289. }
  290. /**
  291. * 删除活动
  292. *
  293. * @param id 活动id
  294. * @return
  295. */
  296. public MixEnvelop<Boolean, Boolean> daleteActivity(String id){
  297. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  298. List<TaskDO> taskDOList = taskDao.selectByActivityId(id);
  299. for (TaskDO taskDO:taskDOList){
  300. taskDO.setStatus(0);
  301. taskDO.setCreateTime(new Date());
  302. taskDO.setUpdateTime(new Date());
  303. taskDao.save(taskDO);
  304. }
  305. List<TaskPatientDetailDO> taskPatientDetailDOS = taskPatientDetailDao.selectByActivityId(id);
  306. for(TaskPatientDetailDO taskPatientDetailDO:taskPatientDetailDOS){
  307. taskPatientDetailDO.setStatus(-1);
  308. taskPatientDetailDO.setCreateTime(new Date());
  309. taskPatientDetailDO.setUpdateTime(new Date());
  310. taskPatientDetailDao.save(taskPatientDetailDO);
  311. }
  312. ActivityRuleDO ruleDO = activityRuleDao.selectByActivityId(id);
  313. if(null!=ruleDO){
  314. ruleDO.setDelFlag(0);
  315. activityRuleDao.save(ruleDO);
  316. }
  317. ActivityDO activityDO = activityDao.findOne(id);
  318. activityDO.setStatus(-1);
  319. activityDO.setCreateTime(new Date());
  320. activityDO.setUpdateTime(new Date());
  321. activityDO.setDelFlag(0);
  322. activityDao.save(activityDO);
  323. return envelop;
  324. }
  325. /**
  326. * 编辑活动:上、下线,推荐
  327. * @param id
  328. * @param type 操作类型:上线:0,下线:2,推荐:3,取消推荐:4
  329. * @return
  330. * @throws Exception
  331. */
  332. public ActivityDO editActivity(String id, String type) throws Exception {
  333. ActivityDO activityDO = activityDao.findOne(id);
  334. ActivityRuleDO activityRuleDO= activityRuleDao.selectByActivityId(id);
  335. if("3".equals(type)){
  336. //推荐
  337. activityDO.setRecommended(1);
  338. }else if("4".equals(type)){
  339. //取消推荐
  340. activityDO.setRecommended(0);
  341. }
  342. else if("2".equals(type)){
  343. //下线
  344. activityDO.setStatus(2);
  345. }else if("1".equals(type)){
  346. //上线
  347. String ruleJson=null!=activityRuleDO?activityRuleDO.getValue2():"";
  348. JSONObject obj=JSONObject.parseObject(ruleJson);
  349. SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm");
  350. //报名截止时间
  351. Date registrationTime=null!=obj.get("registrationTime")? sdf.parse(obj.get("registrationTime").toString()):null;
  352. //参与截止时间
  353. Date deadLine=null!=obj.get("deadLine")? sdf.parse(obj.get("deadLine").toString()):null;
  354. //活动下线时间
  355. Date activityOfflineTime=null!=obj.get("activityOfflineTime")? sdf.parse(obj.get("activityOfflineTime").toString()):null;
  356. //获取当前时间
  357. Date now = DateUtil.strToDate(sdf.format(new Date()),"yyyy-MM-dd HH:mm");
  358. if(activityOfflineTime.compareTo(now)<=0){
  359. //活动下线
  360. activityDO.setStatus(2);
  361. }else if(activityOfflineTime.compareTo(now)>0 && deadLine.compareTo(now)<=0){
  362. //活动结束
  363. activityDO.setStatus(-1);
  364. }else if(deadLine.compareTo(now)>0&&registrationTime.compareTo(now)<=0){
  365. //活动未结束
  366. activityDO.setStatus(0);
  367. }else if (registrationTime.compareTo(now)>1){
  368. //报名未截止
  369. activityDO.setStatus(1);
  370. }
  371. }
  372. // activityDO.setReleaseTime(new Date());
  373. activityDO= activityDao.save(activityDO);
  374. return activityDO;
  375. }
  376. /**
  377. * 根据活动id获取活动详情+规则
  378. * @param id
  379. * @return
  380. * @throws Exception
  381. */
  382. public JSONObject findActivityById(String id)throws Exception{
  383. JSONObject obj=new JSONObject();
  384. ActivityDO activityDO = activityDao.findOne(id);
  385. obj.put("jsonData",activityDO);
  386. ActivityRuleDO activityRuleDO=new ActivityRuleDO();
  387. if(null!=activityDO){
  388. activityRuleDO= activityRuleDao.selectByActivityId(id);
  389. activityDO.setActivityRuleDO(activityRuleDO);
  390. }
  391. obj.put("value1",activityRuleDO.getValue1());
  392. obj.put("value2",activityRuleDO.getValue2());
  393. obj.put("value3",activityRuleDO.getValue3());
  394. return obj;
  395. }
  396. }