|  | @ -1,20 +1,45 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.base.endpoint.patient;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.alibaba.fastjson.JSON;
 | 
	
		
			
				|  |  | import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  | import com.alibaba.fastjson.serializer.SerializerFeature;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.dao.servicePackage.ServicePackageRecordDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.dao.servicePackage.ServicePackageSignRecordDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.dao.sign.ArchiveDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.dao.team.BaseTeamDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.dao.team.WlyyPatientLabelDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.base.util.ConstantUtils;
 | 
	
		
			
				|  |  | import com.yihu.jw.doctor.dao.BaseDoctorDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.patient.BasePatientDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.servicePackage.ServicePackageRecordDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.base.team.BaseTeamDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.care.archive.ArchiveDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.care.device.DeviceDetail;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.care.label.WlyyPatientLabelDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.patient.dao.BasePatientDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.patient.service.BasePatientService;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.base.patient.BasePatientVO;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.web.*;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
 | 
	
		
			
				|  |  | import com.yihu.jw.rm.base.BaseRequestMapping;
 | 
	
		
			
				|  |  | import com.yihu.utils.date.DateUtil;
 | 
	
		
			
				|  |  | import com.yihu.utils.security.MD5;
 | 
	
		
			
				|  |  | import io.swagger.annotations.Api;
 | 
	
		
			
				|  |  | import io.swagger.annotations.ApiOperation;
 | 
	
		
			
				|  |  | import io.swagger.annotations.ApiParam;
 | 
	
		
			
				|  |  | import jxl.Sheet;
 | 
	
		
			
				|  |  | import jxl.Workbook;
 | 
	
		
			
				|  |  | import org.apache.commons.lang.StringUtils;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.web.bind.annotation.*;
 | 
	
		
			
				|  |  | import org.springframework.web.multipart.MultipartFile;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  | import java.io.InputStream;
 | 
	
		
			
				|  |  | import java.text.SimpleDateFormat;
 | 
	
		
			
				|  |  | import java.util.*;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * 居民信息控制器
 | 
	
	
		
			
				|  | @ -33,6 +58,20 @@ public class BasePatientEndpoint extends EnvelopRestEndpoint {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BasePatientService basePatientService;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BasePatientDao basePatientDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ServicePackageSignRecordDao servicePackageSignRecordDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BaseDoctorDao baseDoctorDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BaseTeamDao baseTeamDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ServicePackageRecordDao servicePackageRecordDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ArchiveDao archiveDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private WlyyPatientLabelDao patientLabelDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @PostMapping(value = BaseRequestMapping.BasePatient.CREATE)
 | 
	
		
			
				|  |  |     @ApiOperation(value = "创建")
 | 
	
	
		
			
				|  | @ -175,4 +214,208 @@ public class BasePatientEndpoint extends EnvelopRestEndpoint {
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return success(msg);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      *   如果添加失败,注释MultipartConfig配置
 | 
	
		
			
				|  |  |      *   如果导入失败,将Excel修改为97-2003版本.xls
 | 
	
		
			
				|  |  |      *   签约服务包id固定
 | 
	
		
			
				|  |  |      *   签约日期 开始时间为当前时间,结束时间为2023-12-31 23:59:59
 | 
	
		
			
				|  |  |      *   patientLabelDO.setLabelType("1");  居民标签类型 固定为能力完好
 | 
	
		
			
				|  |  |      *   patientLabelDO.setLabelCode("0");  居民标签类型 固定为能力完好
 | 
	
		
			
				|  |  |      *   姓名	性别	年龄	身份证号	      联系方式	   小区	            地址	                 签约团队	        能力类型
 | 
	
		
			
				|  |  |      * 沈xxx	女	    88	330103xxxxxxxx0720	1525xxxx711	朝晖九区	朝晖九区10幢4单元103	    虹园/稻香园服务团队	    能力完好
 | 
	
		
			
				|  |  |      * 沈xxx	女	    86	330103xxxxxxxx0720	1525xxxx711	朝晖九区	朝晖九区天盛居4幢1202室	  大木桥服务团队	    能力完好
 | 
	
		
			
				|  |  |      * @param request
 | 
	
		
			
				|  |  |      * @param file
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     @RequestMapping(value = "/importPatientFromExcel", produces = "application/json;charset=UTF-8",method = RequestMethod.POST)
 | 
	
		
			
				|  |  |     @ResponseBody
 | 
	
		
			
				|  |  |     public ObjEnvelop importPatientFromExcel(HttpServletRequest request, @ApiParam(value = "文件", required = true)
 | 
	
		
			
				|  |  |     @RequestParam(value = "file", required = true) MultipartFile file) {
 | 
	
		
			
				|  |  |         Calendar c1 = Calendar.getInstance();
 | 
	
		
			
				|  |  |         /**
 | 
	
		
			
				|  |  |          * c1  签约结束时间
 | 
	
		
			
				|  |  |          */
 | 
	
		
			
				|  |  |         c1.set(2023, 12 - 1, 31,23,59,59);
 | 
	
		
			
				|  |  |         List errorLs = new ArrayList<>();
 | 
	
		
			
				|  |  |         List correctLs = new ArrayList<>();
 | 
	
		
			
				|  |  |         List idcardList = new ArrayList<>();
 | 
	
		
			
				|  |  |         Map<String, String> errorMsgMap = new HashMap<>();
 | 
	
		
			
				|  |  |         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  |         List<String> deviceCodes = new ArrayList<>();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             request.setCharacterEncoding("UTF-8");
 | 
	
		
			
				|  |  |             InputStream inputStream = file.getInputStream();
 | 
	
		
			
				|  |  |             Workbook rwb = Workbook.getWorkbook(inputStream);
 | 
	
		
			
				|  |  |             Sheet[] sheets = rwb.getSheets();
 | 
	
		
			
				|  |  |             int rows;
 | 
	
		
			
				|  |  |             int row;
 | 
	
		
			
				|  |  |             String name=null;//用户姓名
 | 
	
		
			
				|  |  |             String sex; //性别
 | 
	
		
			
				|  |  |             String age; //年龄
 | 
	
		
			
				|  |  |             String idcard;  //身份证号
 | 
	
		
			
				|  |  |             String mobile;  //联系方式
 | 
	
		
			
				|  |  |             String residentialArea; //居住小区
 | 
	
		
			
				|  |  |             String address; //居住地址
 | 
	
		
			
				|  |  |             String signTeam; //签约团队
 | 
	
		
			
				|  |  |             String label; //能力类型
 | 
	
		
			
				|  |  |             Sheet sheet = sheets[0];    //第一张表
 | 
	
		
			
				|  |  |             rows = sheet.getRows();
 | 
	
		
			
				|  |  |             for (int j = 1; j < rows; j++) {
 | 
	
		
			
				|  |  |                 if (sheet.getRow(j).length == 0) {
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 BasePatientDO basePatientVO = new BasePatientDO();
 | 
	
		
			
				|  |  |                 JSONObject infoMap = new JSONObject();
 | 
	
		
			
				|  |  |                 row = j;
 | 
	
		
			
				|  |  |                 name = sheet.getCell(0, row).getContents().trim();    //0 用户姓名
 | 
	
		
			
				|  |  |                 sex = sheet.getCell(1, row).getContents().trim();  //1 性别
 | 
	
		
			
				|  |  |                 age = sheet.getCell(2, row).getContents().trim();   //2 年龄
 | 
	
		
			
				|  |  |                 idcard = sheet.getCell(3, row).getContents().trim(); //3 身份证号
 | 
	
		
			
				|  |  |                 mobile = sheet.getCell(4, row).getContents().trim();  //4 联系方式
 | 
	
		
			
				|  |  |                 residentialArea = sheet.getCell(5, row).getContents().trim(); //5 居住小区
 | 
	
		
			
				|  |  |                 address = sheet.getCell(6, row).getContents().trim(); //6 居住地址
 | 
	
		
			
				|  |  |                 signTeam = sheet.getCell(7, row).getContents().trim();; //签约团队
 | 
	
		
			
				|  |  |                 label = sheet.getCell(8, row).getContents().trim();; //能力类型
 | 
	
		
			
				|  |  |                 if (StringUtils.isBlank(idcard)){
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 if (StringUtils.isBlank(name)){
 | 
	
		
			
				|  |  |                     errorMsgMap.put(idcard,"姓名不能为空");
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 if (basePatientService.findByIdCard(idcard)){
 | 
	
		
			
				|  |  |                     errorMsgMap.put(idcard,"身份证号重复");
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 if (StringUtils.isBlank(sex)){
 | 
	
		
			
				|  |  |                     sex = "3";
 | 
	
		
			
				|  |  |                 } else {
 | 
	
		
			
				|  |  |                     if (sex.equals("男")) {
 | 
	
		
			
				|  |  |                         sex = "1";
 | 
	
		
			
				|  |  |                     } else {
 | 
	
		
			
				|  |  |                         sex = "2";
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 if (StringUtils.isBlank(signTeam)){
 | 
	
		
			
				|  |  |                     errorMsgMap.put(idcard,"签约团队不能为空");
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 if (StringUtils.isBlank(label)){
 | 
	
		
			
				|  |  |                     errorMsgMap.put(idcard,"能力类型不能为空");
 | 
	
		
			
				|  |  |                     continue;
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 basePatientVO.setAddress(address);
 | 
	
		
			
				|  |  |                 basePatientVO.setDel("1");
 | 
	
		
			
				|  |  |                 basePatientVO.setEnabled(1);
 | 
	
		
			
				|  |  |                 basePatientVO.setIdcard(idcard);
 | 
	
		
			
				|  |  |                 basePatientVO.setSex(new Integer(sex));
 | 
	
		
			
				|  |  |                 basePatientVO.setName(name);
 | 
	
		
			
				|  |  |                 basePatientVO.setMobile(mobile);
 | 
	
		
			
				|  |  |                 basePatientVO.setArchiveStatus(3);
 | 
	
		
			
				|  |  |                 basePatientVO.setArchiveType(1); //默认添加老人
 | 
	
		
			
				|  |  |                 String pw = idcard.substring(idcard.length()-6);
 | 
	
		
			
				|  |  |                 String salt = UUID.randomUUID().toString().substring(0,5);
 | 
	
		
			
				|  |  |                 basePatientVO.setPassword(MD5.md5Hex(pw + "{" + salt + "}"));
 | 
	
		
			
				|  |  |                 basePatientVO.setSalt(salt);
 | 
	
		
			
				|  |  |                 basePatientVO.setResidentialArea(residentialArea);
 | 
	
		
			
				|  |  |                 infoMap.put("idcard",idcard);
 | 
	
		
			
				|  |  |                 infoMap.put("signTeam",signTeam);
 | 
	
		
			
				|  |  |                 infoMap.put("label",label);
 | 
	
		
			
				|  |  |                 correctLs.add(basePatientVO);
 | 
	
		
			
				|  |  |                 idcardList.add(infoMap);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             basePatientDao.save(correctLs);
 | 
	
		
			
				|  |  |             String patient= "";
 | 
	
		
			
				|  |  |             /**
 | 
	
		
			
				|  |  |              * 添加签约数据
 | 
	
		
			
				|  |  |              */
 | 
	
		
			
				|  |  |             if (idcardList.size() > 0) {
 | 
	
		
			
				|  |  |                 for (int i=0;i<idcardList.size();i++) {
 | 
	
		
			
				|  |  |                     ServicePackageSignRecordDO signRecordDO = new ServicePackageSignRecordDO();
 | 
	
		
			
				|  |  |                     BasePatientDO basePatientVO = new BasePatientDO();
 | 
	
		
			
				|  |  |                     try {
 | 
	
		
			
				|  |  |                         idcard = retOne(idcardList.get(i).toString(),"idcard").toString();
 | 
	
		
			
				|  |  |                         signTeam = retOne(idcardList.get(i).toString(),"signTeam").toString();
 | 
	
		
			
				|  |  |                         label = retOne(idcardList.get(i).toString(),"label").toString();
 | 
	
		
			
				|  |  |                         basePatientVO = basePatientDao.findByIdcardAndDel(idcard,"1");
 | 
	
		
			
				|  |  |                         if (basePatientVO == null) {
 | 
	
		
			
				|  |  |                             errorMsgMap.put(idcard,"居民信息获取失败");
 | 
	
		
			
				|  |  |                             continue;
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         patient = basePatientVO.getId();
 | 
	
		
			
				|  |  |                         name = basePatientVO.getName();
 | 
	
		
			
				|  |  |                         signRecordDO.setPatient(patient);
 | 
	
		
			
				|  |  |                         signRecordDO.setName(name);
 | 
	
		
			
				|  |  |                         signRecordDO.setStatus(1);
 | 
	
		
			
				|  |  |                         signRecordDO.setStartTime(new Date());
 | 
	
		
			
				|  |  |                         signRecordDO.setEndTime(c1.getTime());
 | 
	
		
			
				|  |  |                         BaseTeamDO teamDO = baseTeamDao.findByName(signTeam);
 | 
	
		
			
				|  |  |                         if (teamDO == null) {
 | 
	
		
			
				|  |  |                             errorMsgMap.put(idcard,"团队信息获取失败");
 | 
	
		
			
				|  |  |                             continue;
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         BaseDoctorDO doctorDO = baseDoctorDao.findById(teamDO.getLeaderCode());
 | 
	
		
			
				|  |  |                         if (doctorDO == null) {
 | 
	
		
			
				|  |  |                             errorMsgMap.put(idcard,"医生信息获取失败");
 | 
	
		
			
				|  |  |                             continue;
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         signRecordDO.setSignDoctor(doctorDO.getId());
 | 
	
		
			
				|  |  |                         signRecordDO.setSignDoctorName(doctorDO.getName());
 | 
	
		
			
				|  |  |                         signRecordDO = servicePackageSignRecordDao.save(signRecordDO);
 | 
	
		
			
				|  |  |                         ServicePackageRecordDO packageRecordDO = new ServicePackageRecordDO();
 | 
	
		
			
				|  |  |                         packageRecordDO.setSignId(signRecordDO.getId());
 | 
	
		
			
				|  |  |                         packageRecordDO.setServicePackageId("8a92aba97b48824a017b56c5ee710019");
 | 
	
		
			
				|  |  |                         packageRecordDO.setPatient(patient);
 | 
	
		
			
				|  |  |                         packageRecordDO.setCreateTime(new Date());
 | 
	
		
			
				|  |  |                         packageRecordDO.setTeamCode(teamDO.getId());
 | 
	
		
			
				|  |  |                         servicePackageRecordDao.save(packageRecordDO);
 | 
	
		
			
				|  |  |                         //建档状态
 | 
	
		
			
				|  |  |                         ArchiveDO archiveDO = new ArchiveDO();
 | 
	
		
			
				|  |  |                         archiveDO.setCreateTime(new Date());
 | 
	
		
			
				|  |  |                         archiveDO.setArchiveOperatorName(doctorDO.getName());
 | 
	
		
			
				|  |  |                         archiveDO.setDoctorCode(doctorDO.getId());
 | 
	
		
			
				|  |  |                         archiveDO.setPatient(patient);
 | 
	
		
			
				|  |  |                         archiveDO.setSickName(name);
 | 
	
		
			
				|  |  |                         archiveDO.setIdcard(idcard);
 | 
	
		
			
				|  |  |                         archiveDO.setSignStatus(1);
 | 
	
		
			
				|  |  |                         archiveDao.save(archiveDO);
 | 
	
		
			
				|  |  |                         //居民标签
 | 
	
		
			
				|  |  |                         WlyyPatientLabelDO patientLabelDO = new WlyyPatientLabelDO();
 | 
	
		
			
				|  |  |                         patientLabelDO.setCzrq(new Date());
 | 
	
		
			
				|  |  |                         patientLabelDO.setLabelType("1");
 | 
	
		
			
				|  |  |                         patientLabelDO.setPatient(patient);
 | 
	
		
			
				|  |  |                         patientLabelDO.setLabelCode("0");
 | 
	
		
			
				|  |  |                         patientLabelDO.setLabelName(label);
 | 
	
		
			
				|  |  |                         patientLabelDao.save(patientLabelDO);
 | 
	
		
			
				|  |  |                         basePatientVO.setSignStatus(1);
 | 
	
		
			
				|  |  |                         basePatientDao.save(basePatientVO);
 | 
	
		
			
				|  |  |                     } catch (Exception e) {
 | 
	
		
			
				|  |  |                         e.printStackTrace();
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             //包装导入结果(导入成功数量、错误对象集合)
 | 
	
		
			
				|  |  |             Map<String, Object> map = new HashMap<>();
 | 
	
		
			
				|  |  |             map.put("successNum", correctLs.size());
 | 
	
		
			
				|  |  |             map.put("failedNum", rows-1 - correctLs.size() );
 | 
	
		
			
				|  |  |             map.put("errorData", JSON.toJSONString(errorMsgMap, SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |             System.out.println(map);
 | 
	
		
			
				|  |  |             return ObjEnvelop.getSuccess("获取成功",map);
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |             return failedObjEnvelopException(e);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public Object retOne(String str,String name){
 | 
	
		
			
				|  |  |         JSONObject object = JSONObject.parseObject(str);
 | 
	
		
			
				|  |  |         return object.get(""+name+"");
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |