package com.yihu.jw.service;/** * Created by nature of king on 2018/4/27. */ import com.yihu.base.mysql.query.BaseJpaService; import com.yihu.jw.dao.*; import com.yihu.jw.entity.health.bank.*; import com.yihu.jw.restmodel.common.Envelop; import com.yihu.jw.rm.health.bank.HealthBankMapping; import com.yihu.jw.util.DateUtils; import com.yihu.jw.util.ISqlUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @author wangzhinan * @create 2018-04-27 16:53 * @desc credits log info Service **/ @Service @Transactional public class CreditsDetailService extends BaseJpaService { @Autowired private CredittsLogDetailDao credittsLogDetailDao; @Autowired private TaskDao taskDao; @Autowired private ActivityDao activityDao; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private AccountDao accountDao; @Autowired private TaskPatientDetailDao taskPatientDetailDao; @Autowired private TaskRuleDao taskRuleDao; /** * find creditsLogInfo * * @return * @throws ParseException */ public Envelop findByCondition(CreditsDetailDO creditsDetailDO, Integer page, Integer size) throws ParseException { String sql = new ISqlUtils().getSql(creditsDetailDO,page,size,"*"); List creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(CreditsDetailDO.class)); for (CreditsDetailDO creditsDetailDO1 : creditsDetailDOS){ if (creditsDetailDO1.getTradeType().equalsIgnoreCase("HEALTH_TASK")){ TaskDO taskDO = taskDao.findOne(creditsDetailDO1.getTransactionId()); creditsDetailDO1.setTaskDO(taskDO); } } String sqlcount = new ISqlUtils().getSql(creditsDetailDO,0,0,"count"); List> rstotal = jdbcTemplate.queryForList(sqlcount); Long count = 0L; if(rstotal!=null&&rstotal.size()>0){ count = (Long) rstotal.get(0).get("total"); } return Envelop.getSuccessListWithPage(HealthBankMapping.api_success, creditsDetailDOS,page,size,count); } /** * 获取账户信息 * * @param creditsDetailDO * @return */ public Envelop findByTradeDirection(CreditsDetailDO creditsDetailDO){ AccountDO accountDO1 = new AccountDO(); accountDO1.setPatientId(creditsDetailDO.getPatientId()); String sql1 = ISqlUtils.getAllSql(accountDO1); List accountDOS = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(AccountDO.class)); if (accountDOS == null || accountDOS.size() == 0){ accountDO1.setTotal(0); accountDO1.setAccountName(creditsDetailDO.getName()); accountDO1.setCardNumber("jw"); accountDO1.setHospital("海沧区"); accountDO1.setPassword("321321312321"); accountDO1.setHospitalName("haichan"); accountDO1.setCreateTime(new Date()); accountDO1.setUpdateTime(new Date()); accountDao.save(accountDO1); } List accountDOS1 = jdbcTemplate.query(sql1,new BeanPropertyRowMapper(AccountDO.class)); AccountDO accountDO = accountDOS1.get(0); 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()+"'"; List> rstotal = jdbcTemplate.queryForList(sql); if (rstotal!= null && rstotal.size()>0){ if (rstotal.get(0).get("total") == null){ accountDO.setUsedTotal(0); }else { accountDO.setUsedTotal(Integer.parseInt(rstotal.get(0).get("total").toString())); } } return Envelop.getSuccess(HealthBankMapping.api_success,accountDO); } /* public Envelop exchangeGoods(GoodsDO goodsDO){ CreditsDetailDO creditsLogDetailDO = new CreditsDetailDO(); Envelop envelop = new Envelop<>(); envelop.setObj(true); return envelop; } */ public Envelop selectByRanking(List patientIds, Integer page, Integer size){ StringBuffer buffer = new StringBuffer(); buffer.append(" ba.patient_id in("); if (patientIds == null || patientIds.size() == 0){ buffer.append("''"); }else { for (int i=0;i accountDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(AccountDO.class)); String sqlCount = "SELECT count(1) AS total"+ " FROM " + " wlyy_health_bank_account ba LEFT JOIN " + " ( " + " SELECT " + " SUM(cd.integrate) AS total, " + " cd.patient_id AS patient_id " + " FROM " + " wlyy_health_bank_credits_detail cd " + " WHERE " + " cd.trade_direction = - 1 " + " GROUP BY " + " cd.patient_id " + " ) cd1 ON cd1.patient_id = ba.patient_id " + "WHERE " + buffer + " ORDER BY " + " ba.create_time, " + " (ba.total + cd1.total) DESC "; List> rstotal = jdbcTemplate.queryForList(sqlCount); Long count = 0L; if(rstotal!=null&&rstotal.size()>0){ count = (Long) rstotal.get(0).get("total"); } return Envelop.getSuccessListWithPage(HealthBankMapping.api_success, accountDOS,page,size,count); } /** * 添加积分 * * @param creditsDetailDO * @return */ public Envelop insert(CreditsDetailDO creditsDetailDO){ try { synchronized (creditsDetailDO.getPatientId()){ String sqlAccount = "select * from wlyy_health_bank_account ba where ba.patient_id = '"+creditsDetailDO.getPatientId() +"'"; List accountDOList = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class)); if (accountDOList != null && accountDOList.size() != 0){ creditsDetailDO.setAccountId(accountDOList.get(0).getId()); }else { AccountDO accountDO1 = new AccountDO(); accountDO1.setPatientId(creditsDetailDO.getPatientId()); accountDO1.setTotal(0); accountDO1.setAccountName(creditsDetailDO.getName()); accountDO1.setCardNumber("jw"); accountDO1.setHospital("海沧区"); accountDO1.setPassword("321321312321"); accountDO1.setHospitalName("haichan"); accountDO1.setCreateTime(new Date()); accountDO1.setUpdateTime(new Date()); accountDao.save(accountDO1); List accountDOS = jdbcTemplate.query(sqlAccount,new BeanPropertyRowMapper(AccountDO.class)); creditsDetailDO.setAccountId(accountDOS.get(0).getId()); } TaskDO taskDO = new TaskDO(); taskDO.setTaskCode(creditsDetailDO.getFlag()); taskDO.setId(creditsDetailDO.getTransactionId()); /*taskDO.setPatientId(creditsDetailDO.getPatientId());*/ String sql = ISqlUtils.getSql(taskDO,1,1,"*"); List taskDOList = jdbcTemplate.query(sql,new BeanPropertyRowMapper(TaskDO.class)); creditsDetailDO.setTransactionId(taskDOList.get(0).getId()); TaskRuleDO taskRuleDO = taskRuleDao.findOne(taskDOList.get(0).getRuleCode()); creditsDetailDO.setIntegrate(taskRuleDO.getIntegrate()); creditsDetailDO.setTradeDirection(taskRuleDO.getTradeDirection()); String taskSql = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDOList.get(0).getId()+"' and patient_id = '" + creditsDetailDO.getPatientId() +"'"; List taskPatientDetailDOS = jdbcTemplate.query(taskSql,new BeanPropertyRowMapper(TaskPatientDetailDO.class)); if (taskPatientDetailDOS == null || taskPatientDetailDOS.size() ==0){ TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO(); taskPatientDetailDO.setTaskId(creditsDetailDO.getTransactionId()); taskPatientDetailDO.setSaasId(creditsDetailDO.getSaasId()); taskPatientDetailDO.setPatientId(creditsDetailDO.getPatientId()); taskPatientDetailDO.setPatientIdcard(creditsDetailDO.getIdCard()); taskPatientDetailDO.setPatientOpenid(creditsDetailDO.getOpenId()); taskPatientDetailDO.setStatus(Integer.parseInt("0")); taskPatientDetailDO.setCreateTime(new Date()); taskPatientDetailDO.setUpdateTime(new Date()); taskPatientDetailDao.save(taskPatientDetailDO); }else if (taskPatientDetailDOS != null && taskDOList.get(0).getPeriod() == 0){ String taskSql1 = "select * from wlyy_health_bank_task_patient_detail where task_id = '"+taskDOList.get(0).getId()+ "' and patient_id = '"+creditsDetailDO.getPatientId()+"' and create_time > '" + DateUtils.getDayBegin() +"' and create_time < '"+ DateUtils.getDayEnd() +"'"; List taskPatientDetailDOS1 = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class)); if (taskPatientDetailDOS1 == null || taskPatientDetailDOS1.size() == 0){ TaskPatientDetailDO taskPatientDetailDO = new TaskPatientDetailDO(); taskPatientDetailDO.setTaskId(creditsDetailDO.getTransactionId()); taskPatientDetailDO.setSaasId(creditsDetailDO.getSaasId()); taskPatientDetailDO.setPatientId(creditsDetailDO.getPatientId()); taskPatientDetailDO.setPatientIdcard(creditsDetailDO.getIdCard()); taskPatientDetailDO.setPatientOpenid(creditsDetailDO.getOpenId()); taskPatientDetailDO.setStatus(Integer.parseInt("0")); taskPatientDetailDO.setCreateTime(new Date()); taskPatientDetailDO.setUpdateTime(new Date()); taskPatientDetailDao.save(taskPatientDetailDO); } } creditsDetailDO.setCreateTime(new Date()); creditsDetailDO.setUpdateTime(new Date()); CreditsDetailDO creditsDetailDO1 =credittsLogDetailDao.save(creditsDetailDO); creditsDetailDO1.setFlag(creditsDetailDO.getFlag()); List creditsDetailDOList = new ArrayList<>(); creditsDetailDOList.add(creditsDetailDO1); AccountDO accountDO = accountDao.findOne(creditsDetailDO1.getAccountId()); if (creditsDetailDO1.getTradeDirection() == 1){ accountDO.setTotal(accountDO.getTotal()+creditsDetailDO1.getIntegrate()); }else if (creditsDetailDO.getTradeDirection() == -1){ accountDO.setTotal(accountDO.getTotal()-creditsDetailDO1.getIntegrate()); } AccountDO accountDO1 = accountDao.save(accountDO); List creditsDetailDOS = new ArrayList<>(); for (CreditsDetailDO creditsDetailDO2:creditsDetailDOList){ creditsDetailDO2.setTotal(accountDO1.getTotal()); creditsDetailDOS.add(creditsDetailDO2); } Envelop envelop = new Envelop<>(); envelop.setDetailModelList(creditsDetailDOS); return envelop; } }catch (Exception e){ e.printStackTrace(); Envelop envelop = new Envelop<>(); return envelop; } } /** * 根据活动查询积分 * * @param activityId 活动id * * @param patientId 居民id * * @param page 页码 * * @param size 分页大小 * @return */ public Envelop selectByActivity(String activityId,String patientId,Integer page,Integer size){ String sql="SELECT * " + "FROM " + " wlyy_health_bank_credits_detail " + "WHERE" + " transaction_id IN ( " + " SELECT " + " bt.id " + " FROM " + " wlyy_health_bank_task bt " + " WHERE " + " transaction_id = '"+activityId +"' " + " ) " + " and patient_id = '" +patientId+ "' LIMIT "+(page-1)*size +","+size; List creditsDetailDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(CreditsDetailDO.class)); String sqlcount = "SELECT count(1) AS" + " total FROM " + " wlyy_health_bank_credits_detail " + "WHERE" + " transaction_id IN ( " + " SELECT " + " bt.id " + " FROM " + " wlyy_health_bank_task bt " + " WHERE " + " transaction_id = '"+activityId +"' " + " ) " + " and patient_id = '" +patientId+ "'"; List> rstotal = jdbcTemplate.queryForList(sqlcount); Long count = 0L; if(rstotal!=null&&rstotal.size()>0){ count = (Long) rstotal.get(0).get("total"); } return Envelop.getSuccessListWithPage(HealthBankMapping.api_success,creditsDetailDOS,page,size,count); } /** * 固定数据 * * @param patientId * @return *//* public List getTasks(String patientId){ List taskDOList = new ArrayList<>(); TaskDO taskDO = new TaskDO(); *//*taskDO.setPatientId(patientId);*//* taskDO.setTaskCode("BIND"); taskDO.setPeriod(1); taskDO.setTaskTitle("首次绑定"); taskDO.setTaskContent("(绑定社区登记发放的设备,可获得各类型设备的首绑奖励。)"); taskDO.setTradeType("activity"); taskDO.setTransactionId("402885e96324a409016324c0a45a0006"); taskDO.setCreateTime(new Date()); taskDO.setUpdateTime(new Date()); taskDOList.add(taskDO); TaskDO taskDO1 = new TaskDO(); *//*taskDO1.setPatientId(patientId);*//* taskDO1.setTaskCode("MEASURE"); taskDO1.setPeriod(0); taskDO1.setTaskTitle("每日测量"); taskDO1.setTaskContent("(使用社区发放的已关联您身份信息的设备,绑定后每天完成测量)"); taskDO1.setTradeType("activity"); taskDO1.setTransactionId("402885e96324a409016324c0a45a0006"); taskDO1.setCreateTime(new Date()); taskDO1.setUpdateTime(new Date()); taskDOList.add(taskDO1); return taskDOList; } */ }