ActivityService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  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.rm.health.bank.HealthBankMapping;
  15. import com.yihu.jw.util.ISqlUtils;
  16. import com.yihu.mysql.query.BaseJpaService;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  19. import org.springframework.jdbc.core.JdbcTemplate;
  20. import org.springframework.stereotype.Service;
  21. import javax.transaction.Transactional;
  22. import java.text.ParseException;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.Map;
  26. /**
  27. * @author wangzhinan
  28. * @create 2018-04-27 14:38
  29. * @desc health activity Service
  30. **/
  31. @Service
  32. @Transactional
  33. public class ActivityService extends BaseJpaService<ActivityDO,ActivityDao> {
  34. @Autowired
  35. private ActivityDao activityDao;
  36. @Autowired
  37. private TaskPatientDetailDao taskPatientDetailDao;
  38. @Autowired
  39. private TaskDao taskDao;
  40. @Autowired
  41. private JdbcTemplate jdbcTemplate;
  42. @Autowired
  43. private ActivityRuleDao activityRuleDao;
  44. /**
  45. * insert activityDO
  46. *
  47. * @param activityDO 活动参数对象
  48. * @return
  49. */
  50. public MixEnvelop<Boolean, Boolean> insert(ActivityDO activityDO,String value1,String value2,String value3){
  51. if (value2 != null){
  52. JSONObject object = JSONObject.parseObject(value2);
  53. activityDO.setActivityOfflineTime(object.getDate("activityOfflineTime"));
  54. activityDO.setRegistrationTime(object.getDate("registrationTime"));
  55. activityDO.setDeadLine(object.getDate("deadLine"));
  56. }
  57. activityDO.setCreateTime(new Date());
  58. activityDO.setUpdateTime(new Date());
  59. activityDO.setDel(1);
  60. activityDO= activityDao.save(activityDO);
  61. ActivityRuleDO activityRuleDO = new ActivityRuleDO();
  62. activityRuleDO.setCreateTime(new Date());
  63. activityRuleDO.setUpdateTime(new Date());
  64. activityRuleDO.setActivityId(activityDO.getId());
  65. activityRuleDO.setSaasId("dev");
  66. activityRuleDO.setValue1(value1);
  67. activityRuleDO.setValue2(value2);
  68. activityRuleDO.setValue3(value3);
  69. activityRuleDO.setDel(1);
  70. activityRuleDao.save(activityRuleDO);
  71. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  72. envelop.setObj(true);
  73. return envelop;
  74. }
  75. /**
  76. * find by condition
  77. *
  78. * @param activityDO 活动参数对象
  79. * @param page 页码
  80. * @param size 每页大小
  81. * @return
  82. * @throws ParseException
  83. */
  84. public MixEnvelop<ActivityDO, ActivityDO> findByCondition(ActivityDO activityDO, Integer page, Integer size) throws ParseException {
  85. String sql = new ISqlUtils().getSql(activityDO,page,size,"*");
  86. List<ActivityDO> activityDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(ActivityDO.class));
  87. for (ActivityDO activityDO1:activityDOS){
  88. String taskSql = "SELECT" +
  89. " COUNT(1) AS total1 " +
  90. "FROM " +
  91. " ( " +
  92. " SELECT DISTINCT " +
  93. " (btpd.patient_id) " +
  94. " FROM " +
  95. " wlyy_health_bank_task_patient_detail btpd " +
  96. " WHERE " +
  97. " activity_id = '" +activityDO1.getId()+
  98. "' ) btpd1";
  99. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(taskSql);
  100. Long count = 0L;
  101. if(rstotal!=null&&rstotal.size()>0){
  102. count = (Long) rstotal.get(0).get("total1");
  103. }
  104. activityDO1.setTotal(count);
  105. String taskSql1 = "select * from wlyy_health_bank_task_patient_detail btpd where activity_id = '"+activityDO1.getId()
  106. +"' and (patient_idcard = '"+activityDO.getPatientIdcard()+"' OR union_id = '"+activityDO.getUnionId()+"')";
  107. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  108. activityDO1.setTaskPatientDetailDOS(taskPatientDetailDOS);
  109. String tasksql = "select * from wlyy_health_bank_task where transaction_id = '"+activityDO1.getId()+"'";
  110. List<TaskDO> taskDOList = jdbcTemplate.query(tasksql,new BeanPropertyRowMapper(TaskDO.class));
  111. activityDO1.setTaskDOS(taskDOList);
  112. }
  113. String sqlcount = new ISqlUtils().getSql(activityDO,0,0,"count");
  114. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  115. Long count = 0L;
  116. if(rstotal!=null&&rstotal.size()>0){
  117. count = (Long) rstotal.get(0).get("total");
  118. }
  119. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success,activityDOS,page,size,count);
  120. }
  121. /**
  122. * update activityDO
  123. *
  124. * @param activityDO 活动参数对象
  125. * @return
  126. */
  127. public MixEnvelop<Boolean, Boolean> update(ActivityDO activityDO){
  128. activityDao.save(activityDO);
  129. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  130. envelop.setObj(true);
  131. return envelop;
  132. }
  133. /**
  134. * 获取参与的活动
  135. *
  136. * @param activityDO 活动对象
  137. * @param page 页码
  138. * @param size 分页大小
  139. * @return
  140. */
  141. public MixEnvelop<ActivityDO, ActivityDO> selectByPatient(ActivityDO activityDO, Integer page, Integer size){
  142. String sql ="SELECT * " +
  143. " FROM wlyy_health_bank_activity " +
  144. "WHERE " +
  145. "id IN ( " +
  146. "SELECT bt.transaction_id " +
  147. "FROM wlyy_health_bank_task bt " +
  148. "WHERE id IN (" +
  149. " SELECT task_id FROM " +
  150. "wlyy_health_bank_task_patient_detail" +
  151. " WHERE " +
  152. " patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"')" +
  153. " )" +
  154. " LIMIT "+(page-1)*size +","+size;
  155. List<ActivityDO> activityDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(ActivityDO.class));
  156. for (ActivityDO activityDO1:activityDOS){
  157. String activitySql ="SELECT btpd1.sum AS total FROM (SELECT " +
  158. " SUM(total) AS sum , " +
  159. " patient_id, " +
  160. " patient_openid, " +
  161. " patient_idcard, " +
  162. " activity_id," +
  163. " union_id " +
  164. " FROM " +
  165. " wlyy_health_bank_task_patient_detail " +
  166. "GROUP BY patient_openid,patient_idcard,union_id)btpd1 " +
  167. "WHERE " +
  168. " btpd1.activity_id = '"+activityDO1.getId() +"' AND patient_openid = '"+activityDO.getOpenId()+ "' AND patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"'";
  169. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(activitySql);
  170. Long count = 0L;
  171. if(rstotal!=null&&rstotal.size()>0){
  172. Object object = rstotal.get(0).get("total");
  173. count = Long.parseLong(object.toString());
  174. }
  175. activityDO1.setSum(count);
  176. String rankingSql = "SELECT count(1)+1 AS total FROM (SELECT " +
  177. " SUM(total) AS sum , " +
  178. " patient_id, " +
  179. " patient_openid, " +
  180. " patient_idcard, " +
  181. " activity_id " +
  182. "FROM " +
  183. " wlyy_health_bank_task_patient_detail " +
  184. "GROUP BY patient_openid,patient_idcard,union_id)btpd1 " +
  185. "WHERE " +
  186. " btpd1.activity_id = '"+activityDO1.getId()+"' AND btpd1.sum >" +activityDO1.getSum() ;
  187. List<Map<String,Object>> rstotal1 = jdbcTemplate.queryForList(rankingSql);
  188. Integer count1 = 0;
  189. if(rstotal1!=null&&rstotal1.size()>0){
  190. Object object = rstotal1.get(0).get("total");
  191. count1 = Integer.parseInt(object.toString());
  192. }
  193. activityDO1.setActivityRanking(count1);
  194. String taskSql = "SELECT" +
  195. " COUNT(1) AS total1 " +
  196. "FROM " +
  197. " ( " +
  198. " SELECT * " +
  199. " FROM " +
  200. " wlyy_health_bank_task_patient_detail btpd " +
  201. " WHERE " +
  202. " activity_id = '" +activityDO1.getId()+
  203. "' GROUP BY patient_openid,patient_idcard,union_id) btpd1";
  204. List<Map<String,Object>> rstotal2 = jdbcTemplate.queryForList(taskSql);
  205. Long count2 = 0L;
  206. if(rstotal2!=null&&rstotal2.size()>0){
  207. count2 = (Long) rstotal2.get(0).get("total1");
  208. }
  209. activityDO1.setTotal(count2);
  210. }
  211. String sqlcount = "SELECT count(1) AS total" +
  212. " FROM wlyy_health_bank_activity " +
  213. "WHERE " +
  214. "id IN ( " +
  215. "SELECT bt.transaction_id " +
  216. "FROM wlyy_health_bank_task bt " +
  217. "WHERE id IN (" +
  218. " SELECT task_id FROM " +
  219. "wlyy_health_bank_task_patient_detail" +
  220. " WHERE " +
  221. " patient_openid = '"+activityDO.getOpenId()+ "' AND patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"' )" +
  222. " )";
  223. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  224. Long count = 0L;
  225. if(rstotal!=null&&rstotal.size()>0){
  226. count = (Long) rstotal.get(0).get("total");
  227. }
  228. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success,activityDOS,page,size,count);
  229. }
  230. /**
  231. * 批量删除活动
  232. *
  233. * @param ids 活动id集合
  234. * @return
  235. */
  236. public MixEnvelop<Boolean, Boolean> batchDelete(List<String> ids){
  237. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  238. for (int i =0;i<ids.size();i++){
  239. List<TaskDO> taskDOList = taskDao.selectByActivityId(ids.get(i));
  240. for (TaskDO taskDO:taskDOList){
  241. taskDO.setStatus(0);
  242. taskDO.setCreateTime(new Date());
  243. taskDO.setUpdateTime(new Date());
  244. taskDao.save(taskDO);
  245. }
  246. List<TaskPatientDetailDO> taskPatientDetailDOS = taskPatientDetailDao.selectByActivityId(ids.get(i));
  247. for(TaskPatientDetailDO taskPatientDetailDO:taskPatientDetailDOS){
  248. taskPatientDetailDO.setStatus(-1);
  249. taskPatientDetailDO.setCreateTime(new Date());
  250. taskPatientDetailDO.setUpdateTime(new Date());
  251. taskPatientDetailDao.save(taskPatientDetailDO);
  252. }
  253. ActivityDO activityDO = activityDao.findOne(ids.get(i));
  254. activityDO.setStatus(-1);
  255. activityDO.setCreateTime(new Date());
  256. activityDO.setUpdateTime(new Date());
  257. activityDao.save(activityDO);
  258. }
  259. return envelop;
  260. }
  261. }