package com.yihu.jw.service;/** * Created by nature of king on 2018/4/27. */ import com.alibaba.fastjson.JSONObject; import com.yihu.jw.dao.ActivityDao; import com.yihu.jw.dao.ActivityRuleDao; import com.yihu.jw.dao.TaskDao; import com.yihu.jw.dao.TaskPatientDetailDao; import com.yihu.jw.entity.health.bank.ActivityDO; import com.yihu.jw.entity.health.bank.ActivityRuleDO; import com.yihu.jw.entity.health.bank.TaskDO; import com.yihu.jw.entity.health.bank.TaskPatientDetailDO; import com.yihu.jw.restmodel.web.MixEnvelop; import com.yihu.jw.restmodel.web.ObjEnvelop; import com.yihu.jw.rm.health.bank.HealthBankMapping; import com.yihu.jw.util.ISqlUtils; import com.yihu.jw.util.date.DateUtil; import com.yihu.mysql.query.BaseJpaService; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang3.StringUtils; 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.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; /** * @author wangzhinan * @create 2018-04-27 14:38 * @desc health activity Service **/ @Service @Transactional public class ActivityService extends BaseJpaService { @Autowired private ActivityDao activityDao; @Autowired private TaskPatientDetailDao taskPatientDetailDao; @Autowired private TaskDao taskDao; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private ActivityRuleDao activityRuleDao; /** * insert activityDO * * @param activityDO 活动参数对象 * @return */ public MixEnvelop insert(ActivityDO activityDO,String value1,String value2,String value3){ if (value2 != null){ JSONObject object = JSONObject.parseObject(value2); activityDO.setActivityOfflineTime(object.getDate("activityOfflineTime")); activityDO.setRegistrationTime(object.getDate("registrationTime")); activityDO.setDeadLine(object.getDate("deadLine")); } activityDO.setCreateTime(new Date()); activityDO.setUpdateTime(new Date()); // if (1 == activityDO.getStatus()) { // activityDO.setReleaseTime(new Date()); // } activityDO.setDelFlag(1); activityDO= activityDao.save(activityDO); ActivityRuleDO activityRuleDO = new ActivityRuleDO(); activityRuleDO.setCreateTime(new Date()); activityRuleDO.setUpdateTime(new Date()); activityRuleDO.setActivityId(activityDO.getId()); activityRuleDO.setSaasId("dev"); activityRuleDO.setValue1(value1); activityRuleDO.setValue2(value2); activityRuleDO.setValue3(value3); activityRuleDO.setDelFlag(1); activityRuleDao.save(activityRuleDO); MixEnvelop envelop = new MixEnvelop<>(); envelop.setObj(true); return envelop; } /** * find by condition * * @param activityDO 活动参数对象 * @param page 页码 * @param size 每页大小 * @return * @throws ParseException */ public MixEnvelop findByCondition(ActivityDO activityDO, Integer page, Integer size) throws ParseException { String sql = new ISqlUtils().getSql(activityDO,page,size,"*"); List activityDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(ActivityDO.class)); for (ActivityDO activityDO1:activityDOS){ String taskSql = "SELECT" + " COUNT(1) AS total1 " + "FROM " + " ( " + " SELECT DISTINCT " + " (btpd.patient_id) " + " FROM " + " wlyy_health_bank_task_patient_detail btpd " + " WHERE " + " activity_id = '" +activityDO1.getId()+ "' ) btpd1"; List> rstotal = jdbcTemplate.queryForList(taskSql); Long count = 0L; if(rstotal!=null&&rstotal.size()>0){ count = (Long) rstotal.get(0).get("total1"); } activityDO1.setTotal(count); String taskSql1 = "select * from wlyy_health_bank_task_patient_detail btpd where activity_id = '"+activityDO1.getId() +"' and (patient_idcard = '"+activityDO.getPatientIdcard()+"' OR union_id = '"+activityDO.getUnionId()+"')"; List taskPatientDetailDOS = jdbcTemplate.query(taskSql1,new BeanPropertyRowMapper(TaskPatientDetailDO.class)); activityDO1.setTaskPatientDetailDOS(taskPatientDetailDOS); String tasksql = "select * from wlyy_health_bank_task where transaction_id = '"+activityDO1.getId()+"'"; List taskDOList = jdbcTemplate.query(tasksql,new BeanPropertyRowMapper(TaskDO.class)); activityDO1.setTaskDOS(taskDOList); } String sqlcount = new ISqlUtils().getSql(activityDO,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 MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success,activityDOS,page,size,count); } /** * update activityDO * * @param activityDO 活动参数对象 * @return */ public MixEnvelop update(ActivityDO activityDO, String value1, String value2, String value3) throws Exception { if (StringUtils.isBlank(activityDO.getId())) { throw new Exception("活动id不能为空!"); } ActivityRuleDO activityRuleDO = activityRuleDao.selectByActivityId(activityDO.getId()); activityRuleDO.setUpdateTime(new Date()); activityRuleDO.setSaasId("dev"); // if (1 == activityDO.getStatus()) { // activityDO.setReleaseTime(new Date()); // } activityRuleDO.setValue1(value1); activityRuleDO.setValue2(value2); activityRuleDO.setValue3(value3); activityRuleDO.setDelFlag(1); activityRuleDO= activityRuleDao.save(activityRuleDO); activityDao.save(activityDO); activityDO.setActivityRuleDO(activityRuleDO); MixEnvelop envelop = new MixEnvelop<>(); envelop.setObj(true); return envelop; } /** * 获取参与的活动 * * @param activityDO 活动对象 * @param page 页码 * @param size 分页大小 * @return */ public MixEnvelop selectByPatient(ActivityDO activityDO, Integer page, Integer size){ String sql ="SELECT * " + " FROM wlyy_health_bank_activity " + "WHERE " + "id IN ( " + "SELECT bt.transaction_id " + "FROM wlyy_health_bank_task bt " + "WHERE id IN (" + " SELECT task_id FROM " + "wlyy_health_bank_task_patient_detail" + " WHERE " + " patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"')" + " )" + " LIMIT "+(page-1)*size +","+size; List activityDOS = jdbcTemplate.query(sql,new BeanPropertyRowMapper(ActivityDO.class)); for (ActivityDO activityDO1:activityDOS){ String activitySql ="SELECT btpd1.sum AS total FROM (SELECT " + " SUM(total) AS sum , " + " patient_id, " + " patient_openid, " + " patient_idcard, " + " activity_id," + " union_id " + " FROM " + " wlyy_health_bank_task_patient_detail " + "GROUP BY patient_openid,patient_idcard,union_id)btpd1 " + "WHERE " + " btpd1.activity_id = '"+activityDO1.getId() +"' AND patient_openid = '"+activityDO.getOpenId()+ "' AND patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"'"; List> rstotal = jdbcTemplate.queryForList(activitySql); Long count = 0L; if(rstotal!=null&&rstotal.size()>0){ Object object = rstotal.get(0).get("total"); count = Long.parseLong(object.toString()); } activityDO1.setSum(count); String rankingSql = "SELECT count(1)+1 AS total FROM (SELECT " + " SUM(total) AS sum , " + " patient_id, " + " patient_openid, " + " patient_idcard, " + " activity_id " + "FROM " + " wlyy_health_bank_task_patient_detail " + "GROUP BY patient_openid,patient_idcard,union_id)btpd1 " + "WHERE " + " btpd1.activity_id = '"+activityDO1.getId()+"' AND btpd1.sum >" +activityDO1.getSum() ; List> rstotal1 = jdbcTemplate.queryForList(rankingSql); Integer count1 = 0; if(rstotal1!=null&&rstotal1.size()>0){ Object object = rstotal1.get(0).get("total"); count1 = Integer.parseInt(object.toString()); } activityDO1.setActivityRanking(count1); String taskSql = "SELECT" + " COUNT(1) AS total1 " + "FROM " + " ( " + " SELECT * " + " FROM " + " wlyy_health_bank_task_patient_detail btpd " + " WHERE " + " activity_id = '" +activityDO1.getId()+ "' GROUP BY patient_openid,patient_idcard,union_id) btpd1"; List> rstotal2 = jdbcTemplate.queryForList(taskSql); Long count2 = 0L; if(rstotal2!=null&&rstotal2.size()>0){ count2 = (Long) rstotal2.get(0).get("total1"); } activityDO1.setTotal(count2); } String sqlcount = "SELECT count(1) AS total" + " FROM wlyy_health_bank_activity " + "WHERE " + "id IN ( " + "SELECT bt.transaction_id " + "FROM wlyy_health_bank_task bt " + "WHERE id IN (" + " SELECT task_id FROM " + "wlyy_health_bank_task_patient_detail" + " WHERE " + " patient_openid = '"+activityDO.getOpenId()+ "' AND patient_idcard = '"+activityDO.getPatientIdcard()+"' AND union_id = '"+ activityDO.getUnionId()+"' )" + " )"; List> rstotal = jdbcTemplate.queryForList(sqlcount); Long count = 0L; if(rstotal!=null&&rstotal.size()>0){ count = (Long) rstotal.get(0).get("total"); } return MixEnvelop.getSuccessListWithPage(HealthBankMapping.api_success,activityDOS,page,size,count); } /** * 批量删除活动 * * @param ids 活动id集合 * @return */ public MixEnvelop batchDelete(List ids){ MixEnvelop envelop = new MixEnvelop<>(); for (int i =0;i taskDOList = taskDao.selectByActivityId(ids.get(i)); for (TaskDO taskDO:taskDOList){ taskDO.setStatus(0); taskDO.setCreateTime(new Date()); taskDO.setUpdateTime(new Date()); taskDao.save(taskDO); } List taskPatientDetailDOS = taskPatientDetailDao.selectByActivityId(ids.get(i)); for(TaskPatientDetailDO taskPatientDetailDO:taskPatientDetailDOS){ taskPatientDetailDO.setStatus(-1); taskPatientDetailDO.setCreateTime(new Date()); taskPatientDetailDO.setUpdateTime(new Date()); taskPatientDetailDao.save(taskPatientDetailDO); } ActivityRuleDO ruleDO = activityRuleDao.selectByActivityId(ids.get(i)); if(null!=ruleDO){ ruleDO.setDelFlag(0); activityRuleDao.save(ruleDO); } ActivityDO activityDO = activityDao.findOne(ids.get(i)); activityDO.setStatus(-1); activityDO.setCreateTime(new Date()); activityDO.setUpdateTime(new Date()); activityDO.setDelFlag(0); activityDao.save(activityDO); } return envelop; } /** * 删除活动 * * @param id 活动id * @return */ public MixEnvelop daleteActivity(String id){ MixEnvelop envelop = new MixEnvelop<>(); List taskDOList = taskDao.selectByActivityId(id); for (TaskDO taskDO:taskDOList){ taskDO.setStatus(0); taskDO.setCreateTime(new Date()); taskDO.setUpdateTime(new Date()); taskDao.save(taskDO); } List taskPatientDetailDOS = taskPatientDetailDao.selectByActivityId(id); for(TaskPatientDetailDO taskPatientDetailDO:taskPatientDetailDOS){ taskPatientDetailDO.setStatus(-1); taskPatientDetailDO.setCreateTime(new Date()); taskPatientDetailDO.setUpdateTime(new Date()); taskPatientDetailDao.save(taskPatientDetailDO); } ActivityRuleDO ruleDO = activityRuleDao.selectByActivityId(id); if(null!=ruleDO){ ruleDO.setDelFlag(0); activityRuleDao.save(ruleDO); } ActivityDO activityDO = activityDao.findOne(id); activityDO.setStatus(-1); activityDO.setCreateTime(new Date()); activityDO.setUpdateTime(new Date()); activityDO.setDelFlag(0); activityDao.save(activityDO); return envelop; } /** * 编辑活动:上、下线,推荐 * @param id * @param type 操作类型:上线:0,下线:2,推荐:3,取消推荐:4 * @return * @throws Exception */ public ActivityDO editActivity(String id, String type) throws Exception { ActivityDO activityDO = activityDao.findOne(id); ActivityRuleDO activityRuleDO= activityRuleDao.selectByActivityId(id); if("3".equals(type)){ //推荐 activityDO.setRecommended(1); }else if("4".equals(type)){ //取消推荐 activityDO.setRecommended(0); } else if("2".equals(type)){ //下线 activityDO.setStatus(2); }else if("1".equals(type)){ //上线 String ruleJson=null!=activityRuleDO?activityRuleDO.getValue2():""; JSONObject obj=JSONObject.parseObject(ruleJson); SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm"); //报名截止时间 Date registrationTime=null!=obj.get("registrationTime")? sdf.parse(obj.get("registrationTime").toString()):null; //参与截止时间 Date deadLine=null!=obj.get("deadLine")? sdf.parse(obj.get("deadLine").toString()):null; //活动下线时间 Date activityOfflineTime=null!=obj.get("activityOfflineTime")? sdf.parse(obj.get("activityOfflineTime").toString()):null; //获取当前时间 Date now = DateUtil.strToDate(sdf.format(new Date()),"yyyy-MM-dd HH:mm"); if(activityOfflineTime.compareTo(now)<=0){ //活动下线 activityDO.setStatus(2); }else if(activityOfflineTime.compareTo(now)>0 && deadLine.compareTo(now)<=0){ //活动结束 activityDO.setStatus(-1); }else if(deadLine.compareTo(now)>0&®istrationTime.compareTo(now)<=0){ //活动未结束 activityDO.setStatus(0); }else if (registrationTime.compareTo(now)>1){ //报名未截止 activityDO.setStatus(1); } } // activityDO.setReleaseTime(new Date()); activityDO= activityDao.save(activityDO); return activityDO; } /** * 根据活动id获取活动详情+规则 * @param id * @return * @throws Exception */ public JSONObject findActivityById(String id)throws Exception{ JSONObject obj=new JSONObject(); ActivityDO activityDO = activityDao.findOne(id); obj.put("jsonData",activityDO); ActivityRuleDO activityRuleDO=new ActivityRuleDO(); if(null!=activityDO){ activityRuleDO= activityRuleDao.selectByActivityId(id); activityDO.setActivityRuleDO(activityRuleDO); } obj.put("value1",activityRuleDO.getValue1()); obj.put("value2",activityRuleDO.getValue2()); obj.put("value3",activityRuleDO.getValue3()); return obj; } }