CreditsDetailService.java 40 KB

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