CreditsDetailService.java 101 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771
  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.jw.util.date.DateUtil;
  13. import com.yihu.mysql.query.BaseJpaService;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import org.springframework.beans.factory.BeanClassLoaderAware;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.data.redis.core.StringRedisTemplate;
  19. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  20. import org.springframework.jdbc.core.JdbcTemplate;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.util.StringUtils;
  23. import javax.print.DocFlavor;
  24. import javax.transaction.Transactional;
  25. import java.text.ParseException;
  26. import java.text.SimpleDateFormat;
  27. import java.util.*;
  28. /**
  29. * @author wangzhinan
  30. * @create 2018-04-27 16:53
  31. * @desc credits log info Service
  32. **/
  33. @Service
  34. @Transactional
  35. public class CreditsDetailService extends BaseJpaService<CreditsDetailDO,CredittsLogDetailDao> {
  36. private Logger logger = LoggerFactory.getLogger(CreditsDetailService.class);
  37. private static String STEP = "health:blank:step";
  38. @Autowired
  39. private CredittsLogDetailDao credittsLogDetailDao;
  40. @Autowired
  41. private TaskDao taskDao;
  42. @Autowired
  43. private ActivityDao activityDao;
  44. @Autowired
  45. private JdbcTemplate jdbcTemplate;
  46. @Autowired
  47. private AccountDao accountDao;
  48. @Autowired
  49. private TaskPatientDetailDao taskPatientDetailDao;
  50. @Autowired
  51. private TaskRuleDao taskRuleDao;
  52. @Autowired
  53. private StringRedisTemplate redisTemplate;
  54. @Autowired
  55. private ActiveRecordService activeRecordService;
  56. @Autowired
  57. private ActivityRuleDao activityRuleDao;
  58. @Autowired
  59. private ExchangeGoodsDao exchangeGoodsDao;
  60. @Autowired
  61. private TaskGoodsDao taskGoodsDao;
  62. /**
  63. * find creditsLogInfo
  64. *
  65. * @return
  66. * @throws ParseException
  67. */
  68. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> findByCondition(CreditsDetailDO creditsDetailDO, Integer page, Integer size) throws ParseException {
  69. String sql = new ISqlUtils().getSql(creditsDetailDO,page,size,"*");
  70. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  71. for (CreditsDetailDO creditsDetailDO1 : creditsDetailDOS){
  72. if (creditsDetailDO1.getTradeType() != null && creditsDetailDO1.getTradeType().equalsIgnoreCase("ACTIVITY_TASK")){
  73. TaskDO taskDO = taskDao.findOne(creditsDetailDO1.getTransactionId());
  74. creditsDetailDO1.setTaskDO(taskDO);
  75. }else if (creditsDetailDO1.getTradeType()!=null&&creditsDetailDO1.getTradeType().equals("EXCHANGE_GOODS")){
  76. ExchangeGoodsDO exchangeGoodsDO =exchangeGoodsDao.findOne(creditsDetailDO1.getTransactionId());
  77. TaskGoodsDO taskGoodsDO = taskGoodsDao.selectById(exchangeGoodsDO.getActivityGoodsId());
  78. exchangeGoodsDO.setTaskGoodsDO(taskGoodsDO);
  79. creditsDetailDO1.setExchangeGoodsDO(exchangeGoodsDO);
  80. }
  81. }
  82. String sqlcount = new ISqlUtils().getSql(creditsDetailDO,0,0,"count");
  83. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  84. Long count = 0L;
  85. if(rstotal!=null&&rstotal.size()>0){
  86. count = (Long) rstotal.get(0).get("total");
  87. }
  88. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success, creditsDetailDOS,page,size,count);
  89. }
  90. /**
  91. * 获取账户信息
  92. *
  93. * @param creditsDetailDO
  94. * @return
  95. */
  96. public MixEnvelop<AccountDO, AccountDO> findByTradeDirection(CreditsDetailDO creditsDetailDO){
  97. AccountDO accountDO1 = new AccountDO();
  98. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  99. String sql1 = ISqlUtils.getAllSql(accountDO1);
  100. List<AccountDO> accountDOS = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(AccountDO.class));
  101. if (accountDOS == null || accountDOS.size() == 0){
  102. accountDO1.setTotal(0);
  103. accountDO1.setAccountName(creditsDetailDO.getName());
  104. if(creditsDetailDO.getIdCard().length()>=4){// 判断是否长度大于等于4
  105. String cardNumber=creditsDetailDO.getIdCard().substring(creditsDetailDO.getIdCard().length()- 4,creditsDetailDO.getIdCard().length());//截取两个数字之间的部分
  106. int random = (int)((Math.random()*9+1)*100000);
  107. accountDO1.setCardNumber(cardNumber+Integer.toString(random));
  108. }
  109. accountDO1.setHospital(creditsDetailDO.getHospital());
  110. accountDO1.setPassword("123456");
  111. accountDO1.setHospitalName(creditsDetailDO.getHospitalName());
  112. accountDO1.setStatus(1);
  113. accountDO1.setSaasId("dev");
  114. accountDO1.setCreateTime(new Date());
  115. accountDO1.setUpdateTime(new Date());
  116. accountDao.save(accountDO1);
  117. }
  118. List<AccountDO> accountDOS1 = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(AccountDO.class));
  119. AccountDO accountDO = accountDOS1.get(0);
  120. 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()+"'";
  121. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sql);
  122. if (rstotal!= null && rstotal.size()>0){
  123. if (rstotal.get(0).get("total") == null){
  124. accountDO.setUsedTotal(0);
  125. }else {
  126. accountDO.setUsedTotal(Integer.parseInt(rstotal.get(0).get("total").toString()));
  127. }
  128. }
  129. return MixEnvelop.getSuccess(HealthBankMapping.api_success,accountDO);
  130. }
  131. /*
  132. public Envelop<Boolean> exchangeGoods(GoodsDO goodsDO){
  133. CreditsDetailDO creditsLogDetailDO = new CreditsDetailDO();
  134. Envelop<Boolean> envelop = new Envelop<>();
  135. envelop.setObj(true);
  136. return envelop;
  137. }
  138. */
  139. public MixEnvelop<AccountDO, AccountDO> selectByRanking(List<String> patientIds, Integer page, Integer size){
  140. StringBuffer buffer = new StringBuffer();
  141. buffer.append(" ba.patient_id in(");
  142. if (patientIds == null || patientIds.size() == 0){
  143. buffer.append("''");
  144. }else {
  145. for (int i=0;i<patientIds.size();i++){
  146. buffer.append("'"+patientIds.get(i)+"'").append(",");
  147. }
  148. buffer.deleteCharAt(buffer.length()-1);
  149. }
  150. buffer.append(") ");
  151. String sql =
  152. "SELECT ba1.patient_id AS patient_id," +
  153. "ba1.account_name AS account_name," +
  154. "ba1.hospital AS hospital," +
  155. "ba1.total AS total," +
  156. "ba1.create_time AS create_time," +
  157. "ba1.sum AS sum" +
  158. " FROM" +
  159. "( SELECT " +
  160. "ba.patient_id AS patient_id," +
  161. "ba.account_name AS account_name," +
  162. "ba.hospital AS hospital," +
  163. "ba.total AS total," +
  164. "ba.create_time AS create_time," +
  165. " if(ba.total=0,ba.total,(ba.total +COALESCE((cd1.total),0))) AS sum" +
  166. " FROM" +
  167. " wlyy_health_bank_account ba" +
  168. " LEFT JOIN ( " +
  169. "SELECT" +
  170. " SUM(cd.integrate) AS total," +
  171. " cd.patient_id AS patient_id" +
  172. " FROM" +
  173. " wlyy_health_bank_credits_detail cd" +
  174. " WHERE " +
  175. "cd.trade_direction = - 1" +
  176. " GROUP BY " +
  177. " cd.patient_id ) cd1 ON cd1.patient_id = ba.patient_id " +
  178. " WHERE " + buffer +
  179. " ORDER BY" +
  180. " ba.create_time DESC )ba1" +
  181. " ORDER BY " +
  182. " ba1.total DESC"+
  183. " LIMIT "+(page-1)*size+","+size ;
  184. List<AccountDO> accountDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(AccountDO.class));
  185. String sqlCount = "SELECT count(1) AS total"+
  186. " FROM " +
  187. " wlyy_health_bank_account ba LEFT JOIN " +
  188. " ( " +
  189. " SELECT " +
  190. " SUM(cd.integrate) AS total, " +
  191. " cd.patient_id AS patient_id " +
  192. " FROM " +
  193. " wlyy_health_bank_credits_detail cd " +
  194. " WHERE " +
  195. " cd.trade_direction = - 1 " +
  196. " GROUP BY " +
  197. " cd.patient_id " +
  198. " ) cd1 ON cd1.patient_id = ba.patient_id " +
  199. "WHERE " + buffer +
  200. " ORDER BY " +
  201. " ba.create_time, " +
  202. " (ba.total + COALESCE(cd1.total,0)) DESC ";
  203. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  204. Long count = 0L;
  205. if(rstotal!=null&&rstotal.size()>0){
  206. count = (Long) rstotal.get(0).get("total");
  207. }
  208. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success, accountDOS,page,size,count);
  209. }
  210. /**
  211. * 添加积分
  212. *
  213. * @param creditsDetailDO
  214. * @return
  215. */
  216. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> insert(CreditsDetailDO creditsDetailDO){
  217. try {
  218. synchronized (creditsDetailDO.getPatientId()){
  219. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '"+creditsDetailDO.getPatientId() +"'";
  220. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  221. if (accountDOList != null && accountDOList.size() != 0){
  222. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  223. }else {
  224. AccountDO accountDO1 = new AccountDO();
  225. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  226. accountDO1.setTotal(0);
  227. accountDO1.setCouponTotal(0L);
  228. accountDO1.setAccountName(creditsDetailDO.getName());
  229. if(creditsDetailDO.getIdCard().length()>=4){// 判断是否长度大于等于4
  230. String cardNumber=creditsDetailDO.getIdCard().substring(creditsDetailDO.getIdCard().length()- 4,creditsDetailDO.getIdCard().length());//截取两个数字之间的部分
  231. int random = (int)((Math.random()*9+1)*100000);
  232. accountDO1.setCardNumber(cardNumber+Integer.toString(random));
  233. }
  234. accountDO1.setHospital(creditsDetailDO.getHospital());
  235. accountDO1.setPassword("123456");
  236. accountDO1.setHospitalName(creditsDetailDO.getHospitalName());
  237. accountDO1.setStatus(1);
  238. accountDO1.setCreateTime(new Date());
  239. accountDO1.setUpdateTime(new Date());
  240. accountDao.save(accountDO1);
  241. List<AccountDO> accountDOS = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  242. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  243. }
  244. TaskDO taskDO = new TaskDO();
  245. taskDO.setTaskCode(creditsDetailDO.getFlag());
  246. taskDO.setId(creditsDetailDO.getTransactionId());
  247. /*taskDO.setPatientId(creditsDetailDO.getPatientId());*/
  248. String sql = ISqlUtils.getSql(taskDO,1,1,"*");
  249. List<TaskDO> taskDOList = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskDO.class));
  250. creditsDetailDO.setTransactionId(taskDOList.get(0).getId());
  251. String ruleSql = "SELECT * FROM wlyy_health_bank_task_rule WHERE id= '"+taskDOList.get(0).getRuleCode()+"'";
  252. List<TaskRuleDO> taskRuleDOS = jdbcTemplate.query(ruleSql,new BeanPropertyRowMapper(TaskRuleDO.class));
  253. TaskRuleDO taskRuleDO = taskRuleDOS.get(0);
  254. creditsDetailDO.setIntegrate(taskRuleDO.getIntegrate());
  255. creditsDetailDO.setTradeDirection(taskRuleDO.getTradeDirection());
  256. String taskSql = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDOList.get(0).getId()+"' and patient_id = '" + creditsDetailDO.getPatientId() +"'";
  257. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(taskSql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  258. if (taskPatientDetailDOS == null || taskPatientDetailDOS.size() ==0){
  259. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  260. taskPatientDetailDO.setTaskId(creditsDetailDO.getTransactionId());
  261. taskPatientDetailDO.setSaasId(creditsDetailDO.getSaasId());
  262. taskPatientDetailDO.setPatientId(creditsDetailDO.getPatientId());
  263. taskPatientDetailDO.setPatientIdcard(creditsDetailDO.getIdCard());
  264. taskPatientDetailDO.setPatientOpenid(creditsDetailDO.getOpenId());
  265. taskPatientDetailDO.setUnionId(creditsDetailDO.getUnionId());
  266. taskPatientDetailDO.setStatus(Integer.parseInt("0"));
  267. taskPatientDetailDO.setCreateTime(new Date());
  268. taskPatientDetailDO.setUpdateTime(new Date());
  269. taskPatientDetailDO.setActivityId(taskDOList.get(0).getTransactionId());
  270. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  271. taskPatientDetailDao.save(taskPatientDetailDO);
  272. }else if (taskPatientDetailDOS != null && taskDOList.get(0).getPeriod() == 0){
  273. String taskSql1 = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDOList.get(0).getId()+
  274. "' and patient_id = '"+creditsDetailDO.getPatientId()+"' and create_time > '" + DateUtils.getDayBegin() +"' and create_time < '"+ DateUtils.getDayEnd() +"'";
  275. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  276. if (taskPatientDetailDOS1 == null || taskPatientDetailDOS1.size() == 0){
  277. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  278. taskPatientDetailDO.setTaskId(creditsDetailDO.getTransactionId());
  279. taskPatientDetailDO.setSaasId(creditsDetailDO.getSaasId());
  280. taskPatientDetailDO.setPatientId(creditsDetailDO.getPatientId());
  281. taskPatientDetailDO.setPatientIdcard(creditsDetailDO.getIdCard());
  282. taskPatientDetailDO.setPatientOpenid(creditsDetailDO.getOpenId());
  283. taskPatientDetailDO.setActivityId(taskDOList.get(0).getTransactionId());
  284. taskPatientDetailDO.setStatus(Integer.parseInt("0"));
  285. taskPatientDetailDO.setCreateTime(new Date());
  286. taskPatientDetailDO.setUpdateTime(new Date());
  287. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  288. taskPatientDetailDao.save(taskPatientDetailDO);
  289. }
  290. }
  291. logger.info("uploadTime:"+creditsDetailDO.getUploadTime());
  292. if (creditsDetailDO.getUploadTime()!=null&&creditsDetailDO.getUploadTime()!=""){
  293. creditsDetailDO.setCreateTime(DateUtil.strToDateLong(creditsDetailDO.getUploadTime()));
  294. }else {
  295. creditsDetailDO.setCreateTime(new Date());
  296. }
  297. creditsDetailDO.setUpdateTime(new Date());
  298. CreditsDetailDO creditsDetailDO1 =credittsLogDetailDao.save(creditsDetailDO);
  299. creditsDetailDO1.setFlag(creditsDetailDO.getFlag());
  300. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  301. creditsDetailDOList.add(creditsDetailDO1);
  302. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  303. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  304. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  305. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  306. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  307. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  308. if (creditsDetailDO1.getTradeDirection() == 1){
  309. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal()+creditsDetailDO1.getIntegrate());
  310. }else if (creditsDetailDO.getTradeDirection() == -1){
  311. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal()-creditsDetailDO1.getIntegrate());
  312. }
  313. taskPatientDetailDao.save(taskPatientDetailDO1);
  314. AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId());
  315. if (creditsDetailDO1.getTradeDirection() == 1){
  316. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO1.getIntegrate());
  317. }else if (creditsDetailDO.getTradeDirection() == -1){
  318. accountDO.setTotal(accountDO.getTotal()-creditsDetailDO1.getIntegrate());
  319. }
  320. AccountDO accountDO1 = accountDao.save(accountDO);
  321. List<CreditsDetailDO> creditsDetailDOS = new ArrayList<>();
  322. for (CreditsDetailDO creditsDetailDO2:creditsDetailDOList){
  323. creditsDetailDO2.setTotal(accountDO1.getTotal());
  324. creditsDetailDOS.add(creditsDetailDO2);
  325. }
  326. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  327. envelop.setDetailModelList(creditsDetailDOS);
  328. return envelop;
  329. }
  330. }catch (Exception e){
  331. e.printStackTrace();
  332. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  333. return envelop;
  334. }
  335. }
  336. /**
  337. * 活动排名
  338. *
  339. * @param activityId 活动id
  340. * @param ids 微信编码
  341. *
  342. * @param page 页码
  343. *
  344. * @param size 分页大小
  345. * @return
  346. */
  347. public MixEnvelop<TaskPatientDetailDO, TaskPatientDetailDO> selectByActivityRanking(String activityId, List<String> ids, Integer page, Integer size){
  348. StringBuffer buffer = new StringBuffer();
  349. buffer.append("(");
  350. if (ids == null || ids.size() == 0){
  351. buffer.append("''");
  352. }else {
  353. for (int i=0;i<ids.size();i++){
  354. buffer.append("'"+ids.get(i)+"'").append(",");
  355. }
  356. buffer.deleteCharAt(buffer.length()-1);
  357. }
  358. buffer.append(") ");
  359. String sql = "SELECT " +
  360. " * " +
  361. "FROM " +
  362. " ( " +
  363. " SELECT " +
  364. " SUM(ptpd.total) AS total, " +
  365. " ptpd.patient_openid AS patient_openid, " +
  366. " ptpd.task_id AS task_id, " +
  367. " ptpd.activity_id AS activity_id, " +
  368. " ptpd.create_time as create_time, " +
  369. " ptpd.patient_id AS patient_id " +
  370. " FROM " +
  371. " wlyy_health_bank_task_patient_detail ptpd " +
  372. " WHERE " +
  373. " activity_id = '" + activityId +
  374. "' GROUP BY " +
  375. " patient_id " +
  376. " ORDER BY ptpd.create_time DESC " +
  377. " )btpd1 " +
  378. " WHERE patient_id IN "+buffer+
  379. " ORDER BY btpd1.total DESC "+" LIMIT " + (page-1)*size+","+size;
  380. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  381. for (TaskPatientDetailDO taskPatientDetailDO : taskPatientDetailDOS){
  382. String accountSql = "select * from wlyy_health_bank_account where patient_id = '"+taskPatientDetailDO.getPatientId()+"'";
  383. List<AccountDO> accountDOS = jdbcTemplate.query(accountSql,new BeanPropertyRowMapper(AccountDO.class));
  384. taskPatientDetailDO.setAccountDO(accountDOS.get(0));
  385. }
  386. String sqlCount = "SELECT " +
  387. " count(1) AS total " +
  388. "FROM " +
  389. " ( " +
  390. " SELECT " +
  391. " SUM(ptpd.total) AS total, " +
  392. " ptpd.patient_openid AS patient_openid, " +
  393. " ptpd.task_id AS task_id, " +
  394. " ptpd.activity_id AS activity_id, " +
  395. " ptpd.create_time as create_time, " +
  396. " ptpd.patient_id AS patient_id " +
  397. " FROM " +
  398. " wlyy_health_bank_task_patient_detail ptpd " +
  399. " WHERE " +
  400. " activity_id = '" + activityId+
  401. "' GROUP BY " +
  402. " patient_openid " +
  403. " ORDER BY ptpd.create_time DESC " +
  404. " )btpd1 " +
  405. "WHERE patient_openid IN "+buffer+
  406. " ORDER BY btpd1.total DESC ";
  407. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  408. Long count = 0L;
  409. if(rstotal!=null&&rstotal.size()>0){
  410. count = (Long) rstotal.get(0).get("total");
  411. }
  412. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success, taskPatientDetailDOS,page,size,count);
  413. }
  414. /**
  415. * 根据活动查询积分
  416. *
  417. * @param activityId 活动id
  418. *
  419. * @param patientId 居民id
  420. *
  421. * @param page 页码
  422. *
  423. * @param size 分页大小
  424. * @return
  425. */
  426. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> selectByActivity(String activityId, String patientId, Integer page, Integer size){
  427. String sql="SELECT * " +
  428. "FROM " +
  429. " wlyy_health_bank_credits_detail " +
  430. "WHERE" +
  431. " transaction_id IN ( " +
  432. " SELECT " +
  433. " bt.id " +
  434. " FROM " +
  435. " wlyy_health_bank_task bt " +
  436. " WHERE " +
  437. " transaction_id = '"+activityId +"' " +
  438. " ) " +
  439. " and patient_id = '" +patientId+
  440. "' LIMIT "+(page-1)*size +","+size;
  441. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  442. for (CreditsDetailDO creditsDetailDO : creditsDetailDOS){
  443. TaskDO taskDO = taskDao.findOne(creditsDetailDO.getTransactionId());
  444. creditsDetailDO.setTaskDO(taskDO);
  445. }
  446. String sqlcount = "SELECT count(1) AS" +
  447. " total FROM " +
  448. " wlyy_health_bank_credits_detail " +
  449. "WHERE" +
  450. " transaction_id IN ( " +
  451. " SELECT " +
  452. " bt.id " +
  453. " FROM " +
  454. " wlyy_health_bank_task bt " +
  455. " WHERE " +
  456. " transaction_id = '"+activityId +"' " +
  457. " ) " +
  458. " and patient_id = '" +patientId+
  459. "'";
  460. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlcount);
  461. Long count = 0L;
  462. if(rstotal!=null&&rstotal.size()>0){
  463. count = (Long) rstotal.get(0).get("total");
  464. }
  465. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success,creditsDetailDOS,page,size,count);
  466. }
  467. /**
  468. * 根据活动查找全部排行
  469. *
  470. * @param activityId 活动id
  471. * @param page 页码
  472. * @param size 分页大小
  473. * @return
  474. */
  475. public MixEnvelop<TaskPatientDetailDO, TaskPatientDetailDO> selectByActivityRanking1(String activityId, String patientId, Integer page, Integer size){
  476. String sql = "SELECT " +
  477. " * " +
  478. "FROM " +
  479. " ( " +
  480. " SELECT " +
  481. " SUM(ptpd.total) AS total, " +
  482. " ptpd.patient_openid AS patient_openid, " +
  483. " ptpd.task_id AS task_id, " +
  484. " ptpd.activity_id AS activity_id, " +
  485. " ptpd.create_time as create_time, " +
  486. " ptpd.patient_id AS patient_id " +
  487. " FROM " +
  488. " wlyy_health_bank_task_patient_detail ptpd " +
  489. " WHERE " +
  490. " activity_id = '" + activityId +
  491. "' GROUP BY " +
  492. " patient_openid " +
  493. " ORDER BY ptpd.create_time DESC " +
  494. " )btpd1 " +
  495. " ORDER BY btpd1.total DESC "+" LIMIT " + (page-1)*size+","+size;
  496. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  497. logger.info(taskPatientDetailDOS.toString()+""+taskPatientDetailDOS.size());
  498. for (int i = 0;taskPatientDetailDOS != null&&taskPatientDetailDOS.size()!=0 && i<taskPatientDetailDOS.size();i++){
  499. TaskPatientDetailDO taskPatientDetailDO = taskPatientDetailDOS.get(i);
  500. String accountSql = "select * from wlyy_health_bank_account where patient_id = '"+taskPatientDetailDO.getPatientId()+"'";
  501. List<AccountDO> accountDOS = jdbcTemplate.query(accountSql,new BeanPropertyRowMapper(AccountDO.class));
  502. if (taskPatientDetailDOS.get(i).getPatientId().equalsIgnoreCase(patientId)){
  503. /*String taskSql = "select count(1)+1 as total from (" +
  504. "select * from (SELECT " +
  505. " SUM(ptpd.total) AS total, " +
  506. " ptpd.patient_openid AS patient_openid, " +
  507. " ptpd.task_id AS task_id, " +
  508. " ptpd.activity_id AS activity_id, " +
  509. " ptpd.create_time as create_time, " +
  510. " ptpd.patient_id AS patient_id " +
  511. " FROM " +
  512. " wlyy_health_bank_task_patient_detail ptpd " +
  513. " WHERE " +
  514. " activity_id = '" + activityId + "')ptpd1 where" +
  515. " ptpd1.patient_id = '"+patientId+"' AND ptpd1.total > "+taskPatientDetailDOS.get(i).getTotal()+") ptpd2";
  516. List<Map<String,Object>> rstotal1 = jdbcTemplate.queryForList(taskSql);
  517. Long count = 0L;
  518. if(rstotal1!=null&&rstotal1.size()>0){
  519. count = (Long) rstotal1.get(0).get("total");
  520. }
  521. accountDOS.get(0).setActivityRanking(count);*/
  522. taskPatientDetailDO.setIsFlag(1);
  523. }else {
  524. taskPatientDetailDO.setIsFlag(0);
  525. }
  526. taskPatientDetailDO.setAccountDO(accountDOS.get(0));
  527. }
  528. String sqlCount = "SELECT " +
  529. " count(1) AS total " +
  530. "FROM " +
  531. " ( " +
  532. " SELECT " +
  533. " SUM(ptpd.total) AS total, " +
  534. " ptpd.patient_openid AS patient_openid, " +
  535. " ptpd.task_id AS task_id, " +
  536. " ptpd.activity_id AS activity_id, " +
  537. " ptpd.create_time as create_time, " +
  538. " ptpd.patient_id AS patient_id " +
  539. " FROM " +
  540. " wlyy_health_bank_task_patient_detail ptpd " +
  541. " WHERE " +
  542. " activity_id = '" + activityId+
  543. "' GROUP BY " +
  544. " patient_openid " +
  545. " ORDER BY ptpd.create_time DESC " +
  546. " )btpd1 " +
  547. " ORDER BY btpd1.total DESC ";
  548. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);
  549. Long count = 0L;
  550. if(rstotal!=null&&rstotal.size()>0){
  551. count = (Long) rstotal.get(0).get("total");
  552. }
  553. return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success, taskPatientDetailDOS,page,size,count);
  554. }
  555. /**
  556. * 医生主动加分
  557. *
  558. * @param array 居民信息集合
  559. *
  560. * @param ruleId 规则id
  561. * @return
  562. */
  563. public MixEnvelop<Boolean, Boolean> doctorAddIntegrate(JSONArray array, String ruleId, String description) throws Exception {
  564. MixEnvelop<Boolean, Boolean> envelop = new MixEnvelop<>();
  565. for (int i=0;i<array.size();i++){
  566. TaskRuleDO taskRuleDO = taskRuleDao.findOne(ruleId);
  567. JSONObject object = array.getJSONObject(i);
  568. String patientId = object.getString("code");
  569. String idCard = object.getString("idcard");
  570. String unionId = object.getString("unionid");
  571. String openId = object.getString("openid");
  572. String hospital = object.getString("hospital");
  573. String hospitalName = object.getString("hospitalName");
  574. String taskSql = "select * from wlyy_health_bank_task bt where type = 'RULE_TASK' AND transaction_id = '"+ruleId +"'";
  575. List<TaskDO> taskDOList = jdbcTemplate.query(taskSql,new BeanPropertyRowMapper(TaskDO.class));
  576. TaskDO taskDO1 = new TaskDO();
  577. if (taskDOList.isEmpty() && taskDOList.size() == 0){
  578. TaskDO taskDO = new TaskDO();
  579. taskDO.setTransactionId(taskRuleDO.getId());
  580. taskDO.setTaskCode("RULE");
  581. taskDO.setStatus(1);
  582. taskDO.setRuleCode(taskRuleDO.getId());
  583. taskDO.setType("RULE_TASK");
  584. taskDO.setCreateTime(new Date());
  585. taskDO.setUpdateTime(new Date());
  586. taskDO.setPeriod(taskRuleDO.getPeriod());
  587. taskDO.setSaasId("dev");
  588. taskDO.setTitle(taskRuleDO.getDescription());
  589. taskDO.setContent(taskRuleDO.getDescription());
  590. taskDO1 = taskDao.save(taskDO);
  591. }else {
  592. taskDO1 = taskDOList.get(0);
  593. }
  594. if (taskRuleDO.getPeriod() == 1){
  595. String sql = "select * from wlyy_health_bank_task_patient_detail where patient_id = '"+patientId+"'AND task_id ='"+taskDO1.getId()+"'";
  596. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  597. if (taskPatientDetailDOS != null && taskPatientDetailDOS.size() != 0){
  598. throw new Exception("已奖励过");
  599. }
  600. }else if (taskRuleDO.getPeriod() == 0){
  601. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  602. Date date = new Date();
  603. String date1 = dateFormat.format(date);
  604. String begin = DateUtils.getMinMonthDate(date1);
  605. String end = DateUtils.getMaxMonthDate(date1);
  606. 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+"'";
  607. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  608. if (taskPatientDetailDOS != null && taskPatientDetailDOS.size() != 0){
  609. throw new Exception("已奖励过");
  610. }
  611. }
  612. String sql1 = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDO1.getId()+"' " +
  613. "AND patient_idcard = '"+idCard+"' AND patient_openid = '"+openId+"' AND union_id = '"+unionId+"'";
  614. List<TaskPatientDetailDO> taskPatientDetailDOS = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  615. TaskPatientDetailDO taskPatientDetailDO1 = new TaskPatientDetailDO();
  616. if (taskPatientDetailDOS.isEmpty() && taskPatientDetailDOS.size() == 0){
  617. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  618. taskPatientDetailDO.setStatus(1);
  619. taskPatientDetailDO.setTotal(Long.parseLong("0"));
  620. taskPatientDetailDO.setPatientId(patientId);
  621. taskPatientDetailDO.setPatientOpenid(openId);
  622. taskPatientDetailDO.setPatientIdcard(idCard);
  623. taskPatientDetailDO.setUnionId(unionId);
  624. taskPatientDetailDO.setSaasId("dev");
  625. taskPatientDetailDO.setCreateTime(new Date());
  626. taskPatientDetailDO.setUpdateTime(new Date());
  627. taskPatientDetailDO.setTaskId(taskDO1.getId());
  628. taskPatientDetailDO1 = taskPatientDetailDao.save(taskPatientDetailDO);
  629. }else {
  630. taskPatientDetailDO1 = taskPatientDetailDOS.get(0);
  631. }
  632. String sql = "select * from wlyy_health_bank_account where patient_id = '"+patientId+"'";
  633. List<AccountDO> accountDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(AccountDO.class));
  634. if (taskRuleDO.getTradeDirection() == -1 && taskRuleDO.getIntegrate() == 0){
  635. String integrateSql = "select * from wlyy_health_bank_credits_detail where patient_id = '"+patientId+"' " +
  636. "AND transaction_id IN (SELECT id FROM wlyy_health_bank_task WHERE task_code IN ('BP_BIND','GLU_BIND','BP_MEASURE','GLU_MEASURE','RULE'))";
  637. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(integrateSql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  638. AccountDO accountDO = accountDOS.get(0);
  639. for (CreditsDetailDO creditsDetailDO:creditsDetailDOS){
  640. if (creditsDetailDO.getTradeDirection()==1&&creditsDetailDO.getStatus()!=0){
  641. /* int total = accountDO.getTotal() - creditsDetailDO.getIntegrate();*/
  642. creditsDetailDO.setStatus(0);
  643. creditsDetailDO.setDescription(description);
  644. credittsLogDetailDao.save(creditsDetailDO);
  645. }
  646. }
  647. accountDO.setTotal(0);
  648. accountDao.save(accountDO);
  649. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  650. creditsDetailDO1.setStatus(1);
  651. creditsDetailDO1.setSaasId("dev");
  652. creditsDetailDO1.setAccountId(accountDOS.get(0).getId());
  653. creditsDetailDO1.setHospital(hospital);
  654. creditsDetailDO1.setHospitalName(hospitalName);
  655. creditsDetailDO1.setPatientId(patientId);
  656. creditsDetailDO1.setIntegrate(taskRuleDO.getIntegrate());
  657. creditsDetailDO1.setTradeDirection(taskRuleDO.getTradeDirection());
  658. creditsDetailDO1.setDescription(description);
  659. creditsDetailDO1.setCreateTime(new Date());
  660. creditsDetailDO1.setUpdateTime(new Date());
  661. creditsDetailDO1.setTransactionId(taskDO1.getId());
  662. creditsDetailDO1.setTradeType("ACTIVITY_TASK");
  663. credittsLogDetailDao.save(creditsDetailDO1);
  664. }else{
  665. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  666. creditsDetailDO.setStatus(1);
  667. creditsDetailDO.setSaasId("dev");
  668. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  669. creditsDetailDO.setHospital(hospital);
  670. creditsDetailDO.setHospitalName(hospitalName);
  671. creditsDetailDO.setPatientId(patientId);
  672. creditsDetailDO.setIntegrate(taskRuleDO.getIntegrate());
  673. creditsDetailDO.setTradeDirection(taskRuleDO.getTradeDirection());
  674. creditsDetailDO.setDescription(description);
  675. creditsDetailDO.setCreateTime(new Date());
  676. creditsDetailDO.setUpdateTime(new Date());
  677. creditsDetailDO.setTransactionId(taskDO1.getId());
  678. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  679. creditsDetailDO = credittsLogDetailDao.save(creditsDetailDO);
  680. if (taskRuleDO.getTradeDirection() == -1){
  681. if (taskRuleDO.getIntegrate() == 0){
  682. String integrateSql = "select * from wlyy_health_bank_credits_detail where patient_id = '"+patientId+"' " +
  683. "AND transaction_id IN (SELECT id FROM wlyy_health_bank_task WHERE task_code IN ('BP_BIND','GLU_BIND','BP_MEASURE','GLU_MEASURE','RULE'))";
  684. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(integrateSql,new BeanPropertyRowMapper(CreditsDetailDO.class));
  685. AccountDO accountDO = accountDOS.get(0);
  686. for (CreditsDetailDO creditsDetailDO1:creditsDetailDOS){
  687. if (creditsDetailDO1.getTradeDirection()==1&&creditsDetailDO1.getStatus()!=0){
  688. int total = accountDO.getTotal() - creditsDetailDO1.getIntegrate();
  689. creditsDetailDO1.setStatus(0);
  690. creditsDetailDO1.setDescription(description);
  691. credittsLogDetailDao.save(creditsDetailDO1);
  692. }
  693. }
  694. accountDO.setTotal(0);
  695. accountDao.save(accountDO);
  696. }else if (taskRuleDO.getIntegrate()!=0){
  697. AccountDO accountDO = accountDOS.get(0);
  698. int total = accountDO.getTotal() - creditsDetailDO.getIntegrate();
  699. accountDO.setTotal(total);
  700. accountDao.save(accountDO);
  701. }
  702. }else if (taskRuleDO.getTradeDirection() == 1){
  703. AccountDO accountDO = accountDOS.get(0);
  704. accountDO.setTotal(accountDO.getTotal() + taskRuleDO.getIntegrate());
  705. accountDao.save(accountDO);
  706. }
  707. }
  708. }
  709. envelop.setObj(true);
  710. return envelop;
  711. }
  712. /**
  713. * 固定数据
  714. *
  715. * @param
  716. * @return
  717. *//*
  718. public List<TaskDO> getTasks(String patientId){
  719. List<TaskDO> taskDOList = new ArrayList<>();
  720. TaskDO taskDO = new TaskDO();
  721. *//*taskDO.setPatientId(patientId);*//*
  722. taskDO.setTaskCode("BIND");
  723. taskDO.setPeriod(1);
  724. taskDO.setTaskTitle("首次绑定");
  725. taskDO.setTaskContent("(绑定社区登记发放的设备,可获得各类型设备的首绑奖励。)");
  726. taskDO.setTradeType("activity");
  727. taskDO.setTransactionId("402885e96324a409016324c0a45a0006");
  728. taskDO.setCreateTime(new Date());
  729. taskDO.setUpdateTime(new Date());
  730. taskDOList.add(taskDO);
  731. TaskDO taskDO1 = new TaskDO();
  732. *//*taskDO1.setPatientId(patientId);*//*
  733. taskDO1.setTaskCode("MEASURE");
  734. taskDO1.setPeriod(0);
  735. taskDO1.setTaskTitle("每日测量");
  736. taskDO1.setTaskContent("(使用社区发放的已关联您身份信息的设备,绑定后每天完成测量)");
  737. taskDO1.setTradeType("activity");
  738. taskDO1.setTransactionId("402885e96324a409016324c0a45a0006");
  739. taskDO1.setCreateTime(new Date());
  740. taskDO1.setUpdateTime(new Date());
  741. taskDOList.add(taskDO1);
  742. return taskDOList;
  743. }
  744. */
  745. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> stepAddIntegrate(CreditsDetailDO creditsDetailDO){
  746. try {
  747. synchronized (creditsDetailDO.getPatientId()){
  748. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '"+creditsDetailDO.getPatientId() +"'";
  749. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  750. if (accountDOList != null && accountDOList.size() != 0){
  751. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  752. }else {
  753. AccountDO accountDO1 = new AccountDO();
  754. accountDO1.setPatientId(creditsDetailDO.getPatientId());
  755. accountDO1.setSaasId("dev");
  756. accountDO1.setTotal(0);
  757. accountDO1.setCouponTotal(0L);
  758. accountDO1.setAccountName(creditsDetailDO.getName());
  759. if(creditsDetailDO.getIdCard().length()>=4){// 判断是否长度大于等于4
  760. String cardNumber=creditsDetailDO.getIdCard().substring(creditsDetailDO.getIdCard().length()- 4,creditsDetailDO.getIdCard().length());//截取两个数字之间的部分
  761. int random = (int)((Math.random()*9+1)*100000);
  762. accountDO1.setCardNumber(cardNumber+Integer.toString(random));
  763. }
  764. accountDO1.setHospital(creditsDetailDO.getHospital());
  765. accountDO1.setPassword("123456");
  766. accountDO1.setHospitalName(creditsDetailDO.getHospitalName());
  767. accountDO1.setStatus(1);
  768. accountDO1.setCreateTime(new Date());
  769. accountDO1.setUpdateTime(new Date());
  770. accountDao.save(accountDO1);
  771. List<AccountDO> accountDOS = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class));
  772. creditsDetailDO.setAccountId(accountDOS.get(0).getId());
  773. }
  774. String sql1 = "select * from wlyy_health_bank_task_patient_detail where "+
  775. " patient_idcard = '"+creditsDetailDO.getIdCard()+"' AND union_id = '"+creditsDetailDO.getUnionId()+"' AND task_id = '"+creditsDetailDO.getTransactionId()+"'";
  776. List<TaskPatientDetailDO> taskPatientDetailDOList = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  777. if(taskPatientDetailDOList == null || taskPatientDetailDOList.size()==0){
  778. throw new Exception("该居民参与活动查不到!");
  779. }
  780. TaskPatientDetailDO taskPatientDetailDO = taskPatientDetailDOList.get(0);
  781. String sql = "select * from wlyy_health_bank_credits_detail where patient_id = '"+creditsDetailDO.getPatientId()+"' AND " +
  782. "transaction_id = '"+creditsDetailDO.getTransactionId()+"' AND create_time > '"+DateUtils.getDayBegin() +"' AND" +
  783. " create_time < '"+DateUtils.getDayEnd()+"'AND ISNULL(description)";
  784. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(CreditsDetailDO.class));
  785. int integrate1=0;
  786. for (CreditsDetailDO detailDO:creditsDetailDOS){
  787. integrate1+= detailDO.getIntegrate();
  788. }
  789. ActivityRuleDO activityRuleDO = activityRuleDao.selectByActivityId(taskPatientDetailDO.getActivityId());
  790. logger.info("开始"+activityRuleDO.getValue1());
  791. logger.info("参数:"+creditsDetailDO.getIntegrate()+creditsDetailDO.getStepNumber());
  792. if (activityRuleDO.getValue1() != null){
  793. JSONObject object = JSONObject.parseObject(activityRuleDO.getValue1());
  794. //获取步数
  795. JSONArray array = object.getJSONArray("healthStep");
  796. int j = array.size();
  797. int z= 0;
  798. for (int i = 0;i<=array.size();i++){
  799. JSONObject jsonObject = array.getJSONObject(i);
  800. Long step = jsonObject.getLong("step");
  801. int integrate = jsonObject.getInteger("integrate");
  802. if (creditsDetailDOS != null && creditsDetailDOS.size() != 0){
  803. CreditsDetailDO creditsDetailDO1 = creditsDetailDOS.get(0);
  804. if (creditsDetailDO.getStepNumber()>0 && creditsDetailDO.getStepNumber()<=step){
  805. creditsDetailDO.setIntegrate(creditsDetailDO.getIntegrate());
  806. creditsDetailDO.setTradeDirection(1);
  807. creditsDetailDO.setUpdateTime(new Date());
  808. creditsDetailDO.setCreateTime(new Date());
  809. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  810. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO);
  811. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  812. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO2.getIntegrate());
  813. AccountDO accountDO1 = accountDao.save(accountDO);
  814. creditsDetailDO2.setTotal(accountDO1.getTotal());
  815. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+creditsDetailDO2.getIntegrate());
  816. taskPatientDetailDao.save(taskPatientDetailDO);
  817. creditsDetailDOS.clear();
  818. creditsDetailDOS.add(creditsDetailDO2);
  819. break;
  820. }
  821. }else {
  822. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  823. if (creditsDetailDO.getStepNumber()>0 && creditsDetailDO.getStepNumber()<=step){
  824. creditsDetailDO1.setIntegrate(creditsDetailDO.getIntegrate());
  825. creditsDetailDO1.setTradeDirection(1);
  826. creditsDetailDO1.setSaasId("dev");
  827. creditsDetailDO1.setTradeType("ACTIVITY_TASK");
  828. creditsDetailDO1.setPatientId(creditsDetailDO.getPatientId());
  829. creditsDetailDO1.setHospital(creditsDetailDO.getHospital());
  830. creditsDetailDO1.setHospitalName(creditsDetailDO.getHospitalName());
  831. creditsDetailDO1.setAccountId(creditsDetailDO.getAccountId());
  832. creditsDetailDO1.setStatus(1);
  833. creditsDetailDO1.setCreateTime(new Date());
  834. creditsDetailDO1.setUpdateTime(new Date());
  835. creditsDetailDO1.setTransactionId(taskPatientDetailDO.getTaskId());
  836. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  837. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  838. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO2.getIntegrate());
  839. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+creditsDetailDO2.getIntegrate());
  840. taskPatientDetailDao.save(taskPatientDetailDO);
  841. accountDao.save(accountDO);
  842. creditsDetailDO2.setTotal(accountDO.getTotal());
  843. creditsDetailDOS.add(creditsDetailDO2);
  844. break;
  845. }
  846. }
  847. }
  848. }
  849. /* for (int i = 0;i<array.size();i++){
  850. JSONObject jsonObject = array.getJSONObject(i);
  851. if (creditsDetailDOS != null && creditsDetailDOS.size() != 0){
  852. CreditsDetailDO creditsDetailDO1 = creditsDetailDOS.get(0);
  853. TaskRuleDO taskRuleDO = taskRuleDao.findOne(taskDO.getRuleCode());
  854. if (creditsDetailDO.getStepNumber() < step1 && creditsDetailDO.getStepNumber() >0){
  855. creditsDetailDO1.setIntegrate(0);
  856. creditsDetailDO1.setTradeDirection(1);
  857. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  858. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  859. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO2.getIntegrate());
  860. AccountDO accountDO1 = accountDao.save(accountDO);
  861. creditsDetailDO2.setTotal(accountDO1.getTotal());
  862. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+creditsDetailDO2.getIntegrate());
  863. taskPatientDetailDao.save(taskPatientDetailDO);
  864. creditsDetailDOS.clear();
  865. creditsDetailDOS.add(creditsDetailDO2);
  866. }else if (creditsDetailDO.getStepNumber() >= step1 && creditsDetailDO.getStepNumber() < step2){
  867. creditsDetailDO1.setIntegrate(creditsDetailDO1.getIntegrate()+1);
  868. creditsDetailDO1.setTradeDirection(1);
  869. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  870. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  871. accountDO.setTotal(accountDO.getTotal()+(creditsDetailDO2.getIntegrate()));
  872. AccountDO accountDO1 = accountDao.save(accountDO);
  873. creditsDetailDO2.setTotal(accountDO1.getTotal());
  874. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+(creditsDetailDO2.getIntegrate()));
  875. taskPatientDetailDao.save(taskPatientDetailDO);
  876. creditsDetailDOS.clear();
  877. creditsDetailDOS.add(creditsDetailDO2);
  878. }else if (creditsDetailDO.getStepNumber() >= step2){
  879. if (creditsDetailDO1.getIntegrate() == 1){
  880. creditsDetailDO1.setIntegrate(2);
  881. creditsDetailDO1.setTradeDirection(1);
  882. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  883. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  884. accountDO.setTotal(accountDO.getTotal()+(creditsDetailDO2.getIntegrate()-1));
  885. AccountDO accountDO1 = accountDao.save(accountDO);
  886. creditsDetailDO2.setTotal(accountDO1.getTotal());
  887. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+(creditsDetailDO2.getIntegrate()-1));
  888. taskPatientDetailDao.save(taskPatientDetailDO);
  889. creditsDetailDOS.clear();
  890. creditsDetailDOS.add(creditsDetailDO2);
  891. }*//*else if(creditsDetailDO1.getIntegrate() == 3){
  892. creditsDetailDO1.setIntegrate(creditsDetailDO1.getIntegrate()+5);
  893. creditsDetailDO1.setTradeDirection(1);
  894. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  895. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  896. accountDO.setTotal(accountDO.getTotal()+(creditsDetailDO2.getIntegrate()-3));
  897. AccountDO accountDO1 = accountDao.save(accountDO);
  898. creditsDetailDO2.setTotal(accountDO1.getTotal());
  899. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+(creditsDetailDO2.getIntegrate()-3));
  900. taskPatientDetailDao.save(taskPatientDetailDO);
  901. creditsDetailDOS.clear();
  902. creditsDetailDOS.add(creditsDetailDO2);
  903. }*//*
  904. }
  905. }else{
  906. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  907. if (creditsDetailDO.getStepNumber() < step1 && creditsDetailDO.getStepNumber() >0){
  908. creditsDetailDO1.setIntegrate(0);
  909. creditsDetailDO1.setTradeDirection(1);
  910. }else if (creditsDetailDO.getStepNumber() >= step1 && creditsDetailDO.getStepNumber() < step2){
  911. creditsDetailDO1.setIntegrate(1);
  912. creditsDetailDO1.setTradeDirection(1);
  913. }else if (creditsDetailDO.getStepNumber() >=step2){
  914. creditsDetailDO1.setIntegrate(2);
  915. creditsDetailDO1.setTradeDirection(1);
  916. }
  917. creditsDetailDO1.setSaasId("dev");
  918. creditsDetailDO1.setTradeType("ACTIVITY_TASK");
  919. creditsDetailDO1.setPatientId(creditsDetailDO.getPatientId());
  920. creditsDetailDO1.setHospital(creditsDetailDO.getHospital());
  921. creditsDetailDO1.setHospitalName(creditsDetailDO.getHospitalName());
  922. creditsDetailDO1.setAccountId(creditsDetailDO.getAccountId());
  923. creditsDetailDO1.setStatus(1);
  924. creditsDetailDO1.setCreateTime(new Date());
  925. creditsDetailDO1.setUpdateTime(new Date());
  926. creditsDetailDO1.setTransactionId(taskPatientDetailDO.getTaskId());
  927. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  928. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  929. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO2.getIntegrate());
  930. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+creditsDetailDO2.getIntegrate());
  931. taskPatientDetailDao.save(taskPatientDetailDO);
  932. creditsDetailDO2.setTotal(accountDO.getTotal());
  933. creditsDetailDOS.add(creditsDetailDO2);
  934. }*/
  935. /* String step = redisTemplate.opsForValue().get(STEP);
  936. if (StringUtils.isEmpty(step)){
  937. throw new Exception("获取步数失败!");
  938. }
  939. JSONObject object = JSONObject.parseObject(step);
  940. int step1 = object.getInteger("step1");
  941. int step2 = object.getInteger("step2");
  942. */
  943. try{
  944. activeRecordService.insert("dev",creditsDetailDOS.get(0).getTransactionId(),null,null,null,creditsDetailDOS.get(0).getPatientId());
  945. }catch (Exception e){
  946. logger.error("插入活跃出错:"+e.getMessage());
  947. }
  948. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  949. envelop.setDetailModelList(creditsDetailDOS);
  950. return envelop;
  951. }
  952. }catch (Exception e){
  953. e.printStackTrace();
  954. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  955. return envelop;
  956. }
  957. }
  958. public MixEnvelop doctorDescreaseIntegrate(String ruleId,String patientId,String doctorId,String hospital,String hospitalName,Integer integrate,String reason,String type,String name,String idcard) throws Exception {
  959. MixEnvelop envelop = new MixEnvelop<>();
  960. envelop.setObj(true);
  961. TaskDO taskDO = taskDao.selectByTaskRuleId(ruleId);
  962. String sql = "select * from wlyy_health_bank_account where status = 1 and patient_id = '"+patientId+"'";
  963. List<AccountDO> accountDOs = jdbcTemplate.query(sql,new BeanPropertyRowMapper(AccountDO.class));
  964. AccountDO accountDO = null;
  965. if("add".equals(type)&&(accountDOs==null||accountDOs.size()==0)){
  966. //新建账户
  967. accountDO = new AccountDO();
  968. accountDO.setTotal(0);
  969. accountDO.setId(getCode());
  970. accountDO.setPatientId(patientId);
  971. accountDO.setAccountName(name);
  972. accountDO.setHospital(hospital);
  973. accountDO.setHospitalName(hospitalName);
  974. if(idcard.length()>=4){// 判断是否长度大于等于4
  975. String cardNumber=idcard.substring(idcard.length()- 4,idcard.length());//截取两个数字之间的部分
  976. int random = (int)((Math.random()*9+1)*100000);
  977. accountDO.setCardNumber(cardNumber+Integer.toString(random));
  978. }
  979. accountDO.setPassword("123456");
  980. accountDO.setSaasId("dev");
  981. accountDO.setStatus(1);
  982. accountDO.setCreateTime(new Date());
  983. accountDO.setUpdateTime(new Date());
  984. accountDO = accountDao.save(accountDO);
  985. }else{
  986. accountDO = accountDOs.get(0);
  987. }
  988. if (taskDO == null){
  989. TaskRuleDO taskRuleDO = taskRuleDao.findByCode(ruleId);
  990. TaskDO taskDO1 = new TaskDO();
  991. taskDO1.setTitle(taskRuleDO.getName());
  992. taskDO1.setContent(taskRuleDO.getDescription());
  993. taskDO1.setSaasId("dev");
  994. taskDO1.setTaskCode("RULE");
  995. taskDO1.setType("RULE_TASK");
  996. taskDO1.setTransactionId(ruleId);
  997. taskDO1.setCreateTime(new Date());
  998. taskDO1.setUpdateTime(new Date());
  999. taskDO1.setRuleCode(taskRuleDO.getId());
  1000. taskDO1.setStatus(1);
  1001. taskDO = taskDao.save(taskDO1);
  1002. }
  1003. TaskPatientDetailDO patientDetailDO = taskPatientDetailDao.selectByTaskIdAndPatientId(taskDO.getId(),patientId);
  1004. if (patientDetailDO == null){
  1005. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  1006. taskPatientDetailDO.setSaasId("dev");
  1007. taskPatientDetailDO.setTaskId(taskDO.getId());
  1008. taskPatientDetailDO.setPatientId(patientId);
  1009. taskPatientDetailDO.setDoctorId(doctorId);
  1010. taskPatientDetailDO.setPatientIdcard(accountDO.getIdCard());
  1011. taskPatientDetailDO.setCreateTime(new Date());
  1012. taskPatientDetailDO.setUpdateTime(new Date());
  1013. taskPatientDetailDO.setStatus(1);
  1014. taskPatientDetailDao.save(taskPatientDetailDO);
  1015. }
  1016. if("add".equals(type)){
  1017. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  1018. creditsDetailDO.setAccountId(accountDO.getId());
  1019. creditsDetailDO.setIdCard(accountDO.getIdCard());
  1020. creditsDetailDO.setSaasId("dev");
  1021. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1022. creditsDetailDO.setTradeDirection(1);
  1023. creditsDetailDO.setIntegrate(integrate);
  1024. creditsDetailDO.setDescription(reason);
  1025. creditsDetailDO.setStatus(1);
  1026. creditsDetailDO.setHospital(hospital);
  1027. creditsDetailDO.setHospitalName(hospitalName);
  1028. creditsDetailDO.setCreateTime(new Date());
  1029. creditsDetailDO.setUpdateTime(new Date());
  1030. creditsDetailDO.setTransactionId(taskDO.getId());
  1031. creditsDetailDO.setPatientId(patientId);
  1032. creditsDetailDO.setHospitalName(hospitalName);
  1033. credittsLogDetailDao.save(creditsDetailDO);
  1034. accountDO.setTotal(accountDO.getTotal()+integrate);
  1035. accountDao.save(accountDO);
  1036. }else{
  1037. if (accountDO.getTotal().compareTo(integrate)>=0){
  1038. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  1039. creditsDetailDO.setAccountId(accountDO.getId());
  1040. creditsDetailDO.setIdCard(accountDO.getIdCard());
  1041. creditsDetailDO.setSaasId("dev");
  1042. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1043. creditsDetailDO.setTradeDirection(-1);
  1044. creditsDetailDO.setIntegrate(integrate);
  1045. creditsDetailDO.setDescription(reason);
  1046. creditsDetailDO.setStatus(1);
  1047. creditsDetailDO.setHospital(hospital);
  1048. creditsDetailDO.setHospitalName(hospitalName);
  1049. creditsDetailDO.setCreateTime(new Date());
  1050. creditsDetailDO.setUpdateTime(new Date());
  1051. creditsDetailDO.setTransactionId(taskDO.getId());
  1052. creditsDetailDO.setPatientId(patientId);
  1053. creditsDetailDO.setHospitalName(hospitalName);
  1054. credittsLogDetailDao.save(creditsDetailDO);
  1055. accountDO.setTotal(accountDO.getTotal()-integrate);
  1056. accountDao.save(accountDO);
  1057. }else {
  1058. envelop.setMessage("积分不足!");
  1059. throw new Exception("积分不足!");
  1060. }
  1061. }
  1062. return envelop;
  1063. }
  1064. /*public JSONObject getStepNumber(){
  1065. String step = redisTemplate.·().get(STEP);
  1066. logger.info("redis数据:"+step);
  1067. String sql = ""
  1068. String step1 = systemDictDao.
  1069. logger.info("数据库的数据:"+step1);
  1070. if (step != null && step.equalsIgnoreCase(step1)){
  1071. JSONObject jsonObject = JSONObject.parseObject(step);
  1072. logger.info("数据不一致:"+jsonObject.toString());
  1073. return jsonObject;
  1074. }else {
  1075. JSONObject jsonObject = JSONObject.parseObject(step);
  1076. redisTemplate.opsForValue().set(STEP,step1);
  1077. logger.info("数据一致:"+jsonObject.toString());
  1078. return jsonObject;
  1079. }
  1080. }*/
  1081. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> weekReward(CreditsDetailDO creditsDetailDO) {
  1082. try {
  1083. synchronized (creditsDetailDO.getPatientId()) {
  1084. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '" + creditsDetailDO.getPatientId() + "'";
  1085. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount, new BeanPropertyRowMapper(AccountDO.class));
  1086. if (accountDOList != null && accountDOList.size() != 0) {
  1087. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  1088. }
  1089. String creditsSql = "select * from wlyy_health_bank_credits_detail where patient_id = '" + creditsDetailDO.getPatientId() + "' and " +
  1090. "DATE_FORMAT(create_time,'%Y-%m-%d') IN " + creditsDetailDO.getWeekTimes()+" and description = '周奖励'";
  1091. List<CreditsDetailDO> creditsDetailDOS1 = jdbcTemplate.query(creditsSql, new BeanPropertyRowMapper(CreditsDetailDO.class));
  1092. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  1093. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  1094. if (getWeekOfDate(new Date()).equalsIgnoreCase("星期五")||getWeekOfDate(new Date()).equalsIgnoreCase("星期六")||getWeekOfDate(new Date()).equalsIgnoreCase("星期日")){
  1095. String sql = "select sum(integrate) as total from wlyy_health_bank_credits_detail where patient_id = '" + creditsDetailDO.getPatientId() + "' and description = '周奖励'";
  1096. List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sql);
  1097. Long count = 0L;
  1098. if(rstotal!=null&&rstotal.size()>0){
  1099. Object object = rstotal.get(0).get("total");
  1100. if (object != null){
  1101. count = Long.parseLong(object.toString());
  1102. }
  1103. }
  1104. if (count > 12){
  1105. envelop.setMessage("奖励积分已达到12分。不能再奖励了!");
  1106. return envelop;
  1107. }else{
  1108. if (creditsDetailDOS1 == null || creditsDetailDOS1.size() == 0) {
  1109. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1110. creditsDetailDO.setSaasId("dev");
  1111. creditsDetailDO.setStatus(1);
  1112. creditsDetailDO.setTransactionId(creditsDetailDO.getTransactionId());
  1113. creditsDetailDO.setCreateTime(new Date());
  1114. creditsDetailDO.setUpdateTime(new Date());
  1115. creditsDetailDO.setTradeDirection(1);
  1116. CreditsDetailDO creditsDetailDO1 = credittsLogDetailDao.save(creditsDetailDO);
  1117. creditsDetailDOList.add(creditsDetailDO1);
  1118. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  1119. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  1120. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  1121. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  1122. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1, new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  1123. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  1124. if (creditsDetailDO1.getTradeDirection() == 1) {
  1125. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() + creditsDetailDO1.getIntegrate());
  1126. } else if (creditsDetailDO.getTradeDirection() == -1) {
  1127. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() - creditsDetailDO1.getIntegrate());
  1128. }
  1129. taskPatientDetailDao.save(taskPatientDetailDO1);
  1130. AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId());
  1131. if (creditsDetailDO1.getTradeDirection() == 1) {
  1132. accountDO.setTotal(accountDO.getTotal() + creditsDetailDO1.getIntegrate());
  1133. } else if (creditsDetailDO.getTradeDirection() == -1) {
  1134. accountDO.setTotal(accountDO.getTotal() - creditsDetailDO1.getIntegrate());
  1135. }
  1136. AccountDO accountDO1 = accountDao.save(accountDO);
  1137. List<CreditsDetailDO> creditsDetailDOS = new ArrayList<>();
  1138. for (CreditsDetailDO creditsDetailDO2 : creditsDetailDOList) {
  1139. creditsDetailDO2.setTotal(accountDO1.getTotal());
  1140. creditsDetailDO2.setFlag("1");
  1141. creditsDetailDOS.add(creditsDetailDO2);
  1142. }
  1143. envelop.setDetailModelList(creditsDetailDOS);
  1144. }else {
  1145. for (CreditsDetailDO creditsDetailDO1 : creditsDetailDOS1){
  1146. creditsDetailDO1.setFlag("2");
  1147. }
  1148. envelop.setDetailModelList(creditsDetailDOS1);
  1149. }
  1150. return envelop;
  1151. }
  1152. }else{
  1153. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  1154. creditsDetailDO1.setFlag("0");
  1155. creditsDetailDOList.add(creditsDetailDO1);
  1156. envelop.setDetailModelList(creditsDetailDOList);
  1157. return envelop;
  1158. }
  1159. }
  1160. } catch (Exception e) {
  1161. e.printStackTrace();
  1162. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  1163. return envelop;
  1164. }
  1165. }
  1166. public String getWeekOfDate(Date dt) {
  1167. String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
  1168. Calendar cal = Calendar.getInstance();
  1169. cal.setTime(dt);
  1170. int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
  1171. if (w < 0)
  1172. w = 0;
  1173. return weekDays[w];
  1174. }
  1175. /**
  1176. * 健康问答添加积分
  1177. *
  1178. * @param creditsDetailDO
  1179. * @return
  1180. * @throws Exception
  1181. */
  1182. public MixEnvelop<CreditsDetailDO,CreditsDetailDO> patientGetInteger(CreditsDetailDO creditsDetailDO) throws Exception {
  1183. MixEnvelop<CreditsDetailDO,CreditsDetailDO> envelop = new MixEnvelop<>();
  1184. TaskDO taskDO = taskDao.selectById(creditsDetailDO.getTransactionId());
  1185. ActivityRuleDO ruleDO = activityRuleDao.selectByActivityId(taskDO.getTransactionId());
  1186. JSONObject object = JSONObject.parseObject(ruleDO.getValue1());
  1187. Integer type = object.getInteger("type");
  1188. AccountDO accountDO = accountDao.selectByPatientId(creditsDetailDO.getPatientId());
  1189. creditsDetailDO.setUpdateTime(new Date());
  1190. creditsDetailDO.setCreateTime(new Date());
  1191. creditsDetailDO.setStatus(1);
  1192. if (type == 2){
  1193. creditsDetailDO.setCoupon(creditsDetailDO.getCoupon());
  1194. creditsDetailDO.setIntegrate(null);
  1195. }else if (type==1){
  1196. creditsDetailDO.setIntegrate(creditsDetailDO.getCoupon());
  1197. creditsDetailDO.setCoupon(null);
  1198. }
  1199. creditsDetailDO.setSaasId("dev");
  1200. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1201. creditsDetailDO.setTradeDirection(1);
  1202. creditsDetailDO.setAccountId(accountDO.getId());
  1203. CreditsDetailDO creditsDetailDO1 = credittsLogDetailDao.save(creditsDetailDO);
  1204. if (creditsDetailDO1 == null){
  1205. throw new Exception("积分添加失败!");
  1206. }
  1207. TaskPatientDetailDO patientDetailDO = taskPatientDetailDao.selectByTaskIdAndPatientId(creditsDetailDO.getTransactionId(),creditsDetailDO.getPatientId());
  1208. patientDetailDO.setUpdateTime(new Date());
  1209. patientDetailDO.setCreateTime(new Date());
  1210. if (type == 2){
  1211. patientDetailDO.setCouponTotal(patientDetailDO.getCouponTotal()+creditsDetailDO.getCoupon());
  1212. }else if (type==1||type==3){
  1213. patientDetailDO.setTotal(patientDetailDO.getTotal()+creditsDetailDO.getIntegrate());
  1214. }
  1215. patientDetailDO.setStatus(1);
  1216. TaskPatientDetailDO taskPatientDetailDO = taskPatientDetailDao.save(patientDetailDO);
  1217. if (taskPatientDetailDO == null){
  1218. throw new Exception("修改活动状态和积分失败!");
  1219. }
  1220. if (type == 2){
  1221. accountDO.setCouponTotal(accountDO.getCouponTotal()+creditsDetailDO.getCoupon());
  1222. }else if (type==1||type==3){
  1223. accountDO.setTotal(accountDO.getTotal()+creditsDetailDO.getIntegrate());
  1224. }
  1225. accountDO.setUpdateTime(new Date());
  1226. AccountDO accountDO1 = accountDao.save(accountDO);
  1227. if (accountDO1 == null){
  1228. throw new Exception("修改银行账户积分失败!");
  1229. }
  1230. envelop.setObj(creditsDetailDO);
  1231. return envelop;
  1232. }
  1233. /**
  1234. * 健康问答--获取当日积分
  1235. *
  1236. * @param patient
  1237. * @param transactionId
  1238. * @return
  1239. */
  1240. public MixEnvelop<CreditsDetailDO,CreditsDetailDO> selectByDate(String patient,String transactionId){
  1241. MixEnvelop<CreditsDetailDO,CreditsDetailDO> envelop = new MixEnvelop<>();
  1242. String sql ="select * from wlyy_health_bank_credits_detail where patient_id = '"+patient+"' and " +
  1243. "transaction_id = '"+transactionId+"' and create_time >='"+ DateUtils.getDayBegin()+"' and " +
  1244. "create_time <= '"+DateUtils.getDayEnd()+"'";
  1245. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(CreditsDetailDO.class));
  1246. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  1247. if (creditsDetailDOS != null && creditsDetailDOS.size()!=0){
  1248. creditsDetailDO = creditsDetailDOS.get(0);
  1249. }
  1250. TaskDO taskDO = taskDao.selectById(transactionId);
  1251. ActivityRuleDO ruleDO = activityRuleDao.selectByActivityId(taskDO.getTransactionId());
  1252. //活动总积分排名
  1253. String rankingSql1 = "SELECT count(1)+1 AS total FROM (SELECT " +
  1254. " SUM(total) AS sum , " +
  1255. " patient_id, " +
  1256. " activity_id " +
  1257. "FROM " +
  1258. " wlyy_health_bank_task_patient_detail btpd WHERE btpd.patient_id !='"+patient+"' " +
  1259. " AND btpd.activity_id = '"+taskDO.getTransactionId()+"' " +
  1260. "GROUP BY btpd.patient_id )btpd1 " +
  1261. "WHERE " +
  1262. " btpd1.sum >= (SELECT SUM(s.total) as total " +
  1263. "FROM wlyy_health_bank_task_patient_detail s WHERE s.patient_id ='"+patient+"' AND s.activity_id='"+taskDO.getTransactionId()+"')" ;
  1264. List<Map<String,Object>> rstotal1 = jdbcTemplate.queryForList(rankingSql1);
  1265. Long count = 0L;
  1266. if(rstotal1!=null&&rstotal1.size()>0){
  1267. count = (Long) rstotal1.get(0).get("total");
  1268. }
  1269. //总活动劵的排名
  1270. String rankingSql2 = "SELECT count(1)+1 AS total FROM (SELECT " +
  1271. " SUM(coupon_total) AS sum , " +
  1272. " patient_id, " +
  1273. " activity_id " +
  1274. "FROM " +
  1275. " wlyy_health_bank_task_patient_detail btpd WHERE btpd.patient_id !='"+patient+"' " +
  1276. " AND btpd.activity_id = '"+taskDO.getTransactionId()+"' "+
  1277. "GROUP BY btpd.patient_id )btpd1 " +
  1278. "WHERE " +
  1279. " btpd1.sum >= (SELECT SUM(s.coupon_total) as couponTotal " +
  1280. "FROM wlyy_health_bank_task_patient_detail s WHERE s.patient_id ='"+patient+"' AND s.activity_id='"+taskDO.getTransactionId()+"')" ;
  1281. List<Map<String,Object>> rstotal2 = jdbcTemplate.queryForList(rankingSql2);
  1282. Long count2 = 0L;
  1283. if(rstotal2!=null&&rstotal2.size()>0){
  1284. count2 = (Long) rstotal2.get(0).get("total");
  1285. }
  1286. JSONObject object = JSONObject.parseObject(ruleDO.getValue1());
  1287. Integer type = object.getInteger("type");
  1288. if (type == 2){
  1289. creditsDetailDO.setActivityRanking(count2);
  1290. creditsDetailDO.setMark(1);
  1291. }else if (type==1||type==3){
  1292. creditsDetailDO.setActivityRanking(count);
  1293. creditsDetailDO.setMark(2);
  1294. }
  1295. envelop.setObj(creditsDetailDO);
  1296. return envelop;
  1297. }
  1298. /**
  1299. * 分享获取积分
  1300. *
  1301. * @param creditsDetailDO
  1302. * @return
  1303. */
  1304. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> shareIntegrate(CreditsDetailDO creditsDetailDO) {
  1305. try {
  1306. synchronized (creditsDetailDO.getPatientId()) {
  1307. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '" + creditsDetailDO.getPatientId() + "'";
  1308. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount, new BeanPropertyRowMapper(AccountDO.class));
  1309. if (accountDOList != null && accountDOList.size() != 0) {
  1310. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  1311. }
  1312. String creditsSql = "select * from wlyy_health_bank_credits_detail where patient_id = '" + creditsDetailDO.getPatientId() + "' and description = '分享'";
  1313. List<CreditsDetailDO> creditsDetailDOS1 = jdbcTemplate.query(creditsSql, new BeanPropertyRowMapper(CreditsDetailDO.class));
  1314. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  1315. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  1316. if (creditsDetailDOS1 == null || creditsDetailDOS1.size() == 0) {
  1317. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1318. creditsDetailDO.setDescription("分享");
  1319. creditsDetailDO.setSaasId("dev");
  1320. creditsDetailDO.setStatus(1);
  1321. creditsDetailDO.setTransactionId(creditsDetailDO.getTransactionId());
  1322. creditsDetailDO.setCreateTime(new Date());
  1323. creditsDetailDO.setUpdateTime(new Date());
  1324. creditsDetailDO.setTradeDirection(1);
  1325. CreditsDetailDO creditsDetailDO1 = credittsLogDetailDao.save(creditsDetailDO);
  1326. creditsDetailDO1.setFlag("1");
  1327. creditsDetailDOList.add(creditsDetailDO1);
  1328. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  1329. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  1330. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  1331. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  1332. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1, new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  1333. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  1334. if (creditsDetailDO1.getTradeDirection() == 1) {
  1335. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() + creditsDetailDO1.getIntegrate());
  1336. } else if (creditsDetailDO.getTradeDirection() == -1) {
  1337. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() - creditsDetailDO1.getIntegrate());
  1338. }
  1339. taskPatientDetailDao.save(taskPatientDetailDO1);
  1340. AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId());
  1341. if (creditsDetailDO1.getTradeDirection() == 1) {
  1342. accountDO.setTotal(accountDO.getTotal() + creditsDetailDO1.getIntegrate());
  1343. } else if (creditsDetailDO.getTradeDirection() == -1) {
  1344. accountDO.setTotal(accountDO.getTotal() - creditsDetailDO1.getIntegrate());
  1345. }
  1346. accountDao.save(accountDO);
  1347. envelop.setDetailModelList(creditsDetailDOList);
  1348. }else {
  1349. for (CreditsDetailDO creditsDetailDO1:creditsDetailDOS1){
  1350. creditsDetailDO1.setFlag("2");
  1351. creditsDetailDOList.add(creditsDetailDO1);
  1352. }
  1353. envelop.setDetailModelList(creditsDetailDOList);
  1354. }
  1355. return envelop;
  1356. }
  1357. } catch (Exception e) {
  1358. e.printStackTrace();
  1359. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  1360. return envelop;
  1361. }
  1362. }
  1363. public List<CreditsDetailDO> share(CreditsDetailDO creditsDetailDO) throws Exception {
  1364. synchronized (creditsDetailDO.getPatientId()) {
  1365. String activityId= creditsDetailDO.getActivityId();
  1366. ActivityRuleDO activityRuleDO = activityRuleDao.selectByActivityId(activityId);
  1367. String sql = "select * from wlyy_health_bank_credits_detail where patient_id ='"+creditsDetailDO.getPatientId()+"' " +
  1368. "and description ='分享' and status =1 AND transaction_id = '"+creditsDetailDO.getTransactionId()+"'";
  1369. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(CreditsDetailDO.class));
  1370. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  1371. if (activityRuleDO != null){
  1372. JSONObject jsonObject = JSONObject.parseObject(activityRuleDO.getValue1());
  1373. Boolean isShare = jsonObject.getBoolean("isshare");
  1374. if (isShare){
  1375. JSONObject object = jsonObject.getJSONObject("shareData");
  1376. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '" + creditsDetailDO.getPatientId() + "'";
  1377. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount, new BeanPropertyRowMapper(AccountDO.class));
  1378. CreditsDetailDO creditsDetailDO1 = new CreditsDetailDO();
  1379. if (accountDOList != null && accountDOList.size() != 0) {
  1380. creditsDetailDO1.setAccountId(accountDOList.get(0).getId());
  1381. }
  1382. if (creditsDetailDOS!=null&&creditsDetailDOS.size()>=object.getInteger("frequency")){
  1383. throw new Exception("分享超过"+creditsDetailDOS.size()+"次");
  1384. }else {
  1385. creditsDetailDO1.setHospitalName(creditsDetailDO.getHospitalName());
  1386. creditsDetailDO1.setHospital(creditsDetailDO.getHospital());
  1387. creditsDetailDO1.setPatientId(creditsDetailDO.getPatientId());
  1388. creditsDetailDO1.setTradeType("ACTIVITY_TASK");
  1389. creditsDetailDO1.setDescription("分享");
  1390. creditsDetailDO1.setSaasId("dev");
  1391. creditsDetailDO1.setStatus(1);
  1392. creditsDetailDO1.setCoupon(0);
  1393. creditsDetailDO1.setTransactionId(creditsDetailDO.getTransactionId());
  1394. creditsDetailDO1.setCreateTime(new Date());
  1395. creditsDetailDO1.setUpdateTime(new Date());
  1396. creditsDetailDO1.setTradeDirection(1);
  1397. creditsDetailDO1.setIntegrate(object.getInteger("integrate"));
  1398. CreditsDetailDO creditsDetailDO2 = credittsLogDetailDao.save(creditsDetailDO1);
  1399. creditsDetailDOList.add(creditsDetailDO2);
  1400. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  1401. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  1402. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  1403. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  1404. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1, new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  1405. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  1406. if (creditsDetailDO1.getTradeDirection() == 1) {
  1407. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() + creditsDetailDO2.getIntegrate());
  1408. } else if (creditsDetailDO1.getTradeDirection() == -1) {
  1409. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() - creditsDetailDO2.getIntegrate());
  1410. }
  1411. taskPatientDetailDao.save(taskPatientDetailDO1);
  1412. AccountDO accountDO = accountDao.findOne(creditsDetailDO2.getAccountId());
  1413. if (creditsDetailDO1.getTradeDirection() == 1) {
  1414. accountDO.setTotal(accountDO.getTotal() + creditsDetailDO2.getIntegrate());
  1415. } else if (creditsDetailDO1.getTradeDirection() == -1) {
  1416. accountDO.setTotal(accountDO.getTotal() - creditsDetailDO2.getIntegrate());
  1417. }
  1418. accountDao.save(accountDO);
  1419. }
  1420. }
  1421. }
  1422. return creditsDetailDOList;
  1423. }
  1424. }
  1425. /**
  1426. * 商城积分支付
  1427. * @param patient
  1428. * @param total
  1429. * @param hospital
  1430. * @param hospitalName
  1431. * @param array
  1432. * @return
  1433. * @throws Exception
  1434. */
  1435. public MixEnvelop<CreditsDetailDO,CreditsDetailDO> payIntegrate(String patient,Double total,String hospital,String hospitalName,JSONArray array) throws Exception {
  1436. MixEnvelop<CreditsDetailDO,CreditsDetailDO> envelop = new MixEnvelop<>();
  1437. AccountDO accountDO = accountDao.selectByPatientId(patient);
  1438. Integer total1 = total.intValue();
  1439. if (accountDO == null){
  1440. envelop.setMessage("银行账户不存在!");
  1441. throw new Exception("银行账户不存在!");
  1442. }else {
  1443. if (total1>accountDO.getTotal()){
  1444. envelop.setMessage("积分余额不足!");
  1445. throw new Exception("积分余额不足!");
  1446. }else{
  1447. for (int i=0;i<array.size();i++){
  1448. JSONObject object = array.getJSONObject(i);
  1449. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  1450. creditsDetailDO.setPatientId(patient);
  1451. creditsDetailDO.setAccountId(accountDO.getId());
  1452. creditsDetailDO.setHospital(hospital);
  1453. creditsDetailDO.setTradeType("SHOPPING_PAY");
  1454. creditsDetailDO.setTradeDirection(-1);
  1455. creditsDetailDO.setTransactionId(object.getString("orderId"));
  1456. creditsDetailDO.setIntegrate(object.getDouble("integrate").intValue());
  1457. creditsDetailDO.setCreateTime(new Date());
  1458. creditsDetailDO.setUpdateTime(new Date());
  1459. creditsDetailDO.setHospitalName(hospitalName);
  1460. creditsDetailDO.setSaasId("dev");
  1461. creditsDetailDO.setId(getCode());
  1462. creditsDetailDO.setCoupon(0);
  1463. creditsDetailDO.setStatus(1);
  1464. credittsLogDetailDao.save(creditsDetailDO);
  1465. }
  1466. accountDO.setTotal(accountDO.getTotal()-total1);
  1467. accountDao.save(accountDO);
  1468. }
  1469. }
  1470. return envelop;
  1471. }
  1472. public MixEnvelop<CreditsDetailDO,CreditsDetailDO> refundIntegrate(JSONArray array) throws Exception {
  1473. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  1474. for (int i=0;i<array.size();i++){
  1475. JSONObject object = array.getJSONObject(i);
  1476. CreditsDetailDO creditsDetailDO1 = credittsLogDetailDao.selectByTransactionId(object.getString("orderId"),"SHOPPING_PAY");
  1477. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  1478. creditsDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  1479. creditsDetailDO.setAccountId(creditsDetailDO1.getAccountId());
  1480. creditsDetailDO.setHospital(creditsDetailDO1.getHospital());
  1481. creditsDetailDO.setTradeType("REFUND");
  1482. creditsDetailDO.setTradeDirection(1);
  1483. creditsDetailDO.setTransactionId(object.getString("orderId"));
  1484. creditsDetailDO.setIntegrate(object.getDouble("integrate").intValue());
  1485. creditsDetailDO.setCreateTime(new Date());
  1486. creditsDetailDO.setUpdateTime(new Date());
  1487. creditsDetailDO.setHospitalName(creditsDetailDO1.getHospitalName());
  1488. creditsDetailDO.setSaasId("dev");
  1489. creditsDetailDO.setId(getCode());
  1490. creditsDetailDO.setCoupon(0);
  1491. creditsDetailDO.setStatus(1);
  1492. credittsLogDetailDao.save(creditsDetailDO);
  1493. AccountDO accountDO = accountDao.selectByPatientId(creditsDetailDO1.getPatientId());
  1494. accountDO.setTotal(accountDO.getTotal()+object.getDouble("integrate").intValue());
  1495. accountDao.save(accountDO);
  1496. }
  1497. return envelop;
  1498. }
  1499. /**
  1500. *
  1501. * @param creditsDetailDO
  1502. * @param flag 1连续2间断
  1503. * @return
  1504. */
  1505. public MixEnvelop<CreditsDetailDO, CreditsDetailDO> weekRewardAndIntegrate(CreditsDetailDO creditsDetailDO,Integer flag) {
  1506. synchronized (creditsDetailDO.getPatientId()) {
  1507. MixEnvelop<CreditsDetailDO, CreditsDetailDO> envelop = new MixEnvelop<>();
  1508. String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '" + creditsDetailDO.getPatientId() + "'";
  1509. List<AccountDO> accountDOList = jdbcTemplate.query(sqlAccount, new BeanPropertyRowMapper(AccountDO.class));
  1510. if (accountDOList != null && accountDOList.size() != 0) {
  1511. creditsDetailDO.setAccountId(accountDOList.get(0).getId());
  1512. }
  1513. if (flag == 1) {
  1514. String creditsSql = "select * from wlyy_health_bank_credits_detail where patient_id = '" + creditsDetailDO.getPatientId() + "' and " +
  1515. "update_time >= '" + creditsDetailDO.getMonday() + "' AND update_time<='" + creditsDetailDO.getSunday() + "' and description = '周奖励-连续' AND transaction_id = '"+creditsDetailDO.getTransactionId()+"'";
  1516. List<CreditsDetailDO> creditsDetailDOS1 = jdbcTemplate.query(creditsSql, new BeanPropertyRowMapper(CreditsDetailDO.class));
  1517. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  1518. if (creditsDetailDOS1 == null || creditsDetailDOS1.size() == 0) {
  1519. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1520. creditsDetailDO.setSaasId("dev");
  1521. creditsDetailDO.setStatus(1);
  1522. creditsDetailDO.setTransactionId(creditsDetailDO.getTransactionId());
  1523. creditsDetailDO.setCreateTime(new Date());
  1524. creditsDetailDO.setUpdateTime(DateUtil.strToDateLong(creditsDetailDO.getSunday()));
  1525. creditsDetailDO.setTradeDirection(1);
  1526. creditsDetailDO.setDescription("周奖励-连续");
  1527. creditsDetailDO.setCoupon(0);
  1528. CreditsDetailDO creditsDetailDO1 = credittsLogDetailDao.save(creditsDetailDO);
  1529. creditsDetailDOList.add(creditsDetailDO1);
  1530. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  1531. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  1532. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  1533. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  1534. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1, new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  1535. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  1536. if (creditsDetailDO1.getTradeDirection() == 1) {
  1537. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() + creditsDetailDO1.getIntegrate());
  1538. } else if (creditsDetailDO1.getTradeDirection() == -1) {
  1539. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() - creditsDetailDO1.getIntegrate());
  1540. }
  1541. taskPatientDetailDao.save(taskPatientDetailDO1);
  1542. AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId());
  1543. if (creditsDetailDO1.getTradeDirection() == 1) {
  1544. accountDO.setTotal(accountDO.getTotal() + creditsDetailDO1.getIntegrate());
  1545. } else if (creditsDetailDO1.getTradeDirection() == -1) {
  1546. accountDO.setTotal(accountDO.getTotal() - creditsDetailDO1.getIntegrate());
  1547. }
  1548. AccountDO accountDO1 = accountDao.save(accountDO);
  1549. List<CreditsDetailDO> creditsDetailDOS = new ArrayList<>();
  1550. for (CreditsDetailDO creditsDetailDO2 : creditsDetailDOList) {
  1551. creditsDetailDO2.setTotal(accountDO1.getTotal());
  1552. creditsDetailDO2.setFlag("1");
  1553. creditsDetailDOS.add(creditsDetailDO2);
  1554. }
  1555. envelop.setDetailModelList(creditsDetailDOS);
  1556. return envelop;
  1557. }else {
  1558. logger.info("居民:"+creditsDetailDO.getPatientId()+"已领取周奖励-连续");
  1559. }
  1560. }else if (flag==2){
  1561. String creditsSql = "select * from wlyy_health_bank_credits_detail where patient_id = '" + creditsDetailDO.getPatientId() + "' and " +
  1562. "update_time >= '" +creditsDetailDO.getMonday()+"' AND update_time<='" +creditsDetailDO.getSunday() + "' and description = '周奖励-间断' AND transaction_id = '"+creditsDetailDO.getTransactionId()+"'";
  1563. List<CreditsDetailDO> creditsDetailDOS1 = jdbcTemplate.query(creditsSql, new BeanPropertyRowMapper(CreditsDetailDO.class));
  1564. List<CreditsDetailDO> creditsDetailDOList = new ArrayList<>();
  1565. if (creditsDetailDOS1 == null || creditsDetailDOS1.size() == 0) {
  1566. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1567. creditsDetailDO.setSaasId("dev");
  1568. creditsDetailDO.setStatus(1);
  1569. creditsDetailDO.setTransactionId(creditsDetailDO.getTransactionId());
  1570. creditsDetailDO.setCreateTime(new Date());
  1571. creditsDetailDO.setUpdateTime(DateUtil.strToDateLong(creditsDetailDO.getSunday()));
  1572. creditsDetailDO.setTradeDirection(1);
  1573. creditsDetailDO.setDescription("周奖励-间断");
  1574. CreditsDetailDO creditsDetailDO1 = credittsLogDetailDao.save(creditsDetailDO);
  1575. creditsDetailDOList.add(creditsDetailDO1);
  1576. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  1577. taskPatientDetailDO.setPatientId(creditsDetailDO1.getPatientId());
  1578. taskPatientDetailDO.setTaskId(creditsDetailDO1.getTransactionId());
  1579. String taskSql1 = ISqlUtils.getAllSql(taskPatientDetailDO);
  1580. List<TaskPatientDetailDO> taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1, new BeanPropertyRowMapper(TaskPatientDetailDO.class));
  1581. TaskPatientDetailDO taskPatientDetailDO1 = taskPatientDetailDOS1.get(0);
  1582. if (creditsDetailDO1.getTradeDirection() == 1) {
  1583. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() + creditsDetailDO1.getIntegrate());
  1584. } else if (creditsDetailDO.getTradeDirection() == -1) {
  1585. taskPatientDetailDO1.setTotal(taskPatientDetailDO1.getTotal() - creditsDetailDO1.getIntegrate());
  1586. }
  1587. taskPatientDetailDao.save(taskPatientDetailDO1);
  1588. AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId());
  1589. if (creditsDetailDO1.getTradeDirection() == 1) {
  1590. accountDO.setTotal(accountDO.getTotal() + creditsDetailDO1.getIntegrate());
  1591. } else if (creditsDetailDO.getTradeDirection() == -1) {
  1592. accountDO.setTotal(accountDO.getTotal() - creditsDetailDO1.getIntegrate());
  1593. }
  1594. AccountDO accountDO1 = accountDao.save(accountDO);
  1595. List<CreditsDetailDO> creditsDetailDOS = new ArrayList<>();
  1596. for (CreditsDetailDO creditsDetailDO2 : creditsDetailDOList) {
  1597. creditsDetailDO2.setTotal(accountDO1.getTotal());
  1598. creditsDetailDO2.setFlag("1");
  1599. creditsDetailDOS.add(creditsDetailDO2);
  1600. }
  1601. envelop.setDetailModelList(creditsDetailDOS);
  1602. return envelop;
  1603. }else {
  1604. logger.info("居民:"+creditsDetailDO.getPatientId()+"已领取周奖励-间断");
  1605. envelop.setMessage("居民:"+creditsDetailDO.getPatientId()+"已领取周奖励-间断");
  1606. }
  1607. }
  1608. return envelop;
  1609. }
  1610. }
  1611. public List<CreditsDetailDO> selectWeekReward(String patient,String taskId,String monday,String sunday){
  1612. String creditsSql = "select * from wlyy_health_bank_credits_detail where patient_id = '" + patient + "' and " +
  1613. "update_time >= '" +monday+"' AND update_time<='" + sunday+ "' and ( description = '周奖励-间断' OR description = '周奖励-连续') AND transaction_id = '"+taskId+"'";
  1614. List<CreditsDetailDO> creditsDetailDOS = jdbcTemplate.query(creditsSql,new BeanPropertyRowMapper<>(CreditsDetailDO.class));
  1615. return creditsDetailDOS;
  1616. }
  1617. public void reduceIntegrate(String hospital,String startTime,String endTime,Integer year){
  1618. String sql ="SELECT hbcd.patient_id, " +
  1619. "SUM(hbcd.integrate) AS total FROM wlyy_health_bank_credits_detail hbcd " +
  1620. "WHERE hbcd.patient_id IN ( SELECT sf.patient AS patient FROM wlyy.wlyy_sign_family sf " +
  1621. "WHERE sf.hospital = '"+hospital+"' AND sf. STATUS =- 4 AND sf.sign_year = "+year+" )AND hbcd.create_time < '"+endTime+"' " +
  1622. "AND hbcd.trade_direction = 1 AND hbcd.transaction_id IN ('402885ed63debfcc0163dec956200002','402885ed63debfcc0163deca5ca90003','402885ed63debfcc0163decbba230004','402885ed63debfcc0163decc0a1a0005') GROUP BY hbcd.patient_id";
  1623. List<Map<String,Object>> addIntegrate = jdbcTemplate.queryForList(sql);
  1624. if (addIntegrate==null||addIntegrate.size()==0){
  1625. logger.info("居民列表为空");
  1626. }
  1627. for (Map<String,Object> map:addIntegrate){
  1628. String patient = map.get("patient_id").toString();
  1629. Long reduceIntegrate = credittsLogDetailDao.selectTotalByPatient(patient);
  1630. if (reduceIntegrate == null){
  1631. reduceIntegrate = Long.parseLong("0");
  1632. }
  1633. Long total = Long.parseLong(map.get("total").toString());
  1634. if (total <=reduceIntegrate){
  1635. logger.info("居民code"+patient+"不需要扣减");
  1636. }else {
  1637. Long between = total - reduceIntegrate;
  1638. AccountDO accountDO = accountDao.selectByPatientId(patient);
  1639. String sql1 = "select p.idcard from wlyy.wlyy_patient p where p.code ='"+patient+"'";
  1640. List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql1);
  1641. String idcard = null;
  1642. if (maps!=null&&maps.size()!=0){
  1643. idcard = maps.get(0).get("idcard").toString();
  1644. accountDO.setIdCard(idcard);
  1645. }
  1646. TaskDO taskDO = taskDao.selectById("5e5d857d684d77f201684d7f58b3000a132");
  1647. TaskPatientDetailDO patientDetailDO = taskPatientDetailDao.selectByTaskIdAndPatientId("5e5d857d684d77f201684d7f58b3000a132",patient);
  1648. if (patientDetailDO == null){
  1649. TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO();
  1650. taskPatientDetailDO.setSaasId("dev");
  1651. taskPatientDetailDO.setTaskId("5e5d857d684d77f201684d7f58b3000a132");
  1652. taskPatientDetailDO.setPatientId(patient);
  1653. taskPatientDetailDO.setDoctorId("system");
  1654. taskPatientDetailDO.setPatientIdcard(idcard);
  1655. taskPatientDetailDO.setCreateTime(new Date());
  1656. taskPatientDetailDO.setUpdateTime(new Date());
  1657. taskPatientDetailDO.setStatus(1);
  1658. taskPatientDetailDao.save(taskPatientDetailDO);
  1659. }
  1660. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  1661. creditsDetailDO.setAccountId(accountDO.getId());
  1662. creditsDetailDO.setIdCard(accountDO.getIdCard());
  1663. creditsDetailDO.setSaasId("dev");
  1664. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1665. creditsDetailDO.setTradeDirection(-1);
  1666. creditsDetailDO.setIntegrate(between.intValue());
  1667. creditsDetailDO.setDescription(taskDO.getTitle());
  1668. creditsDetailDO.setStatus(1);
  1669. creditsDetailDO.setHospital(hospital);
  1670. creditsDetailDO.setCreateTime(new Date());
  1671. creditsDetailDO.setUpdateTime(new Date());
  1672. creditsDetailDO.setTransactionId(taskDO.getId());
  1673. creditsDetailDO.setPatientId(patient);
  1674. credittsLogDetailDao.save(creditsDetailDO);
  1675. logger.info("===居民"+accountDO.getAccountName()+"("+patient+")失效"+creditsDetailDO.getIntegrate()+"===");
  1676. accountDO.setTotal(accountDO.getTotal()-between.intValue());
  1677. accountDao.save(accountDO);
  1678. }
  1679. }
  1680. }
  1681. public CreditsDetailDO completePlan(String planCode,String patient,String idcard,Integer integrate,String hospital,String hospitalName) throws Exception {
  1682. ActivityDO activityDO = activityDao.selectByTemplateIdAndType(planCode,"健康计划");
  1683. CreditsDetailDO creditsDetailDO = new CreditsDetailDO();
  1684. if (activityDO!=null){
  1685. List<TaskDO> taskDOS = taskDao.selectByActivityId(activityDO.getId());
  1686. AccountDO accountDO = accountDao.selectByPatientId(patient);
  1687. if (taskDOS!=null&&taskDOS.size()!=0){
  1688. creditsDetailDO.setSaasId("dev");
  1689. creditsDetailDO.setPatientId(patient);
  1690. creditsDetailDO.setIdCard(idcard);
  1691. creditsDetailDO.setIntegrate(integrate);
  1692. creditsDetailDO.setStatus(1);
  1693. creditsDetailDO.setTradeDirection(1);
  1694. creditsDetailDO.setTradeType("ACTIVITY_TASK");
  1695. creditsDetailDO.setAccountId(accountDO.getId());
  1696. creditsDetailDO.setHospital(hospital);
  1697. creditsDetailDO.setHospitalName(hospitalName);
  1698. creditsDetailDO.setTransactionId(taskDOS.get(0).getId());
  1699. creditsDetailDO.setUpdateTime(new Date());
  1700. creditsDetailDO.setCreateTime(new Date());
  1701. credittsLogDetailDao.save(creditsDetailDO);
  1702. TaskPatientDetailDO taskPatientDetailDO = taskPatientDetailDao.selectByTaskIdAndPatientId(taskDOS.get(0).getId(),patient);
  1703. if (taskPatientDetailDO!=null){
  1704. taskPatientDetailDO.setTotal(taskPatientDetailDO.getTotal()+integrate);
  1705. }
  1706. taskPatientDetailDao.save(taskPatientDetailDO);
  1707. accountDO.setTotal(accountDO.getTotal()+integrate);
  1708. accountDao.save(accountDO);
  1709. }
  1710. }else {
  1711. throw new Exception("暂不能获取积分!");
  1712. }
  1713. return creditsDetailDO;
  1714. }
  1715. }