| 
					
				 | 
			
			
				@ -0,0 +1,172 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.wlyy.web.third.gateway.controller.doctor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.entity.education.HealthEduArticlePatient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.entity.patient.Patient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.repository.patient.SignFamilyDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.service.app.consult.ConsultService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.service.app.health.HealthEduArticleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.service.app.label.SignPatientLabelInfoService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.service.common.account.DoctorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.service.common.account.PatientService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.task.PushMsgTask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.util.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.util.ImUtill; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.web.WeixinBaseController; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.web.third.gateway.service.GcEduArticleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.web.third.gateway.vo.base.BaseResultModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.web.third.gateway.vo.base.ResultBatchModel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import io.swagger.annotations.Api; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import io.swagger.annotations.ApiOperation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import io.swagger.annotations.ApiParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.json.JSONArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.json.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.http.MediaType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Controller; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.web.bind.annotation.RequestMapping; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.web.bind.annotation.RequestMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.web.bind.annotation.RequestParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.web.bind.annotation.ResponseBody; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by chenweida on 2017/8/30. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Controller 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@RequestMapping(value = "/wlyygc/doctor/edu/article", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@ResponseBody 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Api(description = "医生文章相关服务") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class GcEduArticleController extends WeixinBaseController { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private WeiXinOpenIdUtils weiXinOpenIdUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private PushMsgTask pushMsgTask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private PatientService patientService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ConsultService consultService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private HealthEduArticleService healthEduArticleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private DoctorService doctorService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private SignPatientLabelInfoService signPatientLabelInfoService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private SignFamilyDao signFamilyDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private GcEduArticleService gcEduArticleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 参考原来的教育文章推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * http://172.19.103.88:9092/wlyy//doctor/health/edu/send?code=2e6467b5bb2f4b81b598633624d7f98e&patient=e911d1b756cd4680ab241ab76a463282&teamCode=1&attachedContent= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sendCode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sendName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param sendMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param labelCode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param labelType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param teamId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param receiveCodes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param articleIds 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param articlePics 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param articleTitles 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @RequestMapping(value = "send", method = RequestMethod.POST) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @ApiOperation("文章推送") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public BaseResultModel send( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "sendType", value = "发送类型 1医生发送 2卫纪委发送", required = true) @RequestParam(value = "sendType", required = true) String sendType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "sendCode", value = "发送人code", required = true) @RequestParam(value = "sendCode", required = true) String sendCode, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "sendName", value = "发送人名", required = true) @RequestParam(value = "sendName", required = true) String sendName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "sendMessage", value = "发送人信息", required = false) @RequestParam(value = "sendMessage", required = false) String sendMessage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "teamId", value = "发送人是医生的时候,医生所属的团队", required = true) @RequestParam(value = "teamId", required = true) Long teamId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "labelCode", value = "所选群组,多个用逗号分隔", required = true) @RequestParam(value = "labelCode", required = false, defaultValue = "") String labelCode, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "labelType", value = "标签类型  1 服务类型  2 健康情况 3 疾病类型 4 自定义标签", required = true) @RequestParam(value = "labelType", required = false, defaultValue = "") String labelType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "receiveCodes", value = "接收人code,多个逗号分割", required = false) @RequestParam(value = "receiveCodes", required = false, defaultValue = "") String receiveCodes, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "unReceiveCodes", value = "不接收人code,多个逗号分割(如果同时存在receiveCodes和unReceiveCodes,也不会发送)", required = false) @RequestParam(value = "unReceiveCodes", required = false, defaultValue = "") String unReceiveCodes, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "articleIds", value = "文章ID,多个逗号分割", required = true) @RequestParam(value = "articleIds", required = true) String articleIds, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "articlePics", value = "文章封面,多个逗号分割", required = true) @RequestParam(value = "articlePics", required = true) String articlePics, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            @ApiParam(name = "articleTitles", value = "文章标题,多个逗号分割", required = true) @RequestParam(value = "articleTitles", required = true) String articleTitles 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String[] patients = receiveCodes.split(",");//接收人的code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String[] unPatients = unReceiveCodes.split(",");//接收人的code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Set<String> patientSet = new HashSet<>(); //放入set中可以去重复 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String[] articleIdArr = articleIds.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String[] articlePicArr = articlePics.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String[] articleTitleArr = articleTitles.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if ((articleIdArr.length != articlePicArr.length) || (articleIdArr.length != articleTitleArr.length) || (articlePicArr.length != articleTitleArr.length)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return new ResultBatchModel(BaseResultModel.statusEm.opera_error.getCode(), BaseResultModel.statusEm.opera_error.getMessage() + ":文章参数长度错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //得到需要发送的患者 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            gcEduArticleService.initPatient(patientSet, patients, unPatients, labelType, labelCode, teamId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //保存发送记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<HealthEduArticlePatient> healthEduArticlePatients = gcEduArticleService.saveArticle(patientSet, sendCode, sendName, sendMessage, teamId, articleIdArr, articlePicArr, articleTitleArr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //推送微信模板消息和发送im消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sendWxTemplateAndIM(healthEduArticlePatients, sendType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return new BaseResultModel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return new BaseResultModel(BaseResultModel.statusEm.opera_error.getCode(), BaseResultModel.statusEm.opera_error.getMessage() + ":" + e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private void sendWxTemplateAndIM(List<HealthEduArticlePatient> healthEduArticlePatients, String sendType) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String endMsg = "";//"为了您的健康," + doctor.getName() + "医生给您发送了一篇患教文章,请仔细查阅,如有问题,可随时咨询医生。"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        healthEduArticlePatients.stream().forEach(one -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Patient patient = patientService.findByCode(one.getPatient()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //卫纪委发送不推IM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if ("1".equals(sendType)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                consultService.sendMucMessageBySingnType(one.getDoctor(), one.getDoctorName(), patient.getCode(), "{\"title\":\"" + one.getAttachedTitle() + "\",\"type\":0,\"id\":\"" + one.getId() + "\",\"img\":\"" + one.getAttachedPic() + "\",\"content\":\"为了您的健康,我给您发送了一篇文章,请咨询查阅,如有问题,可随时与我沟通\"}", "4", patient.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (StringUtils.isNotBlank(one.getAttachedContent())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    //发送备注 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    consultService.sendMucMessageBySingnType(one.getDoctor(), one.getDoctorName(), patient.getCode(), one.getAttachedContent(), ImUtill.CONTENT_TYPE_TEXT, patient.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // 推送消息给微信端 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            JSONObject json = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            json.put("first", patient.getName() + ",您好!\n" + one.getDoctorName() + "医生给您发来了一篇患教文章"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            json.put("toUser", patient.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            json.put("article", one.getId() + ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            json.put("title", one.getAttachedTitle()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            json.put("doctorName", one.getDoctorName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            json.put("represented", patient.getCode());//被代理人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            json.put("date", DateUtil.dateToStrLong(DateUtil.getNowDate())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            json.put("remark", org.springframework.util.StringUtils.isEmpty(one.getAttachedContent())?"  ":one.getAttachedContent()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (StringUtils.isNotBlank(patient.getOpenid())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                pushMsgTask.putWxMsg(getAccessToken(), 9, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        patient.getOpenid(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        patient.getName(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //发送代理人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patient.getCode(), patient.getOpenid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (jsonArray != null && jsonArray.length() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for (int i = 0; i < jsonArray.length(); i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    JSONObject j = jsonArray.getJSONObject(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    Patient member = (Patient) j.get("member"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    json.remove("toUser"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    json.put("toUser", member.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    json.remove("first"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        json.put("first", weiXinOpenIdUtils.getTitleMes(patient, j.isNull("relation") ? 1 : j.getInt("relation"), patient.getName())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (StringUtils.isNotBlank(member.getOpenid())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        pushMsgTask.putWxMsg(getAccessToken(), 9, member.getOpenid(), patient.getName(), json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |