CreditsDetailService.java 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. package com.yihu.jw.service;/**
  2. * Created by nature of king on 2018/4/27.
  3. */
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.yihu.base.mysql.query.BaseJpaService;
  7. import com.yihu.jw.dao.*;
  8. import com.yihu.jw.entity.health.bank.*;
  9. import com.yihu.jw.restmodel.common.Envelop;
  10. import com.yihu.jw.rm.health.bank.HealthBankMapping;
  11. import com.yihu.jw.util.DateUtils;
  12. import com.yihu.jw.util.ISqlUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  15. import org.springframework.jdbc.core.JdbcTemplate;
  16. import org.springframework.stereotype.Service;
  17. import javax.transaction.Transactional;
  18. import java.text.ParseException;
  19. import java.util.ArrayList;
  20. import java.util.Date;
  21. import java.util.List;
  22. import java.util.Map;
  23. /**
  24. * @author wangzhinan
  25. * @create 2018-04-27 16:53
  26. * @desc credits log info Service
  27. **/
  28. @Service
  29. @Transactional
  30. public class CreditsDetailService extends BaseJpaService<CreditsDetailDO,CredittsLogDetailDao> {
  31. @Autowired
  32. private CredittsLogDetailDao credittsLogDetailDao;
  33. @Autowired
  34. private TaskDao taskDao;
  35. @Autowired
  36. private ActivityDao activityDao;
  37. @Autowired
  38. private JdbcTemplate jdbcTemplate;
  39. @Autowired
  40. private AccountDao accountDao;
  41. @Autowired
  42. private TaskPatientDetailDao taskPatientDetailDao;
  43. @Autowired
  44. private TaskRuleDao taskRuleDao;
  45. /**
  46. * find creditsLogInfo
  47. *
  48. * @return
  49. * @throws ParseException
  50. */
  51. public Envelop<CreditsDetailDO> findByCondition(CreditsDetailDO creditsDetailDO, Integer page, Integer size) throws ParseException {
  52. String sql = new ISqlUtils().getSql(creditsDetailDO,page,size,"*");
  53. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  54. for (CreditsDetailDO creditsDetailDO1 : creditsDetailDOS){
  55. if (creditsDetailDO1.getTradeType() != null && creditsDetailDO1.getTradeType().equalsIgnoreCase("HEALTH_TASK")){
  56. TaskDO taskDO = taskDao.findOne(creditsDetailDO1.getTransactionId());
  57. creditsDetailDO1.setTaskDO(taskDO);
  58. }
  59. }
  60. String sqlcount = new ISqlUtils().getSql(creditsDetailDO,0,0,"count");
  61. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  62. Long count = 0L;
  63. if(rstotal!=null&&rstotal.size()>0){
  64. count = (Long) rstotal.get(0).get("total");
  65. }
  66. return Envelop.getSuccessListWithPage(HealthBankMapping.api_success, creditsDetailDOS,page,size,count);
  67. }
  68. /**
  69. * 获取账户信息
  70. *
  71. * @param creditsDetailDO
  72. * @return
  73. */
  74. public Envelop<AccountDO> findByTradeDirection(CreditsDetailDO creditsDetailDO){
  75. AccountDO accountDO1 = new AccountDO();
  76. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  77. String sql1 = ISqlUtils.getAllSql(accountDO1);
  78. List<AccountDO> accountDOS = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(AccountDO.class));
  79. if (accountDOS == null || accountDOS.size() == 0){
  80. accountDO1.setTotal(0);
  81. accountDO1.setAccountName(creditsDetailDO.getName());
  82. accountDO1.setCardNumber("jw");
  83. accountDO1.setHospital("海沧区");
  84. accountDO1.setPassword("321321312321");
  85. accountDO1.setHospitalName("haichan");
  86. accountDO1.setCreateTime(new Date());
  87. accountDO1.setUpdateTime(new Date());
  88. accountDao.save(accountDO1);
  89. }
  90. List<AccountDO> accountDOS1 = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(AccountDO.class));
  91. AccountDO accountDO = accountDOS1.get(0);
  92. String sql = "SELECT SUM(cd.integrate) as total FROM wlyy_health_bank_credits_detail cd where cd.trade_direction = "+creditsDetailDO.getTradeDirection() +" AND cd.patient_id = '" +creditsDetailDO.getPatientId()+"'";
  93. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sql);
  94. if (rstotal!= null && rstotal.size()>0){
  95. if (rstotal.get(0).get("total") == null){
  96. accountDO.setUsedTotal(0);
  97. }else {
  98. accountDO.setUsedTotal(Integer.parseInt(rstotal.get(0).get("total").toString()));
  99. }
  100. }
  101. return Envelop.getSuccess(HealthBankMapping.api_success,accountDO);
  102. }
  103. /*
  104. public Envelop<Boolean> exchangeGoods(GoodsDO goodsDO){
  105. CreditsDetailDO creditsLogDetailDO = new CreditsDetailDO();
  106. Envelop<Boolean> envelop = new Envelop<>();
  107. envelop.setObj(true);
  108. return envelop;
  109. }
  110. */
  111. public Envelop<AccountDO> selectByRanking(List<String> patientIds, Integer page, Integer size){
  112. StringBuffer buffer = new StringBuffer();
  113. buffer.append(" ba.patient_id in(");
  114. if (patientIds == null || patientIds.size() == 0){
  115. buffer.append("''");
  116. }else {
  117. for (int i=0;i<patientIds.size();i++){
  118. buffer.append("'"+patientIds.get(i)+"'").append(",");
  119. }
  120. buffer.deleteCharAt(buffer.length()-1);
  121. }
  122. buffer.append(") ");
  123. String sql =
  124. "SELECT ba1.patient_id AS patient_id," +
  125. "ba1.account_name AS account_name," +
  126. "ba1.hospital AS hospital," +
  127. "ba1.total AS total," +
  128. "ba1.create_time AS create_time," +
  129. "ba1.sum AS sum" +
  130. " FROM" +
  131. "( SELECT " +
  132. "ba.patient_id AS patient_id," +
  133. "ba.account_name AS account_name," +
  134. "ba.hospital AS hospital," +
  135. "ba.total AS total," +
  136. "ba.create_time AS create_time," +
  137. "(ba.total +COALESCE((cd1.total),0)) AS sum" +
  138. " FROM" +
  139. " wlyy_health_bank_account ba" +
  140. " LEFT JOIN ( " +
  141. "SELECT" +
  142. " SUM(cd.integrate) AS total," +
  143. " cd.patient_id AS patient_id" +
  144. " FROM" +
  145. " wlyy_health_bank_credits_detail cd" +
  146. " WHERE " +
  147. "cd.trade_direction = - 1" +
  148. " GROUP BY " +
  149. " cd.patient_id ) cd1 ON cd1.patient_id = ba.patient_id " +
  150. " WHERE " + buffer +
  151. " ORDER BY" +
  152. " ba.create_time DESC " +
  153. "LIMIT "+(page-1)*size+","+size +")ba1" +
  154. " ORDER BY " +
  155. " ba1.sum DESC";
  156. List<AccountDO> accountDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(AccountDO.class));
  157. String sqlCount = "SELECT count(1) AS total"+
  158. " FROM " +
  159. " wlyy_health_bank_account ba LEFT JOIN " +
  160. " ( " +
  161. " SELECT " +
  162. " SUM(cd.integrate) AS total, " +
  163. " cd.patient_id AS patient_id " +
  164. " FROM " +
  165. " wlyy_health_bank_credits_detail cd " +
  166. " WHERE " +
  167. " cd.trade_direction = - 1 " +
  168. " GROUP BY " +
  169. " cd.patient_id " +
  170. " ) cd1 ON cd1.patient_id = ba.patient_id " +
  171. "WHERE " + buffer +
  172. " ORDER BY " +
  173. " ba.create_time, " +
  174. " (ba.total + COALESCE(cd1.total,0)) DESC ";
  175. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  176. Long count = 0L;
  177. if(rstotal!=null&&rstotal.size()>0){
  178. count = (Long) rstotal.get(0).get("total");
  179. }
  180. return Envelop.getSuccessListWithPage(HealthBankMapping.api_success, accountDOS,page,size,count);
  181. }
  182. /**
  183. * 添加积分
  184. *
  185. * @param creditsDetailDO
  186. * @return
  187. */
  188. public Envelop<CreditsDetailDO> insert(CreditsDetailDO creditsDetailDO){
  189. try {
  190. synchronized (creditsDetailDO.getPatientId()){
  191. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '"+creditsDetailDO.getPatientId() +"'";
  192. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  193. if (accountDOList != null && accountDOList.size() != 0){
  194. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  195. }else {
  196. AccountDO accountDO1 = new AccountDO();
  197. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  198. accountDO1.setTotal(0);
  199. accountDO1.setAccountName(creditsDetailDO.getName());
  200. accountDO1.setCardNumber(creditsDetailDO.getIdCard());
  201. accountDO1.setHospital("350205");
  202. accountDO1.setPassword("321321312321");
  203. accountDO1.setHospitalName("海沧区");
  204. accountDO1.setCreateTime(new Date());
  205. accountDO1.setUpdateTime(new Date());
  206. accountDao.save(accountDO1);
  207. List<AccountDO> accountDOS = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  208. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  209. }
  210. TaskDO taskDO = new TaskDO();
  211. taskDO.setTaskCode(creditsDetailDO.getFlag());
  212. taskDO.setId(creditsDetailDO.getTransactionId());
  213. /*taskDO.setPatientId(creditsDetailDO.getPatientId());*/
  214. String sql = ISqlUtils.getSql(taskDO,1,1,"*");
  215. List<TaskDO> taskDOList = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskDO.class));
  216. creditsDetailDO.setTransactionId(taskDOList.get(0).getId());
  217. TaskRuleDO taskRuleDO = taskRuleDao.findOne(taskDOList.get(0).getRuleCode());
  218. creditsDetailDO.setIntegrate(taskRuleDO.getIntegrate());
  219. creditsDetailDO.setTradeDirection(taskRuleDO.getTradeDirection());
  220. String taskSql = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDOList.get(0).getId()+"' and patient_id = '" + creditsDetailDO.getPatientId() +"'";
  221. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(taskSql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  222. if (taskPatientDetailDOS == null || taskPatientDetailDOS.size() ==0){
  223. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  224. taskPatientDetailDO.setTaskId(creditsDetailDO.getTransactionId());
  225. taskPatientDetailDO.setSaasId(creditsDetailDO.getSaasId());
  226. taskPatientDetailDO.setPatientId(creditsDetailDO.getPatientId());
  227. taskPatientDetailDO.setPatientIdcard(creditsDetailDO.getIdCard());
  228. taskPatientDetailDO.setPatientOpenid(creditsDetailDO.getOpenId());
  229. taskPatientDetailDO.setUnionId(creditsDetailDO.getUnionId());
  230. taskPatientDetailDO.setStatus(Integer.parseInt("0"));
  231. taskPatientDetailDO.setCreateTime(new Date());
  232. taskPatientDetailDO.setUpdateTime(new Date());
  233. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  234. taskPatientDetailDao.save(taskPatientDetailDO);
  235. }else if (taskPatientDetailDOS != null && taskDOList.get(0).getPeriod() == 0){
  236. String taskSql1 = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDOList.get(0).getId()+
  237. "' and patient_id = '"+creditsDetailDO.getPatientId()+"' and create_time > '" + DateUtils.getDayBegin() +"' and create_time < '"+ DateUtils.getDayEnd() +"'";
  238. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  239. if (taskPatientDetailDOS1 == null || taskPatientDetailDOS1.size() == 0){
  240. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  241. taskPatientDetailDO.setTaskId(creditsDetailDO.getTransactionId());
  242. taskPatientDetailDO.setSaasId(creditsDetailDO.getSaasId());
  243. taskPatientDetailDO.setPatientId(creditsDetailDO.getPatientId());
  244. taskPatientDetailDO.setPatientIdcard(creditsDetailDO.getIdCard());
  245. taskPatientDetailDO.setPatientOpenid(creditsDetailDO.getOpenId());
  246. taskPatientDetailDO.setStatus(Integer.parseInt("0"));
  247. taskPatientDetailDO.setCreateTime(new Date());
  248. taskPatientDetailDO.setUpdateTime(new Date());
  249. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  250. taskPatientDetailDao.save(taskPatientDetailDO);
  251. }
  252. }
  253. creditsDetailDO.setCreateTime(new Date());
  254. creditsDetailDO.setUpdateTime(new Date());
  255. CreditsDetailDO creditsDetailDO1 =credittsLogDetailDao.save(creditsDetailDO);
  256. creditsDetailDO1.setFlag(creditsDetailDO.getFlag());
  257. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  258. creditsDetailDOList.add(creditsDetailDO1);
  259. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  260. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  261. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  262. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  263. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  264. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  265. if (creditsDetailDO1.getTradeDirection() == 1){
  266. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal()+creditsDetailDO1.getIntegrate());
  267. }else if (creditsDetailDO.getTradeDirection() == -1){
  268. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal()-creditsDetailDO1.getIntegrate());
  269. }
  270. taskPatientDetailDao.save(taskPatientDetailDO1);
  271. AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId());
  272. if (creditsDetailDO1.getTradeDirection() == 1){
  273. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO1.getIntegrate());
  274. }else if (creditsDetailDO.getTradeDirection() == -1){
  275. accountDO.setTotal(accountDO.getTotal()-creditsDetailDO1.getIntegrate());
  276. }
  277. AccountDO accountDO1 = accountDao.save(accountDO);
  278. List<CreditsDetailDO> creditsDetailDOS = new ArrayList<>();
  279. for (CreditsDetailDO creditsDetailDO2:creditsDetailDOList){
  280. creditsDetailDO2.setTotal(accountDO1.getTotal());
  281. creditsDetailDOS.add(creditsDetailDO2);
  282. }
  283. Envelop<CreditsDetailDO> envelop = new Envelop<>();
  284. envelop.setDetailModelList(creditsDetailDOS);
  285. return envelop;
  286. }
  287. }catch (Exception e){
  288. e.printStackTrace();
  289. Envelop<CreditsDetailDO> envelop = new Envelop<>();
  290. return envelop;
  291. }
  292. }
  293. /**
  294. * 活动排名
  295. *
  296. * @param activityId 活动id
  297. * @param ids 微信编码
  298. *
  299. * @param page 页码
  300. *
  301. * @param size 分页大小
  302. * @return
  303. */
  304. public Envelop<TaskPatientDetailDO> selectByActivityRanking(String activityId,List<String> ids,Integer page,Integer size){
  305. StringBuffer buffer = new StringBuffer();
  306. buffer.append("(");
  307. if (ids == null || ids.size() == 0){
  308. buffer.append("''");
  309. }else {
  310. for (int i=0;i<ids.size();i++){
  311. buffer.append("'"+ids.get(i)+"'").append(",");
  312. }
  313. buffer.deleteCharAt(buffer.length()-1);
  314. }
  315. buffer.append(") ");
  316. String sql = "SELECT " +
  317. " * " +
  318. "FROM " +
  319. " ( " +
  320. " SELECT " +
  321. " SUM(ptpd.total) AS total, " +
  322. " ptpd.patient_openid AS patient_openid, " +
  323. " ptpd.task_id AS task_id, " +
  324. " ptpd.activity_id AS activity_id, " +
  325. " ptpd.create_time as create_time, " +
  326. " ptpd.patient_id AS patient_id " +
  327. " FROM " +
  328. " wlyy_health_bank_task_patient_detail ptpd " +
  329. " WHERE " +
  330. " activity_id = '" + activityId +
  331. "' GROUP BY " +
  332. " patient_openid " +
  333. " ORDER BY ptpd.create_time DESC " +
  334. " )btpd1 " +
  335. " WHERE patient_openid IN "+buffer+
  336. " ORDER BY btpd1.total DESC "+" LIMIT " + (page-1)*size+","+size;
  337. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  338. for (TaskPatientDetailDO taskPatientDetailDO : taskPatientDetailDOS){
  339. String accountSql = "select * from wlyy_health_bank_account where patient_id = '"+taskPatientDetailDO.getPatientId()+"'";
  340. List<AccountDO> accountDOS = jdbcTemplate.query(accountSql,new BeanPropertyRowMapper(AccountDO.class));
  341. taskPatientDetailDO.setAccountDO(accountDOS.get(0));
  342. }
  343. String sqlCount = "SELECT " +
  344. " count(1) AS total " +
  345. "FROM " +
  346. " ( " +
  347. " SELECT " +
  348. " SUM(ptpd.total) AS total, " +
  349. " ptpd.patient_openid AS patient_openid, " +
  350. " ptpd.task_id AS task_id, " +
  351. " ptpd.activity_id AS activity_id, " +
  352. " ptpd.create_time as create_time, " +
  353. " ptpd.patient_id AS patient_id " +
  354. " FROM " +
  355. " wlyy_health_bank_task_patient_detail ptpd " +
  356. " WHERE " +
  357. " activity_id = '" + activityId+
  358. "' GROUP BY " +
  359. " patient_openid " +
  360. " ORDER BY ptpd.create_time DESC " +
  361. " )btpd1 " +
  362. "WHERE patient_openid IN "+buffer+
  363. " ORDER BY btpd1.total DESC ";
  364. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  365. Long count = 0L;
  366. if(rstotal!=null&&rstotal.size()>0){
  367. count = (Long) rstotal.get(0).get("total");
  368. }
  369. return Envelop.getSuccessListWithPage(HealthBankMapping.api_success, taskPatientDetailDOS,page,size,count);
  370. }
  371. /**
  372. * 根据活动查询积分
  373. *
  374. * @param activityId 活动id
  375. *
  376. * @param patientId 居民id
  377. *
  378. * @param page 页码
  379. *
  380. * @param size 分页大小
  381. * @return
  382. */
  383. public Envelop<CreditsDetailDO> selectByActivity(String activityId,String patientId,Integer page,Integer size){
  384. String sql="SELECT * " +
  385. "FROM " +
  386. " wlyy_health_bank_credits_detail " +
  387. "WHERE" +
  388. " transaction_id IN ( " +
  389. " SELECT " +
  390. " bt.id " +
  391. " FROM " +
  392. " wlyy_health_bank_task bt " +
  393. " WHERE " +
  394. " transaction_id = '"+activityId +"' " +
  395. " ) " +
  396. " and patient_id = '" +patientId+
  397. "' LIMIT "+(page-1)*size +","+size;
  398. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  399. for (CreditsDetailDO creditsDetailDO : creditsDetailDOS){
  400. TaskDO taskDO = taskDao.findOne(creditsDetailDO.getTransactionId());
  401. creditsDetailDO.setTaskDO(taskDO);
  402. }
  403. String sqlcount = "SELECT count(1) AS" +
  404. " total FROM " +
  405. " wlyy_health_bank_credits_detail " +
  406. "WHERE" +
  407. " transaction_id IN ( " +
  408. " SELECT " +
  409. " bt.id " +
  410. " FROM " +
  411. " wlyy_health_bank_task bt " +
  412. " WHERE " +
  413. " transaction_id = '"+activityId +"' " +
  414. " ) " +
  415. " and patient_id = '" +patientId+
  416. "'";
  417. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  418. Long count = 0L;
  419. if(rstotal!=null&&rstotal.size()>0){
  420. count = (Long) rstotal.get(0).get("total");
  421. }
  422. return Envelop.getSuccessListWithPage(HealthBankMapping.api_success,creditsDetailDOS,page,size,count);
  423. }
  424. /**
  425. * 根据活动查找全部排行
  426. *
  427. * @param activityId 活动id
  428. * @param page 页码
  429. * @param size 分页大小
  430. * @return
  431. */
  432. public Envelop<TaskPatientDetailDO> selectByActivityRanking1(String activityId,Integer page,Integer size){
  433. String sql = "SELECT " +
  434. " * " +
  435. "FROM " +
  436. " ( " +
  437. " SELECT " +
  438. " SUM(ptpd.total) AS total, " +
  439. " ptpd.patient_openid AS patient_openid, " +
  440. " ptpd.task_id AS task_id, " +
  441. " ptpd.activity_id AS activity_id, " +
  442. " ptpd.create_time as create_time, " +
  443. " ptpd.patient_id AS patient_id " +
  444. " FROM " +
  445. " wlyy_health_bank_task_patient_detail ptpd " +
  446. " WHERE " +
  447. " activity_id = '" + activityId +
  448. "' GROUP BY " +
  449. " patient_openid " +
  450. " ORDER BY ptpd.create_time DESC " +
  451. " )btpd1 " +
  452. " ORDER BY btpd1.total DESC "+" LIMIT " + (page-1)*size+","+size;
  453. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  454. for (TaskPatientDetailDO taskPatientDetailDO : taskPatientDetailDOS){
  455. String accountSql = "select * from wlyy_health_bank_account where patient_id = '"+taskPatientDetailDO.getPatientId()+"'";
  456. List<AccountDO> accountDOS = jdbcTemplate.query(accountSql,new BeanPropertyRowMapper(AccountDO.class));
  457. taskPatientDetailDO.setAccountDO(accountDOS.get(0));
  458. }
  459. String sqlCount = "SELECT " +
  460. " count(1) AS total " +
  461. "FROM " +
  462. " ( " +
  463. " SELECT " +
  464. " SUM(ptpd.total) AS total, " +
  465. " ptpd.patient_openid AS patient_openid, " +
  466. " ptpd.task_id AS task_id, " +
  467. " ptpd.activity_id AS activity_id, " +
  468. " ptpd.create_time as create_time, " +
  469. " ptpd.patient_id AS patient_id " +
  470. " FROM " +
  471. " wlyy_health_bank_task_patient_detail ptpd " +
  472. " WHERE " +
  473. " activity_id = '" + activityId+
  474. "' GROUP BY " +
  475. " patient_openid " +
  476. " ORDER BY ptpd.create_time DESC " +
  477. " )btpd1 " +
  478. " ORDER BY btpd1.total DESC ";
  479. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  480. Long count = 0L;
  481. if(rstotal!=null&&rstotal.size()>0){
  482. count = (Long) rstotal.get(0).get("total");
  483. }
  484. return Envelop.getSuccessListWithPage(HealthBankMapping.api_success, taskPatientDetailDOS,page,size,count);
  485. }
  486. /**
  487. * 医生主动加分
  488. *
  489. * @param array 居民信息集合
  490. *
  491. * @param ruleId 规则id
  492. * @return
  493. */
  494. public Envelop<Boolean> doctorAddIntegrate(JSONArray array, String ruleId, String description){
  495. Envelop<Boolean> envelop = new Envelop<>();
  496. for (int i=0;i<array.size();i++){
  497. TaskRuleDO taskRuleDO = taskRuleDao.findOne(ruleId);
  498. JSONObject object = array.getJSONObject(i);
  499. String patientId = object.getString("code");
  500. String idCard = object.getString("idcard");
  501. String unionId = object.getString("unionid");
  502. String openId = object.getString("openid");
  503. String taskSql = "select * from wlyy_health_bank_task bt where type = 'RULE_TASK' AND transaction_id = '"+ruleId +"'";
  504. List<TaskDO> taskDOList = jdbcTemplate.query(taskSql,new BeanPropertyRowMapper(TaskDO.class));
  505. TaskDO taskDO1 = new TaskDO();
  506. if (taskDOList.isEmpty() && taskDOList.size() == 0){
  507. TaskDO taskDO = new TaskDO();
  508. taskDO.setTransactionId(taskRuleDO.getId());
  509. taskDO.setTaskCode("RULE");
  510. taskDO.setStatus(1);
  511. taskDO.setRuleCode(taskRuleDO.getId());
  512. taskDO.setType("RULE_TASK");
  513. taskDO.setCreateTime(new Date());
  514. taskDO.setUpdateTime(new Date());
  515. taskDO.setPeriod(taskRuleDO.getPeriod());
  516. taskDO.setSaasId("dev");
  517. taskDO.setTitle(taskRuleDO.getDescription());
  518. taskDO.setContent(taskRuleDO.getDescription());
  519. taskDO1 = taskDao.save(taskDO);
  520. }else {
  521. taskDO1 = taskDOList.get(0);
  522. }
  523. String sql1 = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDO1.getId()+"' " +
  524. "AND patient_idcard = '"+idCard+"' AND patient_openid = '"+openId+"' AND union_id = '"+unionId+"'";
  525. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  526. TaskPatientDetailDO taskPatientDetailDO1 = new TaskPatientDetailDO();
  527. if (taskPatientDetailDOS.isEmpty() && taskPatientDetailDOS.size() == 0){
  528. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  529. taskPatientDetailDO.setStatus(1);
  530. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  531. taskPatientDetailDO.setPatientId(patientId);
  532. taskPatientDetailDO.setPatientOpenid(openId);
  533. taskPatientDetailDO.setPatientIdcard(idCard);
  534. taskPatientDetailDO.setUnionId(unionId);
  535. taskPatientDetailDO.setSaasId("dev");
  536. taskPatientDetailDO.setCreateTime(new Date());
  537. taskPatientDetailDO.setUpdateTime(new Date());
  538. taskPatientDetailDO.setTaskId(taskDO1.getId());
  539. taskPatientDetailDO1 = taskPatientDetailDao.save(taskPatientDetailDO);
  540. }else {
  541. taskPatientDetailDO1 = taskPatientDetailDOS.get(0);
  542. }
  543. String sql = "select * from wlyy_health_bank_account where patient_id = '"+patientId+"'";
  544. List<AccountDO> accountDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(AccountDO.class));
  545. if (taskRuleDO.getTradeDirection() == -1 && taskRuleDO.getIntegrate() == 0){
  546. String integrateSql = "select * from wlyy_health_bank_credits_detail where patient_id = '"+patientId+"'";
  547. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(integrateSql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  548. for (CreditsDetailDO creditsDetailDO:creditsDetailDOS){
  549. creditsDetailDO.setStatus(0);
  550. creditsDetailDO.setDescription(description);
  551. credittsLogDetailDao.save(creditsDetailDO);
  552. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  553. creditsDetailDO1.setStatus(1);
  554. creditsDetailDO1.setAccountId(accountDOS.get(0).getId());
  555. creditsDetailDO1.setHospital("350205");
  556. creditsDetailDO1.setPatientId(patientId);
  557. creditsDetailDO1.setIntegrate(taskRuleDO.getIntegrate());
  558. creditsDetailDO1.setTradeDirection(taskRuleDO.getTradeDirection());
  559. creditsDetailDO1.setDescription(description);
  560. creditsDetailDO1.setCreateTime(new Date());
  561. creditsDetailDO1.setUpdateTime(new Date());
  562. creditsDetailDO1.setTransactionId(taskDO1.getId());
  563. creditsDetailDO1.setTradeType("HEALTH_TASK");
  564. credittsLogDetailDao.save(creditsDetailDO);
  565. AccountDO accountDO = accountDOS.get(0);
  566. accountDO.setTotal(0);
  567. accountDao.save(accountDO);
  568. }
  569. }else{
  570. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  571. creditsDetailDO.setStatus(1);
  572. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  573. creditsDetailDO.setHospital("350205");
  574. creditsDetailDO.setPatientId(patientId);
  575. creditsDetailDO.setIntegrate(taskRuleDO.getIntegrate());
  576. creditsDetailDO.setTradeDirection(taskRuleDO.getTradeDirection());
  577. creditsDetailDO.setDescription(description);
  578. creditsDetailDO.setCreateTime(new Date());
  579. creditsDetailDO.setUpdateTime(new Date());
  580. creditsDetailDO.setTransactionId(taskDO1.getId());
  581. creditsDetailDO.setTradeType("HEALTH_TASK");
  582. credittsLogDetailDao.save(creditsDetailDO);
  583. if (taskRuleDO.getTradeDirection() == -1){
  584. AccountDO accountDO = accountDOS.get(0);
  585. int total = accountDO.getTotal() - taskRuleDO.getIntegrate();
  586. if (total<0){
  587. accountDO.setTotal(0);
  588. }else {
  589. accountDO.setTotal(total);
  590. }
  591. accountDao.save(accountDO);
  592. }else if (taskRuleDO.getTradeDirection() == 1){
  593. AccountDO accountDO = accountDOS.get(0);
  594. accountDO.setTotal(accountDO.getTotal() + taskRuleDO.getIntegrate());
  595. accountDao.save(accountDO);
  596. }
  597. }
  598. }
  599. envelop.setObj(true);
  600. return envelop;
  601. }
  602. /**
  603. * 固定数据
  604. *
  605. * @param
  606. * @return
  607. *//*
  608. public List<TaskDO> getTasks(String patientId){
  609. List<TaskDO> taskDOList = new ArrayList<>();
  610. TaskDO taskDO = new TaskDO();
  611. *//*taskDO.setPatientId(patientId);*//*
  612. taskDO.setTaskCode("BIND");
  613. taskDO.setPeriod(1);
  614. taskDO.setTaskTitle("首次绑定");
  615. taskDO.setTaskContent("(绑定社区登记发放的设备,可获得各类型设备的首绑奖励。)");
  616. taskDO.setTradeType("activity");
  617. taskDO.setTransactionId("402885e96324a409016324c0a45a0006");
  618. taskDO.setCreateTime(new Date());
  619. taskDO.setUpdateTime(new Date());
  620. taskDOList.add(taskDO);
  621. TaskDO taskDO1 = new TaskDO();
  622. *//*taskDO1.setPatientId(patientId);*//*
  623. taskDO1.setTaskCode("MEASURE");
  624. taskDO1.setPeriod(0);
  625. taskDO1.setTaskTitle("每日测量");
  626. taskDO1.setTaskContent("(使用社区发放的已关联您身份信息的设备,绑定后每天完成测量)");
  627. taskDO1.setTradeType("activity");
  628. taskDO1.setTransactionId("402885e96324a409016324c0a45a0006");
  629. taskDO1.setCreateTime(new Date());
  630. taskDO1.setUpdateTime(new Date());
  631. taskDOList.add(taskDO1);
  632. return taskDOList;
  633. }
  634. */
  635. public Envelop<CreditsDetailDO> stepAddIntegrate(CreditsDetailDO creditsDetailDO){
  636. try {
  637. synchronized (creditsDetailDO.getPatientId()){
  638. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '"+creditsDetailDO.getPatientId() +"'";
  639. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  640. if (accountDOList != null && accountDOList.size() != 0){
  641. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  642. }else {
  643. AccountDO accountDO1 = new AccountDO();
  644. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  645. accountDO1.setTotal(0);
  646. accountDO1.setAccountName(creditsDetailDO.getName());
  647. accountDO1.setCardNumber("jw");
  648. accountDO1.setHospital("350205");
  649. accountDO1.setPassword("321321312321");
  650. accountDO1.setHospitalName("海沧区");
  651. accountDO1.setCreateTime(new Date());
  652. accountDO1.setUpdateTime(new Date());
  653. accountDao.save(accountDO1);
  654. List<AccountDO> accountDOS = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  655. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  656. }
  657. TaskDO taskDO = taskDao.findOne(creditsDetailDO.getTransactionId());
  658. String sql1 = "select * from wlyy_health_bank_task_patient_detail where patient_openid = '"+creditsDetailDO.getOpenId()+"' " +
  659. "AND patient_idcard = '"+creditsDetailDO.getIdCard()+"' AND union_id = '"+creditsDetailDO.getUnionId()+"' AND task_id = '"+creditsDetailDO.getTransactionId()+"'";
  660. List<TaskPatientDetailDO> taskPatientDetailDOList = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  661. TaskPatientDetailDO taskPatientDetailDO = taskPatientDetailDOList.get(0);
  662. String sql = "select * from wlyy_health_bank_credits_detail where patient_id = '"+creditsDetailDO.getPatientId()+"' AND " +
  663. "transaction_id = '"+creditsDetailDO.getTransactionId()+"' AND create_time > '"+DateUtils.getDayBegin() +"' AND" +
  664. " create_time < '"+DateUtils.getDayEnd()+"'";
  665. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(CreditsDetailDO.class));
  666. if (creditsDetailDOS != null && creditsDetailDOS.size() != 0){
  667. CreditsDetailDO creditsDetailDO1 = creditsDetailDOS.get(0);
  668. TaskRuleDO taskRuleDO = taskRuleDao.findOne(taskDO.getRuleCode());
  669. if (creditsDetailDO.getStepNumber() == 5000){
  670. creditsDetailDO1.setIntegrate(1);
  671. creditsDetailDO1.setTradeDirection(1);
  672. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  673. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  674. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO2.getIntegrate());
  675. AccountDO accountDO1 = accountDao.save(accountDO);
  676. creditsDetailDO2.setTotal(accountDO1.getTotal());
  677. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+creditsDetailDO2.getIntegrate());
  678. taskPatientDetailDao.save(taskPatientDetailDO);
  679. creditsDetailDOS.clear();
  680. creditsDetailDOS.add(creditsDetailDO2);
  681. }else if (creditsDetailDO.getStepNumber() == 10000){
  682. creditsDetailDO1.setIntegrate(creditsDetailDO1.getIntegrate()+2);
  683. creditsDetailDO1.setTradeDirection(1);
  684. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  685. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  686. accountDO.setTotal(accountDO.getTotal()+(creditsDetailDO2.getIntegrate()-1));
  687. AccountDO accountDO1 = accountDao.save(accountDO);
  688. creditsDetailDO2.setTotal(accountDO1.getTotal());
  689. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+(creditsDetailDO2.getIntegrate()-1));
  690. taskPatientDetailDao.save(taskPatientDetailDO);
  691. creditsDetailDOS.clear();
  692. creditsDetailDOS.add(creditsDetailDO2);
  693. }else if (creditsDetailDO.getStepNumber() == 50000){
  694. creditsDetailDO1.setIntegrate(creditsDetailDO1.getIntegrate()+5);
  695. creditsDetailDO1.setTradeDirection(1);
  696. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  697. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  698. accountDO.setTotal(accountDO.getTotal()+(creditsDetailDO2.getIntegrate()-3));
  699. AccountDO accountDO1 = accountDao.save(accountDO);
  700. creditsDetailDO2.setTotal(accountDO1.getTotal());
  701. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+(creditsDetailDO2.getIntegrate()-3));
  702. creditsDetailDOS.clear();
  703. creditsDetailDOS.add(creditsDetailDO2);
  704. }
  705. }else{
  706. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  707. if (creditsDetailDO.getStepNumber() == 5000){
  708. creditsDetailDO1.setIntegrate(1);
  709. creditsDetailDO1.setTradeDirection(1);
  710. }else if (creditsDetailDO.getStepNumber() == 10000){
  711. creditsDetailDO1.setIntegrate(3);
  712. creditsDetailDO1.setTradeDirection(1);
  713. }else if (creditsDetailDO.getStepNumber() == 50000){
  714. creditsDetailDO1.setIntegrate(8);
  715. creditsDetailDO1.setTradeDirection(1);
  716. }
  717. creditsDetailDO1.setSaasId("dev");
  718. creditsDetailDO1.setTradeType("HEALTH_TASK");
  719. creditsDetailDO1.setPatientId(creditsDetailDO.getPatientId());
  720. creditsDetailDO1.setHospital("350205");
  721. creditsDetailDO1.setAccountId(creditsDetailDO.getAccountId());
  722. creditsDetailDO1.setStatus(1);
  723. creditsDetailDO1.setCreateTime(new Date());
  724. creditsDetailDO1.setUpdateTime(new Date());
  725. creditsDetailDO1.setTransactionId(taskPatientDetailDO.getTaskId());
  726. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  727. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  728. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO2.getIntegrate());
  729. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+creditsDetailDO2.getIntegrate());
  730. taskPatientDetailDao.save(taskPatientDetailDO);
  731. creditsDetailDO2.setTotal(accountDO.getTotal());
  732. creditsDetailDOS.add(creditsDetailDO2);
  733. }
  734. Envelop<CreditsDetailDO> envelop = new Envelop<>();
  735. envelop.setDetailModelList(creditsDetailDOS);
  736. return envelop;
  737. }
  738. }catch (Exception e){
  739. e.printStackTrace();
  740. Envelop<CreditsDetailDO> envelop = new Envelop<>();
  741. return envelop;
  742. }
  743. }
  744. }