| 
					
				 | 
			
			
				@ -0,0 +1,512 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.care.service.lifeCare; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.dao.lifeCare.LifeCareCancelLogDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.dao.lifeCare.LifeCareFeeDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.dao.lifeCare.LifeCareItemDictDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.dao.lifeCare.LifeCareOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.util.MessageUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.patient.BasePatientDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.care.lifeCare.LifeCareCancelLogDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.care.lifeCare.LifeCareFeeDetailDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.care.lifeCare.LifeCareItemDictDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.patient.dao.BasePatientDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.restmodel.ResponseContant; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.util.common.IdCardUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.util.entity.EntityUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.wechat.dao.BasePatientWechatDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.mysql.query.BaseJpaService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.collections.map.HashedMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.jdbc.core.BeanPropertyRowMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.jdbc.core.JdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.math.BigDecimal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by yeshijie on 2021/3/26. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCareOrderDao> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private Logger logger = LoggerFactory.getLogger(LifeCareOrderService.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private LifeCareOrderDao lifeCareOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private LifeCareFeeDetailDao lifeCareFeeDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private JdbcTemplate jdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private LifeCareItemDictDao lifeCareItemDictDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private MessageUtil messageUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private LifeCareCancelLogDao lifeCareCancelLogDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private BasePatientDao patientDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private BasePatientWechatDao basePatientWechatDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Value("${wechat.id}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String wxId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private BaseDoctorHospitalDao doctorHospitalDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 记录完成情况 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param orderId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param complereImgs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param completeRemark 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void completeOrder(String orderId,String complereImgs,String completeRemark){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        LifeCareOrderDO lifeCareOrderDO = lifeCareOrderDao.findOne(orderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(lifeCareOrderDO.getStatus().equals(LifeCareOrderDO.Status.waitForAccept.getType())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareOrderDO.setStatus(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareOrderDO.setCompleteImgs(complereImgs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareOrderDO.setCompleteRemark(completeRemark); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareOrderDO.setCompleteTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareOrderDao.save(lifeCareOrderDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据id获取服务工单信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public LifeCareOrderDO getServiceOrderById(String id) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        LifeCareOrderDO lifeCareOrderDO = lifeCareOrderDao.findOne(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (null == lifeCareOrderDO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BasePatientDO patient = patientDao.findById(lifeCareOrderDO.getPatient()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (patient != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String sex = IdCardUtil.getSexForIdcard_new(patient.getIdcard()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            int age = IdCardUtil.getAgeByIdcardOrBirthday(patient.getIdcard(),patient.getBirthday()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareOrderDO.setSex("1".equals(sex) ? "男" : "2".equals(sex) ? "女" : "未知"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareOrderDO.setAge(age); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareOrderDO.setPhoto(patient.getPhoto()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 获取服务次数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        lifeCareOrderDO.setFeeDetailList(getFeeDetails(id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return lifeCareOrderDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据工单id获取服务工单-服务项价格 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param orderId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List<LifeCareFeeDetailDO> getFeeDetails(String orderId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sql = "SELECT * from base_life_care_fee_detail d where order_id='"+orderId+"' "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<LifeCareFeeDetailDO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(LifeCareFeeDetailDO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 顶部状态栏订单各分类总条数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param doctor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Map<String, Integer> getNumGroupByStatus(String doctor) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(doctor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String hospital = doctorHospitalDOs.get(0).getOrgCode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sql = "SELECT a.status, COUNT(DISTINCT a.id) as num FROM base_life_care_order a " ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql +=  "  WHERE  a.hospital = ? group BY a.status"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, hospital); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String, Integer> map = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //状态 待服务 1、已完成 2 、已取消 -1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("1",0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("2",0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("-1",0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int total = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (Map<String, Object> one:list){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            map.put(String.valueOf(one.get("status")), Integer.valueOf(String.valueOf(one.get("num")))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            total+=Integer.valueOf(String.valueOf(one.get("num"))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        map.put("total", total); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 医生/助老员-查询-工单列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject queryBriefList(String doctorCode,String name,String phone,Integer status,int page, int size) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject result = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(doctorCode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String hospital = doctorHospitalDOs.get(0).getOrgCode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        name = null == name ? "" : name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        phone = null == phone ? "" : phone; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        status = null == status ? -100 : status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int start = 0 == page ? page++ : (page - 1) * size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int end = 0 == size ? 15 : page * size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer buffer = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNoneBlank(name)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            buffer.append(" AND (o.`patient_name` like '%"+name+"%' or p.idcard like '%"+name+"%')"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if (StringUtils.isNoneBlank(phone)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            buffer.append(" AND o.`proxy_patient_phone` like '%"+phone+"%'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sql = "SELECT " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  p.name AS patientName, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  p.photo AS photo, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  case p.sex  " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  when 1 then '男'  " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  when 2 then '女' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  end AS sex, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  TIMESTAMPDIFF(year,p.birthday,NOW()) AS age," + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.id as orderId, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.patient_phone as phone, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.proxy_patient as proxyPatient, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.patient as patient, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.number as number, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.patient_expected_serve_time as serveTime, o.doctor, o.doctor_name as doctorName, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.serve_address as address, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.serve_lon as lon, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.serve_lat as lat, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.`status` as status " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " FROM " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " ( base_life_care_order o " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " LEFT JOIN base_patient p ON o.patient = p.id ) "+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " WHERE " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.hospital = '{hospital}' and o.type != 3 " +buffer+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " AND ( o.`status` = {status} OR -100 = {status} ) " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " ORDER BY o.create_time desc " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " LIMIT {start},{end};"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String finalSql = sql.replace("{hospital}", hospital) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .replace("{status}", String.valueOf(status)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .replace("{start}", String.valueOf(start)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .replace("{end}", String.valueOf(end)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String countSql = "SELECT  " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "   count(o.id)  " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " FROM  " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "   base_life_care_order o  " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " LEFT JOIN base_patient p ON o.patient = p.id " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " WHERE  " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.hospital = '{hospital}' " +buffer+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " AND (o.`status` = {status} or -100 = {status})"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String finqlCountSql = countSql.replace("{hospital}", hospital) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .replace("{status}", String.valueOf(status)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String,Object>> sqlResultlist; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sqlResultlist = jdbcTemplate.queryForList(finalSql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (Map<String,Object> orderDO:sqlResultlist){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                orderDO.put("feeDetails",getFeeDetails(orderDO.get("orderId").toString())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, "从数据库查询【调度员】生活照料工单列表信息失败:" + e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Long count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            count = jdbcTemplate.queryForObject(finqlCountSql, Long.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, "从数据库统计【调度员】生活照料工单数量失败:" + e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultFlag, ResponseContant.success); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultMsg, sqlResultlist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject countItem = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        countItem.put("count", count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.putAll(countItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 查找服务项字典 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List<LifeCareItemDictDO> findItemDict(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return lifeCareItemDictDao.findByAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 居民端-查询生活照料工单列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject queryInfoList(String patient,Integer status, int page, int size) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject result = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        status = null == status ? -100 : status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int start = 0 == page ? page++ : (page - 1) * size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int end = 0 == size ? 15 : size; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sql = "SELECT *  FROM  base_life_care_order o " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " WHERE (o.patient = '{patient}' or o.proxy_patient = '{patient}') "+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " AND (o.`status` = {status} or -100 = {status})" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  group by o.id " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " ORDER BY o.create_time desc" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " LIMIT {start},{end} "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String finalSql = sql.replace("{patient}", patient) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .replace("{status}", String.valueOf(status)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .replace("{start}", String.valueOf(start)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .replace("{end}", String.valueOf(end)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String countSql = "SELECT count(DISTINCT o.id) FROM base_life_care_order o " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " WHERE  " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  (o.patient = '{patient}' or o.proxy_patient = '{patient}') " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " AND (o.`status` = {status} or -100 = {status})"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String finqlCountSql = countSql.replace("{patient}", patient) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                .replace("{status}", String.valueOf(status)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<LifeCareOrderDO> sqlResultlist= jdbcTemplate.query(finalSql,new BeanPropertyRowMapper(LifeCareOrderDO.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (LifeCareOrderDO orderDO:sqlResultlist){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            orderDO.setFeeDetailList(getFeeDetails(orderDO.getId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Integer count = jdbcTemplate.queryForObject(finqlCountSql, Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultFlag, ResponseContant.success); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultMsg, sqlResultlist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject countItem = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        countItem.put("count", count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.putAll(countItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 居民端-统计生活照料工单各状态下的数量列表(预约咨询记录) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject queryInfoStatusCountList(String patient) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject result = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int total = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Map<String,Object> res = new HashedMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //状态 待服务 1、已完成 2 、已取消 -1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        res.put("1",0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        res.put("2",0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        res.put("-1",0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String countSql = "SELECT " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  count(o.id) as count, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.status as status " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " FROM " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  base_life_care_order o " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " WHERE " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "  o.patient = '"+ patient + "' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                " GROUP BY o.`status`"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String,Object>> countMapList = jdbcTemplate.queryForList(countSql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(Map<String,Object> map:countMapList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            int c = Integer.valueOf(map.get("count").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            total +=c; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            res.put(String.valueOf(map.get("status")),c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        res.put("total",total); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultFlag, ResponseContant.success); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultMsg, res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 取消工单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param orderId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param type 取消类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param reason 取消理由 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject cancelOrder(String orderId,int type,String reason){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject result = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        LifeCareOrderDO orderDO = lifeCareOrderDao.findOne(orderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(null == orderDO){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "【取消工单】该工单不存在:," + orderId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error(failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(orderDO.getStatus().equals(LifeCareOrderDO.Status.waitForAccept.getType())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "只有医生服务前的工单才可取消:," + orderId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error(failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        orderDO.setCancelType(type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        orderDO.setCancelTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        orderDO.setCancelReason(reason); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //如果是调度员取消,推送IM取消工单json消息, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        orderDO.setStatus(LifeCareOrderDO.Status.cancel.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.save(orderDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(type == LifeCareOrderDO.CancelType.patient.getType()){  //居民取消,消息列表也应该不显示 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            messageUtil.updateLifeCareMessage(orderDO,new String[]{"502","503","530"},"patientCancel"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //保存取消记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        LifeCareCancelLogDO cancelLogDO = new LifeCareCancelLogDO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        cancelLogDO.setOrderId(orderId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        cancelLogDO.setPatient(orderDO.getProxyPatient()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        cancelLogDO.setCancelType(type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        cancelLogDO.setCancelReason(reason); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        cancelLogDO.setTime(orderDO.getCancelTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        lifeCareCancelLogDao.save(cancelLogDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 发送微信模板消息,通知居民工单已取消(smyyyqx-上门预约已取消) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        String first = "key1,您好,您的上门预约服务已退回,点击查看原因"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        BasePatientDO patient = patientDao.findById(orderDO.getPatient()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        first  = first.replace("key1", null != patient.getName() ? patient.getName() : ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        JSONObject json = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        json.put("id", orderDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        List<BasePatientWechatDo> basePatientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wxId,patient.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        if(basePatientWechatDos.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//            String openId = basePatientWechatDos.get(0).getOpenid(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//            messageUtil.putTemplateWxMessage(wxId,"template_process_feedback","smyyyqx",openId,first,null,null,30,json, DateUtil.dateToChineseDate(new Date()),"生活照料已取消"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultFlag, ResponseContant.success); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultMsg, "工单服务已取消!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 申请生活照料 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param jsonData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject create(String jsonData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("申请生活照料jsonData参数:" + jsonData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject result = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject jsonObjectParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            jsonObjectParam = JSONObject.parseObject(jsonData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "参数转换成JSON对象异常:" + e.getMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error(failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        LifeCareOrderDO orderDO = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            orderDO = EntityUtils.jsonToEntity(jsonObjectParam.get("order").toString(), LifeCareOrderDO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "生活照料工单服务基本信息:" + e.getMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error(failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        orderDO.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        orderDO.setCreateUser(orderDO.getProxyPatient()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        orderDO.setCreateUserName(orderDO.getProxyPatientName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(orderDO.getPatient())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "当前服务对象code为空,请联系管理员检查参数!patient = " + orderDO.getPatient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error(failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(orderDO.getProxyPatient())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "当前代理对象code为空,请联系管理员检查参数!proxyPatient = " + orderDO.getProxyPatient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error(failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        orderDO.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //判断创建生活照料类型,发起类型(1本人发起 2家人待预约 3医生代预约) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(orderDO.getProxyPatient().equals(orderDO.getPatient())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            orderDO.setType(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if(!orderDO.getProxyPatient().equals(orderDO.getPatient())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            orderDO.setType(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.save(orderDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put("orderId",orderDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //新增工单与服务项费用关联关系 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (orderWithPackageItemFeeAdd(result, jsonObjectParam, orderDO,null)) {return result;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultFlag, ResponseContant.success); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultMsg, orderDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean orderWithPackageItemFeeAdd(JSONObject result, JSONObject jsonObjectParam, LifeCareOrderDO order,String doctorId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<LifeCareFeeDetailDO> feeDetailDOList = order.getFeeDetailList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BigDecimal totalFee = order.getTotalFee(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(null == totalFee){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            totalFee = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for ( LifeCareFeeDetailDO feeDetailDO : feeDetailDOList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //工单主表中记录总费用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                totalFee = totalFee.add(feeDetailDO.getFee().multiply(BigDecimal.valueOf(feeDetailDO.getNumber()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String failMsg = "工单主表中记录总费用时," + e.getMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                logger.error(failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 服务项可能一开始由居民预约,后期由医生新增或医生删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Integer status = jsonObjectParam.getInteger("status"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(null == status || status == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                feeDetailDO.setStatus(LifeCareFeeDetailDO.Status.patient.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                feeDetailDO.setStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            feeDetailDO.setOrderId(order.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(StringUtils.isBlank(feeDetailDO.getId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                feeDetailDO.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                feeDetailDO.setUpdateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(StringUtils.isBlank(feeDetailDO.getId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                feeDetailDO.setPayStatus(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            lifeCareFeeDetailDao.save(feeDetailDOList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "保存服务费用到数据库异常:," + e.getMessage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error(failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |