CreditsDetailService.java 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009
  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.jw.dao.*;
  7. import com.yihu.jw.entity.health.bank.*;
  8. import com.yihu.jw.restmodel.web.MixEnvelop;
  9. import com.yihu.jw.rm.health.bank.HealthBankMapping;
  10. import com.yihu.jw.util.DateUtils;
  11. import com.yihu.jw.util.ISqlUtils;
  12. import com.yihu.mysql.query.BaseJpaService;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.data.redis.core.StringRedisTemplate;
  17. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  18. import org.springframework.jdbc.core.JdbcTemplate;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.util.StringUtils;
  21. import javax.transaction.Transactional;
  22. import java.text.ParseException;
  23. import java.text.SimpleDateFormat;
  24. import java.util.*;
  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. private static String STEP = "health:blank:step";
  35. @Autowired
  36. private CredittsLogDetailDao credittsLogDetailDao;
  37. @Autowired
  38. private TaskDao taskDao;
  39. @Autowired
  40. private ActivityDao activityDao;
  41. @Autowired
  42. private JdbcTemplate jdbcTemplate;
  43. @Autowired
  44. private AccountDao accountDao;
  45. @Autowired
  46. private TaskPatientDetailDao taskPatientDetailDao;
  47. @Autowired
  48. private TaskRuleDao taskRuleDao;
  49. @Autowired
  50. private StringRedisTemplate redisTemplate;
  51. @Autowired
  52. private ActiveRecordService activeRecordService;
  53. /**
  54. * find creditsLogInfo
  55. *
  56. * @return
  57. * @throws ParseException
  58. */
  59. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> findByCondition(CreditsDetailDO creditsDetailDO, Integer page, Integer size) throws ParseException {
  60. String sql = new ISqlUtils().getSql(creditsDetailDO,page,size,"*");
  61. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  62. for (CreditsDetailDO creditsDetailDO1 : creditsDetailDOS){
  63. if (creditsDetailDO1.getTradeType() != null && creditsDetailDO1.getTradeType().equalsIgnoreCase("ACTIVITY_TASK")){
  64. TaskDO taskDO = taskDao.findOne(creditsDetailDO1.getTransactionId());
  65. creditsDetailDO1.setTaskDO(taskDO);
  66. }
  67. }
  68. String sqlcount = new ISqlUtils().getSql(creditsDetailDO,0,0,"count");
  69. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  70. Long count = 0L;
  71. if(rstotal!=null&&rstotal.size()>0){
  72. count = (Long) rstotal.get(0).get("total");
  73. }
  74. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success, creditsDetailDOS,page,size,count);
  75. }
  76. /**
  77. * 获取账户信息
  78. *
  79. * @param creditsDetailDO
  80. * @return
  81. */
  82. public MixEnvelop<AccountDO, AccountDO> findByTradeDirection(CreditsDetailDO creditsDetailDO){
  83. AccountDO accountDO1 = new AccountDO();
  84. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  85. String sql1 = ISqlUtils.getAllSql(accountDO1);
  86. List<AccountDO> accountDOS = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(AccountDO.class));
  87. if (accountDOS == null || accountDOS.size() == 0){
  88. accountDO1.setTotal(0);
  89. accountDO1.setAccountName(creditsDetailDO.getName());
  90. if(creditsDetailDO.getIdCard().length()>=4){// 判断是否长度大于等于4
  91. String cardNumber=creditsDetailDO.getIdCard().substring(creditsDetailDO.getIdCard().length()- 4,creditsDetailDO.getIdCard().length());//截取两个数字之间的部分
  92. int random = (int)((Math.random()*9+1)*100000);
  93. accountDO1.setCardNumber(cardNumber+Integer.toString(random));
  94. }
  95. accountDO1.setHospital(creditsDetailDO.getHospital());
  96. accountDO1.setPassword("123456");
  97. accountDO1.setHospitalName(creditsDetailDO.getHospitalName());
  98. accountDO1.setStatus(1);
  99. accountDO1.setSaasId("dev");
  100. accountDO1.setCreateTime(new Date());
  101. accountDO1.setUpdateTime(new Date());
  102. accountDao.save(accountDO1);
  103. }
  104. List<AccountDO> accountDOS1 = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(AccountDO.class));
  105. AccountDO accountDO = accountDOS1.get(0);
  106. 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()+"'";
  107. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sql);
  108. if (rstotal!= null && rstotal.size()>0){
  109. if (rstotal.get(0).get("total") == null){
  110. accountDO.setUsedTotal(0);
  111. }else {
  112. accountDO.setUsedTotal(Integer.parseInt(rstotal.get(0).get("total").toString()));
  113. }
  114. }
  115. return MixEnvelop.getSuccess(HealthBankMapping.api_success,accountDO);
  116. }
  117. /*
  118. public Envelop<Boolean> exchangeGoods(GoodsDO goodsDO){
  119. CreditsDetailDO creditsLogDetailDO = new CreditsDetailDO();
  120. Envelop<Boolean> envelop = new Envelop<>();
  121. envelop.setObj(true);
  122. return envelop;
  123. }
  124. */
  125. public MixEnvelop<AccountDO, AccountDO> selectByRanking(List<String> patientIds, Integer page, Integer size){
  126. StringBuffer buffer = new StringBuffer();
  127. buffer.append(" ba.patient_id in(");
  128. if (patientIds == null || patientIds.size() == 0){
  129. buffer.append("''");
  130. }else {
  131. for (int i=0;i<patientIds.size();i++){
  132. buffer.append("'"+patientIds.get(i)+"'").append(",");
  133. }
  134. buffer.deleteCharAt(buffer.length()-1);
  135. }
  136. buffer.append(") ");
  137. String sql =
  138. "SELECT ba1.patient_id AS patient_id," +
  139. "ba1.account_name AS account_name," +
  140. "ba1.hospital AS hospital," +
  141. "ba1.total AS total," +
  142. "ba1.create_time AS create_time," +
  143. "ba1.sum AS sum" +
  144. " FROM" +
  145. "( SELECT " +
  146. "ba.patient_id AS patient_id," +
  147. "ba.account_name AS account_name," +
  148. "ba.hospital AS hospital," +
  149. "ba.total AS total," +
  150. "ba.create_time AS create_time," +
  151. " if(ba.total=0,ba.total,(ba.total +COALESCE((cd1.total),0))) AS sum" +
  152. " FROM" +
  153. " wlyy_health_bank_account ba" +
  154. " LEFT JOIN ( " +
  155. "SELECT" +
  156. " SUM(cd.integrate) AS total," +
  157. " cd.patient_id AS patient_id" +
  158. " FROM" +
  159. " wlyy_health_bank_credits_detail cd" +
  160. " WHERE " +
  161. "cd.trade_direction = - 1" +
  162. " GROUP BY " +
  163. " cd.patient_id ) cd1 ON cd1.patient_id = ba.patient_id " +
  164. " WHERE " + buffer +
  165. " ORDER BY" +
  166. " ba.create_time DESC )ba1" +
  167. " ORDER BY " +
  168. " ba1.total DESC"+
  169. " LIMIT "+(page-1)*size+","+size ;
  170. List<AccountDO> accountDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(AccountDO.class));
  171. String sqlCount = "SELECT count(1) AS total"+
  172. " FROM " +
  173. " wlyy_health_bank_account ba LEFT JOIN " +
  174. " ( " +
  175. " SELECT " +
  176. " SUM(cd.integrate) AS total, " +
  177. " cd.patient_id AS patient_id " +
  178. " FROM " +
  179. " wlyy_health_bank_credits_detail cd " +
  180. " WHERE " +
  181. " cd.trade_direction = - 1 " +
  182. " GROUP BY " +
  183. " cd.patient_id " +
  184. " ) cd1 ON cd1.patient_id = ba.patient_id " +
  185. "WHERE " + buffer +
  186. " ORDER BY " +
  187. " ba.create_time, " +
  188. " (ba.total + COALESCE(cd1.total,0)) DESC ";
  189. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  190. Long count = 0L;
  191. if(rstotal!=null&&rstotal.size()>0){
  192. count = (Long) rstotal.get(0).get("total");
  193. }
  194. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success, accountDOS,page,size,count);
  195. }
  196. /**
  197. * 添加积分
  198. *
  199. * @param creditsDetailDO
  200. * @return
  201. */
  202. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> insert(CreditsDetailDO creditsDetailDO){
  203. try {
  204. synchronized (creditsDetailDO.getPatientId()){
  205. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '"+creditsDetailDO.getPatientId() +"'";
  206. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  207. if (accountDOList != null && accountDOList.size() != 0){
  208. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  209. }else {
  210. AccountDO accountDO1 = new AccountDO();
  211. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  212. accountDO1.setTotal(0);
  213. accountDO1.setAccountName(creditsDetailDO.getName());
  214. if(creditsDetailDO.getIdCard().length()>=4){// 判断是否长度大于等于4
  215. String cardNumber=creditsDetailDO.getIdCard().substring(creditsDetailDO.getIdCard().length()- 4,creditsDetailDO.getIdCard().length());//截取两个数字之间的部分
  216. int random = (int)((Math.random()*9+1)*100000);
  217. accountDO1.setCardNumber(cardNumber+Integer.toString(random));
  218. }
  219. accountDO1.setHospital(creditsDetailDO.getHospital());
  220. accountDO1.setPassword("123456");
  221. accountDO1.setHospitalName(creditsDetailDO.getHospitalName());
  222. accountDO1.setStatus(1);
  223. accountDO1.setCreateTime(new Date());
  224. accountDO1.setUpdateTime(new Date());
  225. accountDao.save(accountDO1);
  226. List<AccountDO> accountDOS = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  227. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  228. }
  229. TaskDO taskDO = new TaskDO();
  230. taskDO.setTaskCode(creditsDetailDO.getFlag());
  231. taskDO.setId(creditsDetailDO.getTransactionId());
  232. /*taskDO.setPatientId(creditsDetailDO.getPatientId());*/
  233. String sql = ISqlUtils.getSql(taskDO,1,1,"*");
  234. List<TaskDO> taskDOList = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskDO.class));
  235. creditsDetailDO.setTransactionId(taskDOList.get(0).getId());
  236. String ruleSql = "SELECT * FROM wlyy_health_bank_task_rule WHERE id= '"+taskDOList.get(0).getRuleCode()+"'";
  237. List<TaskRuleDO> taskRuleDOS = jdbcTemplate.query(ruleSql,new BeanPropertyRowMapper(TaskRuleDO.class));
  238. TaskRuleDO taskRuleDO = taskRuleDOS.get(0);
  239. creditsDetailDO.setIntegrate(taskRuleDO.getIntegrate());
  240. creditsDetailDO.setTradeDirection(taskRuleDO.getTradeDirection());
  241. String taskSql = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDOList.get(0).getId()+"' and patient_id = '" + creditsDetailDO.getPatientId() +"'";
  242. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(taskSql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  243. if (taskPatientDetailDOS == null || taskPatientDetailDOS.size() ==0){
  244. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  245. taskPatientDetailDO.setTaskId(creditsDetailDO.getTransactionId());
  246. taskPatientDetailDO.setSaasId(creditsDetailDO.getSaasId());
  247. taskPatientDetailDO.setPatientId(creditsDetailDO.getPatientId());
  248. taskPatientDetailDO.setPatientIdcard(creditsDetailDO.getIdCard());
  249. taskPatientDetailDO.setPatientOpenid(creditsDetailDO.getOpenId());
  250. taskPatientDetailDO.setUnionId(creditsDetailDO.getUnionId());
  251. taskPatientDetailDO.setStatus(Integer.parseInt("0"));
  252. taskPatientDetailDO.setCreateTime(new Date());
  253. taskPatientDetailDO.setUpdateTime(new Date());
  254. taskPatientDetailDO.setActivityId(taskDOList.get(0).getTransactionId());
  255. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  256. taskPatientDetailDao.save(taskPatientDetailDO);
  257. }else if (taskPatientDetailDOS != null && taskDOList.get(0).getPeriod() == 0){
  258. String taskSql1 = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDOList.get(0).getId()+
  259. "' and patient_id = '"+creditsDetailDO.getPatientId()+"' and create_time > '" + DateUtils.getDayBegin() +"' and create_time < '"+ DateUtils.getDayEnd() +"'";
  260. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  261. if (taskPatientDetailDOS1 == null || taskPatientDetailDOS1.size() == 0){
  262. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  263. taskPatientDetailDO.setTaskId(creditsDetailDO.getTransactionId());
  264. taskPatientDetailDO.setSaasId(creditsDetailDO.getSaasId());
  265. taskPatientDetailDO.setPatientId(creditsDetailDO.getPatientId());
  266. taskPatientDetailDO.setPatientIdcard(creditsDetailDO.getIdCard());
  267. taskPatientDetailDO.setPatientOpenid(creditsDetailDO.getOpenId());
  268. taskPatientDetailDO.setActivityId(taskDOList.get(0).getTransactionId());
  269. taskPatientDetailDO.setStatus(Integer.parseInt("0"));
  270. taskPatientDetailDO.setCreateTime(new Date());
  271. taskPatientDetailDO.setUpdateTime(new Date());
  272. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  273. taskPatientDetailDao.save(taskPatientDetailDO);
  274. }
  275. }
  276. creditsDetailDO.setCreateTime(new Date());
  277. creditsDetailDO.setUpdateTime(new Date());
  278. CreditsDetailDO creditsDetailDO1 =credittsLogDetailDao.save(creditsDetailDO);
  279. creditsDetailDO1.setFlag(creditsDetailDO.getFlag());
  280. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  281. creditsDetailDOList.add(creditsDetailDO1);
  282. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  283. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  284. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  285. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  286. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  287. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  288. if (creditsDetailDO1.getTradeDirection() == 1){
  289. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal()+creditsDetailDO1.getIntegrate());
  290. }else if (creditsDetailDO.getTradeDirection() == -1){
  291. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal()-creditsDetailDO1.getIntegrate());
  292. }
  293. taskPatientDetailDao.save(taskPatientDetailDO1);
  294. AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId());
  295. if (creditsDetailDO1.getTradeDirection() == 1){
  296. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO1.getIntegrate());
  297. }else if (creditsDetailDO.getTradeDirection() == -1){
  298. accountDO.setTotal(accountDO.getTotal()-creditsDetailDO1.getIntegrate());
  299. }
  300. AccountDO accountDO1 = accountDao.save(accountDO);
  301. List<CreditsDetailDO> creditsDetailDOS = new ArrayList<>();
  302. for (CreditsDetailDO creditsDetailDO2:creditsDetailDOList){
  303. creditsDetailDO2.setTotal(accountDO1.getTotal());
  304. creditsDetailDOS.add(creditsDetailDO2);
  305. }
  306. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  307. envelop.setDetailModelList(creditsDetailDOS);
  308. return envelop;
  309. }
  310. }catch (Exception e){
  311. e.printStackTrace();
  312. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  313. return envelop;
  314. }
  315. }
  316. /**
  317. * 活动排名
  318. *
  319. * @param activityId 活动id
  320. * @param ids 微信编码
  321. *
  322. * @param page 页码
  323. *
  324. * @param size 分页大小
  325. * @return
  326. */
  327. public MixEnvelop<TaskPatientDetailDO, TaskPatientDetailDO> selectByActivityRanking(String activityId, List<String> ids, Integer page, Integer size){
  328. StringBuffer buffer = new StringBuffer();
  329. buffer.append("(");
  330. if (ids == null || ids.size() == 0){
  331. buffer.append("''");
  332. }else {
  333. for (int i=0;i<ids.size();i++){
  334. buffer.append("'"+ids.get(i)+"'").append(",");
  335. }
  336. buffer.deleteCharAt(buffer.length()-1);
  337. }
  338. buffer.append(") ");
  339. String sql = "SELECT " +
  340. " * " +
  341. "FROM " +
  342. " ( " +
  343. " SELECT " +
  344. " SUM(ptpd.total) AS total, " +
  345. " ptpd.patient_openid AS patient_openid, " +
  346. " ptpd.task_id AS task_id, " +
  347. " ptpd.activity_id AS activity_id, " +
  348. " ptpd.create_time as create_time, " +
  349. " ptpd.patient_id AS patient_id " +
  350. " FROM " +
  351. " wlyy_health_bank_task_patient_detail ptpd " +
  352. " WHERE " +
  353. " activity_id = '" + activityId +
  354. "' GROUP BY " +
  355. " patient_id " +
  356. " ORDER BY ptpd.create_time DESC " +
  357. " )btpd1 " +
  358. " WHERE patient_id IN "+buffer+
  359. " ORDER BY btpd1.total DESC "+" LIMIT " + (page-1)*size+","+size;
  360. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  361. for (TaskPatientDetailDO taskPatientDetailDO : taskPatientDetailDOS){
  362. String accountSql = "select * from wlyy_health_bank_account where patient_id = '"+taskPatientDetailDO.getPatientId()+"'";
  363. List<AccountDO> accountDOS = jdbcTemplate.query(accountSql,new BeanPropertyRowMapper(AccountDO.class));
  364. taskPatientDetailDO.setAccountDO(accountDOS.get(0));
  365. }
  366. String sqlCount = "SELECT " +
  367. " count(1) AS total " +
  368. "FROM " +
  369. " ( " +
  370. " SELECT " +
  371. " SUM(ptpd.total) AS total, " +
  372. " ptpd.patient_openid AS patient_openid, " +
  373. " ptpd.task_id AS task_id, " +
  374. " ptpd.activity_id AS activity_id, " +
  375. " ptpd.create_time as create_time, " +
  376. " ptpd.patient_id AS patient_id " +
  377. " FROM " +
  378. " wlyy_health_bank_task_patient_detail ptpd " +
  379. " WHERE " +
  380. " activity_id = '" + activityId+
  381. "' GROUP BY " +
  382. " patient_openid " +
  383. " ORDER BY ptpd.create_time DESC " +
  384. " )btpd1 " +
  385. "WHERE patient_openid IN "+buffer+
  386. " ORDER BY btpd1.total DESC ";
  387. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  388. Long count = 0L;
  389. if(rstotal!=null&&rstotal.size()>0){
  390. count = (Long) rstotal.get(0).get("total");
  391. }
  392. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success, taskPatientDetailDOS,page,size,count);
  393. }
  394. /**
  395. * 根据活动查询积分
  396. *
  397. * @param activityId 活动id
  398. *
  399. * @param patientId 居民id
  400. *
  401. * @param page 页码
  402. *
  403. * @param size 分页大小
  404. * @return
  405. */
  406. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> selectByActivity(String activityId, String patientId, Integer page, Integer size){
  407. String sql="SELECT * " +
  408. "FROM " +
  409. " wlyy_health_bank_credits_detail " +
  410. "WHERE" +
  411. " transaction_id IN ( " +
  412. " SELECT " +
  413. " bt.id " +
  414. " FROM " +
  415. " wlyy_health_bank_task bt " +
  416. " WHERE " +
  417. " transaction_id = '"+activityId +"' " +
  418. " ) " +
  419. " and patient_id = '" +patientId+
  420. "' LIMIT "+(page-1)*size +","+size;
  421. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  422. for (CreditsDetailDO creditsDetailDO : creditsDetailDOS){
  423. TaskDO taskDO = taskDao.findOne(creditsDetailDO.getTransactionId());
  424. creditsDetailDO.setTaskDO(taskDO);
  425. }
  426. String sqlcount = "SELECT count(1) AS" +
  427. " total FROM " +
  428. " wlyy_health_bank_credits_detail " +
  429. "WHERE" +
  430. " transaction_id IN ( " +
  431. " SELECT " +
  432. " bt.id " +
  433. " FROM " +
  434. " wlyy_health_bank_task bt " +
  435. " WHERE " +
  436. " transaction_id = '"+activityId +"' " +
  437. " ) " +
  438. " and patient_id = '" +patientId+
  439. "'";
  440. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  441. Long count = 0L;
  442. if(rstotal!=null&&rstotal.size()>0){
  443. count = (Long) rstotal.get(0).get("total");
  444. }
  445. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success,creditsDetailDOS,page,size,count);
  446. }
  447. /**
  448. * 根据活动查找全部排行
  449. *
  450. * @param activityId 活动id
  451. * @param page 页码
  452. * @param size 分页大小
  453. * @return
  454. */
  455. public MixEnvelop<TaskPatientDetailDO, TaskPatientDetailDO> selectByActivityRanking1(String activityId, String patientId, Integer page, Integer size){
  456. String sql = "SELECT " +
  457. " * " +
  458. "FROM " +
  459. " ( " +
  460. " SELECT " +
  461. " SUM(ptpd.total) AS total, " +
  462. " ptpd.patient_openid AS patient_openid, " +
  463. " ptpd.task_id AS task_id, " +
  464. " ptpd.activity_id AS activity_id, " +
  465. " ptpd.create_time as create_time, " +
  466. " ptpd.patient_id AS patient_id " +
  467. " FROM " +
  468. " wlyy_health_bank_task_patient_detail ptpd " +
  469. " WHERE " +
  470. " activity_id = '" + activityId +
  471. "' GROUP BY " +
  472. " patient_openid " +
  473. " ORDER BY ptpd.create_time DESC " +
  474. " )btpd1 " +
  475. " ORDER BY btpd1.total DESC "+" LIMIT " + (page-1)*size+","+size;
  476. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  477. logger.info(taskPatientDetailDOS.toString()+""+taskPatientDetailDOS.size());
  478. for (int i = 0;taskPatientDetailDOS != null&&taskPatientDetailDOS.size()!=0 && i<taskPatientDetailDOS.size();i++){
  479. TaskPatientDetailDO taskPatientDetailDO = taskPatientDetailDOS.get(i);
  480. String accountSql = "select * from wlyy_health_bank_account where patient_id = '"+taskPatientDetailDO.getPatientId()+"'";
  481. List<AccountDO> accountDOS = jdbcTemplate.query(accountSql,new BeanPropertyRowMapper(AccountDO.class));
  482. if (taskPatientDetailDOS.get(i).getPatientId().equalsIgnoreCase(patientId)){
  483. /*String taskSql = "select count(1)+1 as total from (" +
  484. "select * from (SELECT " +
  485. " SUM(ptpd.total) AS total, " +
  486. " ptpd.patient_openid AS patient_openid, " +
  487. " ptpd.task_id AS task_id, " +
  488. " ptpd.activity_id AS activity_id, " +
  489. " ptpd.create_time as create_time, " +
  490. " ptpd.patient_id AS patient_id " +
  491. " FROM " +
  492. " wlyy_health_bank_task_patient_detail ptpd " +
  493. " WHERE " +
  494. " activity_id = '" + activityId + "')ptpd1 where" +
  495. " ptpd1.patient_id = '"+patientId+"' AND ptpd1.total > "+taskPatientDetailDOS.get(i).getTotal()+") ptpd2";
  496. List<Map<String,Object>> rstotal1 = jdbcTemplate.queryForList(taskSql);
  497. Long count = 0L;
  498. if(rstotal1!=null&&rstotal1.size()>0){
  499. count = (Long) rstotal1.get(0).get("total");
  500. }
  501. accountDOS.get(0).setActivityRanking(count);*/
  502. taskPatientDetailDO.setIsFlag(1);
  503. }else {
  504. taskPatientDetailDO.setIsFlag(0);
  505. }
  506. taskPatientDetailDO.setAccountDO(accountDOS.get(0));
  507. }
  508. String sqlCount = "SELECT " +
  509. " count(1) AS total " +
  510. "FROM " +
  511. " ( " +
  512. " SELECT " +
  513. " SUM(ptpd.total) AS total, " +
  514. " ptpd.patient_openid AS patient_openid, " +
  515. " ptpd.task_id AS task_id, " +
  516. " ptpd.activity_id AS activity_id, " +
  517. " ptpd.create_time as create_time, " +
  518. " ptpd.patient_id AS patient_id " +
  519. " FROM " +
  520. " wlyy_health_bank_task_patient_detail ptpd " +
  521. " WHERE " +
  522. " activity_id = '" + activityId+
  523. "' GROUP BY " +
  524. " patient_openid " +
  525. " ORDER BY ptpd.create_time DESC " +
  526. " )btpd1 " +
  527. " ORDER BY btpd1.total DESC ";
  528. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  529. Long count = 0L;
  530. if(rstotal!=null&&rstotal.size()>0){
  531. count = (Long) rstotal.get(0).get("total");
  532. }
  533. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success, taskPatientDetailDOS,page,size,count);
  534. }
  535. /**
  536. * 医生主动加分
  537. *
  538. * @param array 居民信息集合
  539. *
  540. * @param ruleId 规则id
  541. * @return
  542. */
  543. public MixEnvelop<Boolean, Boolean> doctorAddIntegrate(JSONArray array, String ruleId, String description) throws Exception {
  544. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  545. for (int i=0;i<array.size();i++){
  546. TaskRuleDO taskRuleDO = taskRuleDao.findOne(ruleId);
  547. JSONObject object = array.getJSONObject(i);
  548. String patientId = object.getString("code");
  549. String idCard = object.getString("idcard");
  550. String unionId = object.getString("unionid");
  551. String openId = object.getString("openid");
  552. String hospital = object.getString("hospital");
  553. String hospitalName = object.getString("hospitalName");
  554. String taskSql = "select * from wlyy_health_bank_task bt where type = 'RULE_TASK' AND transaction_id = '"+ruleId +"'";
  555. List<TaskDO> taskDOList = jdbcTemplate.query(taskSql,new BeanPropertyRowMapper(TaskDO.class));
  556. TaskDO taskDO1 = new TaskDO();
  557. if (taskDOList.isEmpty() && taskDOList.size() == 0){
  558. TaskDO taskDO = new TaskDO();
  559. taskDO.setTransactionId(taskRuleDO.getId());
  560. taskDO.setTaskCode("RULE");
  561. taskDO.setStatus(1);
  562. taskDO.setRuleCode(taskRuleDO.getId());
  563. taskDO.setType("RULE_TASK");
  564. taskDO.setCreateTime(new Date());
  565. taskDO.setUpdateTime(new Date());
  566. taskDO.setPeriod(taskRuleDO.getPeriod());
  567. taskDO.setSaasId("dev");
  568. taskDO.setTitle(taskRuleDO.getDescription());
  569. taskDO.setContent(taskRuleDO.getDescription());
  570. taskDO1 = taskDao.save(taskDO);
  571. }else {
  572. taskDO1 = taskDOList.get(0);
  573. }
  574. if (taskRuleDO.getPeriod() == 1){
  575. String sql = "select * from wlyy_health_bank_task_patient_detail where patient_id = '"+patientId+"'AND task_id ='"+taskDO1.getId()+"'";
  576. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  577. if (taskPatientDetailDOS != null && taskPatientDetailDOS.size() != 0){
  578. throw new Exception("已奖励过");
  579. }
  580. }else if (taskRuleDO.getPeriod() == 0){
  581. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  582. Date date = new Date();
  583. String date1 = dateFormat.format(date);
  584. String begin = DateUtils.getMinMonthDate(date1);
  585. String end = DateUtils.getMaxMonthDate(date1);
  586. String sql = "select * from wlyy_health_bank_task_patient_detail where patient_id = '"+patientId+"'AND task_id ='"+taskDO1.getId()+"' AND create_time > '"+begin+"' AND create_time < '"+end+"'";
  587. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  588. if (taskPatientDetailDOS != null && taskPatientDetailDOS.size() != 0){
  589. throw new Exception("已奖励过");
  590. }
  591. }
  592. String sql1 = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDO1.getId()+"' " +
  593. "AND patient_idcard = '"+idCard+"' AND patient_openid = '"+openId+"' AND union_id = '"+unionId+"'";
  594. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  595. TaskPatientDetailDO taskPatientDetailDO1 = new TaskPatientDetailDO();
  596. if (taskPatientDetailDOS.isEmpty() && taskPatientDetailDOS.size() == 0){
  597. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  598. taskPatientDetailDO.setStatus(1);
  599. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  600. taskPatientDetailDO.setPatientId(patientId);
  601. taskPatientDetailDO.setPatientOpenid(openId);
  602. taskPatientDetailDO.setPatientIdcard(idCard);
  603. taskPatientDetailDO.setUnionId(unionId);
  604. taskPatientDetailDO.setSaasId("dev");
  605. taskPatientDetailDO.setCreateTime(new Date());
  606. taskPatientDetailDO.setUpdateTime(new Date());
  607. taskPatientDetailDO.setTaskId(taskDO1.getId());
  608. taskPatientDetailDO1 = taskPatientDetailDao.save(taskPatientDetailDO);
  609. }else {
  610. taskPatientDetailDO1 = taskPatientDetailDOS.get(0);
  611. }
  612. String sql = "select * from wlyy_health_bank_account where patient_id = '"+patientId+"'";
  613. List<AccountDO> accountDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(AccountDO.class));
  614. if (taskRuleDO.getTradeDirection() == -1 && taskRuleDO.getIntegrate() == 0){
  615. String integrateSql = "select * from wlyy_health_bank_credits_detail where patient_id = '"+patientId+"' " +
  616. "AND transaction_id IN (SELECT id FROM wlyy_health_bank_task WHERE task_code IN ('BP_BIND','GLU_BIND','BP_MEASURE','GLU_MEASURE','RULE'))";
  617. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(integrateSql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  618. for (CreditsDetailDO creditsDetailDO:creditsDetailDOS){
  619. if (creditsDetailDO.getTradeDirection()==1&&creditsDetailDO.getStatus()!=0){
  620. AccountDO accountDO = accountDOS.get(0);
  621. int total = accountDO.getTotal() - creditsDetailDO.getIntegrate();
  622. creditsDetailDO.setStatus(0);
  623. creditsDetailDO.setDescription(description);
  624. credittsLogDetailDao.save(creditsDetailDO);
  625. accountDO.setTotal(total);
  626. accountDao.save(accountDO);
  627. }
  628. }
  629. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  630. creditsDetailDO1.setStatus(1);
  631. creditsDetailDO1.setSaasId("dev");
  632. creditsDetailDO1.setAccountId(accountDOS.get(0).getId());
  633. creditsDetailDO1.setHospital(hospital);
  634. creditsDetailDO1.setHospitalName(hospitalName);
  635. creditsDetailDO1.setPatientId(patientId);
  636. creditsDetailDO1.setIntegrate(taskRuleDO.getIntegrate());
  637. creditsDetailDO1.setTradeDirection(taskRuleDO.getTradeDirection());
  638. creditsDetailDO1.setDescription(description);
  639. creditsDetailDO1.setCreateTime(new Date());
  640. creditsDetailDO1.setUpdateTime(new Date());
  641. creditsDetailDO1.setTransactionId(taskDO1.getId());
  642. creditsDetailDO1.setTradeType("ACTIVITY_TASK");
  643. credittsLogDetailDao.save(creditsDetailDO1);
  644. }else{
  645. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  646. creditsDetailDO.setStatus(1);
  647. creditsDetailDO.setSaasId("dev");
  648. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  649. creditsDetailDO.setHospital(hospital);
  650. creditsDetailDO.setHospitalName(hospitalName);
  651. creditsDetailDO.setPatientId(patientId);
  652. creditsDetailDO.setIntegrate(taskRuleDO.getIntegrate());
  653. creditsDetailDO.setTradeDirection(taskRuleDO.getTradeDirection());
  654. creditsDetailDO.setDescription(description);
  655. creditsDetailDO.setCreateTime(new Date());
  656. creditsDetailDO.setUpdateTime(new Date());
  657. creditsDetailDO.setTransactionId(taskDO1.getId());
  658. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  659. credittsLogDetailDao.save(creditsDetailDO);
  660. if (taskRuleDO.getTradeDirection() == -1){
  661. String integrateSql = "select * from wlyy_health_bank_credits_detail where patient_id = '"+patientId+"' " +
  662. "AND transaction_id IN (SELECT id FROM wlyy_health_bank_task WHERE task_code IN ('BP_BIND','GLU_BIND','BP_MEASURE','GLU_MEASURE','RULE'))";
  663. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(integrateSql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  664. for (CreditsDetailDO creditsDetailDO1:creditsDetailDOS){
  665. if (creditsDetailDO1.getTradeDirection()==1&&creditsDetailDO1.getStatus()!=0){
  666. AccountDO accountDO = accountDOS.get(0);
  667. int total = accountDO.getTotal() - creditsDetailDO1.getIntegrate();
  668. creditsDetailDO1.setStatus(0);
  669. creditsDetailDO1.setDescription(description);
  670. credittsLogDetailDao.save(creditsDetailDO1);
  671. accountDO.setTotal(total);
  672. accountDao.save(accountDO);
  673. }
  674. }
  675. }else if (taskRuleDO.getTradeDirection() == 1){
  676. AccountDO accountDO = accountDOS.get(0);
  677. accountDO.setTotal(accountDO.getTotal() + taskRuleDO.getIntegrate());
  678. accountDao.save(accountDO);
  679. }
  680. }
  681. }
  682. envelop.setObj(true);
  683. return envelop;
  684. }
  685. /**
  686. * 固定数据
  687. *
  688. * @param
  689. * @return
  690. *//*
  691. public List<TaskDO> getTasks(String patientId){
  692. List<TaskDO> taskDOList = new ArrayList<>();
  693. TaskDO taskDO = new TaskDO();
  694. *//*taskDO.setPatientId(patientId);*//*
  695. taskDO.setTaskCode("BIND");
  696. taskDO.setPeriod(1);
  697. taskDO.setTaskTitle("首次绑定");
  698. taskDO.setTaskContent("(绑定社区登记发放的设备,可获得各类型设备的首绑奖励。)");
  699. taskDO.setTradeType("activity");
  700. taskDO.setTransactionId("402885e96324a409016324c0a45a0006");
  701. taskDO.setCreateTime(new Date());
  702. taskDO.setUpdateTime(new Date());
  703. taskDOList.add(taskDO);
  704. TaskDO taskDO1 = new TaskDO();
  705. *//*taskDO1.setPatientId(patientId);*//*
  706. taskDO1.setTaskCode("MEASURE");
  707. taskDO1.setPeriod(0);
  708. taskDO1.setTaskTitle("每日测量");
  709. taskDO1.setTaskContent("(使用社区发放的已关联您身份信息的设备,绑定后每天完成测量)");
  710. taskDO1.setTradeType("activity");
  711. taskDO1.setTransactionId("402885e96324a409016324c0a45a0006");
  712. taskDO1.setCreateTime(new Date());
  713. taskDO1.setUpdateTime(new Date());
  714. taskDOList.add(taskDO1);
  715. return taskDOList;
  716. }
  717. */
  718. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> stepAddIntegrate(CreditsDetailDO creditsDetailDO){
  719. try {
  720. synchronized (creditsDetailDO.getPatientId()){
  721. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '"+creditsDetailDO.getPatientId() +"'";
  722. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  723. if (accountDOList != null && accountDOList.size() != 0){
  724. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  725. }else {
  726. AccountDO accountDO1 = new AccountDO();
  727. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  728. accountDO1.setSaasId("dev");
  729. accountDO1.setTotal(0);
  730. accountDO1.setAccountName(creditsDetailDO.getName());
  731. if(creditsDetailDO.getIdCard().length()>=4){// 判断是否长度大于等于4
  732. String cardNumber=creditsDetailDO.getIdCard().substring(creditsDetailDO.getIdCard().length()- 4,creditsDetailDO.getIdCard().length());//截取两个数字之间的部分
  733. int random = (int)((Math.random()*9+1)*100000);
  734. accountDO1.setCardNumber(cardNumber+Integer.toString(random));
  735. }
  736. accountDO1.setHospital(creditsDetailDO.getHospital());
  737. accountDO1.setPassword("123456");
  738. accountDO1.setHospitalName(creditsDetailDO.getHospitalName());
  739. accountDO1.setStatus(1);
  740. accountDO1.setCreateTime(new Date());
  741. accountDO1.setUpdateTime(new Date());
  742. accountDao.save(accountDO1);
  743. List<AccountDO> accountDOS = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  744. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  745. }
  746. TaskDO taskDO = taskDao.findOne(creditsDetailDO.getTransactionId());
  747. String sql1 = "select * from wlyy_health_bank_task_patient_detail where "+
  748. " patient_idcard = '"+creditsDetailDO.getIdCard()+"' AND union_id = '"+creditsDetailDO.getUnionId()+"' AND task_id = '"+creditsDetailDO.getTransactionId()+"'";
  749. List<TaskPatientDetailDO> taskPatientDetailDOList = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  750. if(taskPatientDetailDOList == null || taskPatientDetailDOList.size()==0){
  751. throw new Exception("该居民参与活动查不到!");
  752. }
  753. TaskPatientDetailDO taskPatientDetailDO = taskPatientDetailDOList.get(0);
  754. String sql = "select * from wlyy_health_bank_credits_detail where patient_id = '"+creditsDetailDO.getPatientId()+"' AND " +
  755. "transaction_id = '"+creditsDetailDO.getTransactionId()+"' AND create_time > '"+DateUtils.getDayBegin() +"' AND" +
  756. " create_time < '"+DateUtils.getDayEnd()+"'AND ISNULL(description)";
  757. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(CreditsDetailDO.class));
  758. String step = redisTemplate.opsForValue().get(STEP);
  759. if (StringUtils.isEmpty(step)){
  760. throw new Exception("获取步数失败!");
  761. }
  762. JSONObject object = JSONObject.parseObject(step);
  763. int step1 = object.getInteger("step1");
  764. int step2 = object.getInteger("step2");
  765. if (creditsDetailDOS != null && creditsDetailDOS.size() != 0){
  766. CreditsDetailDO creditsDetailDO1 = creditsDetailDOS.get(0);
  767. TaskRuleDO taskRuleDO = taskRuleDao.findOne(taskDO.getRuleCode());
  768. if (creditsDetailDO.getStepNumber() < step1 && creditsDetailDO.getStepNumber() >0){
  769. creditsDetailDO1.setIntegrate(0);
  770. creditsDetailDO1.setTradeDirection(1);
  771. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  772. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  773. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO2.getIntegrate());
  774. AccountDO accountDO1 = accountDao.save(accountDO);
  775. creditsDetailDO2.setTotal(accountDO1.getTotal());
  776. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+creditsDetailDO2.getIntegrate());
  777. taskPatientDetailDao.save(taskPatientDetailDO);
  778. creditsDetailDOS.clear();
  779. creditsDetailDOS.add(creditsDetailDO2);
  780. }else if (creditsDetailDO.getStepNumber() >= step1 && creditsDetailDO.getStepNumber() < step2){
  781. creditsDetailDO1.setIntegrate(creditsDetailDO1.getIntegrate()+1);
  782. creditsDetailDO1.setTradeDirection(1);
  783. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  784. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  785. accountDO.setTotal(accountDO.getTotal()+(creditsDetailDO2.getIntegrate()));
  786. AccountDO accountDO1 = accountDao.save(accountDO);
  787. creditsDetailDO2.setTotal(accountDO1.getTotal());
  788. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+(creditsDetailDO2.getIntegrate()));
  789. taskPatientDetailDao.save(taskPatientDetailDO);
  790. creditsDetailDOS.clear();
  791. creditsDetailDOS.add(creditsDetailDO2);
  792. }else if (creditsDetailDO.getStepNumber() >= step2){
  793. if (creditsDetailDO1.getIntegrate() == 1){
  794. creditsDetailDO1.setIntegrate(2);
  795. creditsDetailDO1.setTradeDirection(1);
  796. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  797. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  798. accountDO.setTotal(accountDO.getTotal()+(creditsDetailDO2.getIntegrate()-1));
  799. AccountDO accountDO1 = accountDao.save(accountDO);
  800. creditsDetailDO2.setTotal(accountDO1.getTotal());
  801. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+(creditsDetailDO2.getIntegrate()-1));
  802. taskPatientDetailDao.save(taskPatientDetailDO);
  803. creditsDetailDOS.clear();
  804. creditsDetailDOS.add(creditsDetailDO2);
  805. }/*else if(creditsDetailDO1.getIntegrate() == 3){
  806. creditsDetailDO1.setIntegrate(creditsDetailDO1.getIntegrate()+5);
  807. creditsDetailDO1.setTradeDirection(1);
  808. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  809. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  810. accountDO.setTotal(accountDO.getTotal()+(creditsDetailDO2.getIntegrate()-3));
  811. AccountDO accountDO1 = accountDao.save(accountDO);
  812. creditsDetailDO2.setTotal(accountDO1.getTotal());
  813. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+(creditsDetailDO2.getIntegrate()-3));
  814. taskPatientDetailDao.save(taskPatientDetailDO);
  815. creditsDetailDOS.clear();
  816. creditsDetailDOS.add(creditsDetailDO2);
  817. }*/
  818. }
  819. }else{
  820. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  821. if (creditsDetailDO.getStepNumber() < step1 && creditsDetailDO.getStepNumber() >0){
  822. creditsDetailDO1.setIntegrate(0);
  823. creditsDetailDO1.setTradeDirection(1);
  824. }else if (creditsDetailDO.getStepNumber() >= step1 && creditsDetailDO.getStepNumber() < step2){
  825. creditsDetailDO1.setIntegrate(1);
  826. creditsDetailDO1.setTradeDirection(1);
  827. }else if (creditsDetailDO.getStepNumber() >=step2){
  828. creditsDetailDO1.setIntegrate(2);
  829. creditsDetailDO1.setTradeDirection(1);
  830. }
  831. creditsDetailDO1.setSaasId("dev");
  832. creditsDetailDO1.setTradeType("ACTIVITY_TASK");
  833. creditsDetailDO1.setPatientId(creditsDetailDO.getPatientId());
  834. creditsDetailDO1.setHospital(creditsDetailDO.getHospital());
  835. creditsDetailDO1.setHospitalName(creditsDetailDO.getHospitalName());
  836. creditsDetailDO1.setAccountId(creditsDetailDO.getAccountId());
  837. creditsDetailDO1.setStatus(1);
  838. creditsDetailDO1.setCreateTime(new Date());
  839. creditsDetailDO1.setUpdateTime(new Date());
  840. creditsDetailDO1.setTransactionId(taskPatientDetailDO.getTaskId());
  841. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  842. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  843. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO2.getIntegrate());
  844. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+creditsDetailDO2.getIntegrate());
  845. taskPatientDetailDao.save(taskPatientDetailDO);
  846. creditsDetailDO2.setTotal(accountDO.getTotal());
  847. creditsDetailDOS.add(creditsDetailDO2);
  848. }
  849. try{
  850. activeRecordService.insert("dev",creditsDetailDOS.get(0).getTransactionId(),null,null,null,creditsDetailDOS.get(0).getPatientId());
  851. }catch (Exception e){
  852. logger.error("插入活跃出错:"+e.getMessage());
  853. }
  854. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  855. envelop.setDetailModelList(creditsDetailDOS);
  856. return envelop;
  857. }
  858. }catch (Exception e){
  859. e.printStackTrace();
  860. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  861. return envelop;
  862. }
  863. }
  864. /*public JSONObject getStepNumber(){
  865. String step = redisTemplate.·().get(STEP);
  866. logger.info("redis数据:"+step);
  867. String sql = ""
  868. String step1 = systemDictDao.
  869. logger.info("数据库的数据:"+step1);
  870. if (step != null && step.equalsIgnoreCase(step1)){
  871. JSONObject jsonObject = JSONObject.parseObject(step);
  872. logger.info("数据不一致:"+jsonObject.toString());
  873. return jsonObject;
  874. }else {
  875. JSONObject jsonObject = JSONObject.parseObject(step);
  876. redisTemplate.opsForValue().set(STEP,step1);
  877. logger.info("数据一致:"+jsonObject.toString());
  878. return jsonObject;
  879. }
  880. }*/
  881. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> weekReward(CreditsDetailDO creditsDetailDO) {
  882. try {
  883. synchronized (creditsDetailDO.getPatientId()) {
  884. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '" + creditsDetailDO.getPatientId() + "'";
  885. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount, new BeanPropertyRowMapper(AccountDO.class));
  886. if (accountDOList != null && accountDOList.size() != 0) {
  887. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  888. }
  889. String creditsSql = "select * from wlyy_health_bank_credits_detail where patient_id = '" + creditsDetailDO.getPatientId() + "' and " +
  890. "DATE_FORMAT(create_time,'%Y-%m-%d') IN " + creditsDetailDO.getWeekTimes()+" and description = '周奖励'";
  891. List<CreditsDetailDO> creditsDetailDOS1 = jdbcTemplate.query(creditsSql, new BeanPropertyRowMapper(CreditsDetailDO.class));
  892. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  893. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  894. if (getWeekOfDate(new Date()).equalsIgnoreCase("星期五")||getWeekOfDate(new Date()).equalsIgnoreCase("星期六")||getWeekOfDate(new Date()).equalsIgnoreCase("星期日")){
  895. String sql = "select sum(integrate) as total from wlyy_health_bank_credits_detail where patient_id = '" + creditsDetailDO.getPatientId() + "' and description = '周奖励'";
  896. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sql);
  897. Long count = 0L;
  898. if(rstotal!=null&&rstotal.size()>0){
  899. Object object = rstotal.get(0).get("total");
  900. if (object != null){
  901. count = Long.parseLong(object.toString());
  902. }
  903. }
  904. if (count > 12){
  905. envelop.setMessage("奖励积分已达到12分。不能再奖励了!");
  906. return envelop;
  907. }else{
  908. if (creditsDetailDOS1 == null || creditsDetailDOS1.size() == 0) {
  909. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  910. creditsDetailDO.setSaasId("dev");
  911. creditsDetailDO.setStatus(1);
  912. creditsDetailDO.setTransactionId(creditsDetailDO.getTransactionId());
  913. creditsDetailDO.setCreateTime(new Date());
  914. creditsDetailDO.setUpdateTime(new Date());
  915. creditsDetailDO.setTradeDirection(1);
  916. CreditsDetailDO creditsDetailDO1 = credittsLogDetailDao.save(creditsDetailDO);
  917. creditsDetailDOList.add(creditsDetailDO1);
  918. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  919. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  920. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  921. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  922. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1, new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  923. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  924. if (creditsDetailDO1.getTradeDirection() == 1) {
  925. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() + creditsDetailDO1.getIntegrate());
  926. } else if (creditsDetailDO.getTradeDirection() == -1) {
  927. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() - creditsDetailDO1.getIntegrate());
  928. }
  929. taskPatientDetailDao.save(taskPatientDetailDO1);
  930. AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId());
  931. if (creditsDetailDO1.getTradeDirection() == 1) {
  932. accountDO.setTotal(accountDO.getTotal() + creditsDetailDO1.getIntegrate());
  933. } else if (creditsDetailDO.getTradeDirection() == -1) {
  934. accountDO.setTotal(accountDO.getTotal() - creditsDetailDO1.getIntegrate());
  935. }
  936. AccountDO accountDO1 = accountDao.save(accountDO);
  937. List<CreditsDetailDO> creditsDetailDOS = new ArrayList<>();
  938. for (CreditsDetailDO creditsDetailDO2 : creditsDetailDOList) {
  939. creditsDetailDO2.setTotal(accountDO1.getTotal());
  940. creditsDetailDO2.setFlag("1");
  941. creditsDetailDOS.add(creditsDetailDO2);
  942. }
  943. envelop.setDetailModelList(creditsDetailDOS);
  944. }else {
  945. for (CreditsDetailDO creditsDetailDO1 : creditsDetailDOS1){
  946. creditsDetailDO1.setFlag("2");
  947. }
  948. envelop.setDetailModelList(creditsDetailDOS1);
  949. }
  950. return envelop;
  951. }
  952. }else{
  953. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  954. creditsDetailDO1.setFlag("0");
  955. creditsDetailDOList.add(creditsDetailDO1);
  956. envelop.setDetailModelList(creditsDetailDOList);
  957. return envelop;
  958. }
  959. }
  960. } catch (Exception e) {
  961. e.printStackTrace();
  962. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  963. return envelop;
  964. }
  965. }
  966. public String getWeekOfDate(Date dt) {
  967. String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
  968. Calendar cal = Calendar.getInstance();
  969. cal.setTime(dt);
  970. int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
  971. if (w < 0)
  972. w = 0;
  973. return weekDays[w];
  974. }
  975. }