Browse Source

Merge branch 'feat-customervisit-211117' into master

Qutong 3 years ago
parent
commit
1de18e367c
15 changed files with 472 additions and 58 deletions
  1. 21 0
      db/v2.0/1118.sql
  2. 19 5
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java
  3. 11 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaPharmacyController.java
  4. 8 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmDaPharmacyMapper.java
  5. 14 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDaPharmacyService.java
  6. 1 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/ReportExportServiceImpl.java
  7. 105 33
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaPharmacyServiceImpl.java
  8. 3 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmReportServiceImpl.java
  9. 1 1
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskContentServiceImpl.java
  10. 3 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskServiceImpl.java
  11. 19 12
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignServiceImpl.java
  12. 5 2
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaDistributionMapper.xml
  13. 5 2
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaHospitalMapper.xml
  14. 11 1
      hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaPharmacyMapper.xml
  15. 246 0
      hnqz-upms/hnqz-upms-biz/src/test/java/com/qunzhixinxi/hnqz/admin/WmTaskTypeServiceTest.java

+ 21 - 0
db/v2.0/1118.sql

@@ -0,0 +1,21 @@
+-- 新增药店拜访任务类型
+INSERT INTO `wm_task_type`(`id`, `task_type_name`, `task_type_level`, `task_score_start`, `task_score_end`, `score`,
+                           `task_ent_id`, `durgent_id`, `level1_id`, `dept_id`, `del_flag`, `enable_flag`, `tenant_id`,
+                           `create_time`, `create_user`, `update_time`, `update_user`, `status`, `base_id`, `real_flag`,
+                           `rule_id`, `parent_id`)
+VALUES ('33', '药店拜访', '1', '0', '500', '300', NULL, NULL, NULL, NULL, '0', '0', '1', '2021-11-18 15:26:21', NULL, NULL,
+        NULL, '0', '药店拜访', NULL, '1', 'p-2');
+
+-- 新增药店拜访任务内容字段配置
+INSERT INTO `wm_task_content_config`(`base_type_id`, `task_type_id`, `task_filed_key`, `task_filed_value`, `seq`,
+                                     `task_filed_type`, `task_filed_minsize`, `task_filed_maxsize`, `task_filed_alert`,
+                                     `dict_url`, `dict_group_name`, `is_mustfill`, `dept_id`, `del_flag`, `enable_flag`,
+                                     `tenant_id`, `create_time`, `create_user`, `update_time`, `update_user`)
+VALUES ('2', '33', 'temp1', '横坐标', NULL, 'zuobiao', '1', '20', '', '', '', '1', NULL, '0', '0', '1',
+        '2021-11-18 22:35:24', NULL, NULL, NULL);
+INSERT INTO `wm_task_content_config`(`base_type_id`, `task_type_id`, `task_filed_key`, `task_filed_value`, `seq`,
+                                     `task_filed_type`, `task_filed_minsize`, `task_filed_maxsize`, `task_filed_alert`,
+                                     `dict_url`, `dict_group_name`, `is_mustfill`, `dept_id`, `del_flag`, `enable_flag`,
+                                     `tenant_id`, `create_time`, `create_user`, `update_time`, `update_user`)
+VALUES ('2', '33', 'temp2', '纵坐标', NULL, 'zuobiao', '5', '20', '', '', '', '1', NULL, '0', '0', '1',
+        '2021-11-18 22:35:27', NULL, NULL, NULL);

+ 19 - 5
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/ApiController.java

@@ -2724,11 +2724,7 @@ public class ApiController {
 	public R getPointSignInfo(String longitude, String latitude) {
 		List<Map<String, Object>> mapList = new ArrayList<>();
 
-		LambdaQueryWrapper<WmDaHospital> lambdaQueryWrapper = Wrappers.lambdaQuery();
-		lambdaQueryWrapper.isNotNull(WmDaHospital::getLatitude);
-		lambdaQueryWrapper.eq(WmDaHospital::getDelFlag, "0");
-		lambdaQueryWrapper.eq(WmDaHospital::getEnableFlag, "0");
-
+		// 医院
 		WmDaHospital qWmDaHospital = new WmDaHospital();
 		qWmDaHospital.setLongitude(longitude);
 		qWmDaHospital.setLatitude(latitude);
@@ -2746,6 +2742,7 @@ public class ApiController {
 			}
 		}
 
+		// 商业公司
 		WmDaDistribution qwmDaDistribution = new WmDaDistribution();
 		qwmDaDistribution.setLatitude(latitude);
 		qwmDaDistribution.setLongitude(longitude);
@@ -2764,6 +2761,23 @@ public class ApiController {
 			}
 		}
 
+		// 药店
+		WmDaPharmacy qWmDaPharmacy = new WmDaPharmacy();
+		qWmDaPharmacy.setLatitude(latitude);
+		qWmDaPharmacy.setLongitude(longitude);
+		List<WmDaPharmacy> pharmacyList = wmDaPharmacyService.listByPoint(qWmDaPharmacy);
+		if (CollectionUtil.isNotEmpty(pharmacyList)) {
+			pharmacyList.forEach(wmDaPharmacy -> {
+				Map<String, Object> map = new HashMap<>();
+				map.put("signEntId", wmDaPharmacy.getId());
+				map.put("signEntName", wmDaPharmacy.getPharmacyName());
+				map.put("longitude", wmDaPharmacy.getLongitude());
+				map.put("latitude", wmDaPharmacy.getLatitude());
+				map.put("signEntType", "3");
+				mapList.add(map);
+			});
+		}
+
 		return R.ok(mapList);
 	}
 

+ 11 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/WmDaPharmacyController.java

@@ -26,7 +26,6 @@ import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.admin.service.WmDaPharmacyService;
-import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -218,6 +217,17 @@ public class WmDaPharmacyController {
 		return R.ok();
 	}
 
+	/**
+	 * 批量转换经纬度
+	 *
+	 * @return
+	 */
+	@GetMapping("/parseAddress")
+	public R<?> parseAddress() {
+		wmDaPharmacyService.parseAddress();
+		return R.ok();
+	}
+
 	/**
 	 * 调查信息审核--药企
 	 *

+ 8 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/WmDaPharmacyMapper.java

@@ -20,6 +20,7 @@ package com.qunzhixinxi.hnqz.admin.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -34,6 +35,12 @@ public interface WmDaPharmacyMapper extends BaseMapper<WmDaPharmacy> {
 
 	List<WmDaPharmacy> slectByParam(String pharmacyName);
 
-
+	/**
+	 * 根据经纬度查询
+	 *
+	 * @param wmDaPharmacy
+	 * @return
+	 */
+	List<WmDaPharmacy> listByPoint(@Param("query") WmDaPharmacy wmDaPharmacy);
 
 }

+ 14 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/WmDaPharmacyService.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -34,4 +35,17 @@ public interface WmDaPharmacyService extends IService<WmDaPharmacy> {
     R approvalPharmacy(String taskId);
 
 	R updateByapproval(Map<String, String> map);
+
+	/**
+	 * 根据经纬度查询
+	 *
+	 * @param wmDaPharmacy
+	 * @return
+	 */
+	List<WmDaPharmacy> listByPoint(WmDaPharmacy wmDaPharmacy);
+
+	/**
+	 * 批量转换经纬度
+	 */
+	void parseAddress();
 }

+ 1 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/ReportExportServiceImpl.java

@@ -1006,6 +1006,7 @@ public class ReportExportServiceImpl implements ReportExportService {
 			integerList.add(17 + "");
 			integerList.add(18 + "");
 			integerList.add(31 + "");
+			integerList.add(33 + "");
 
 			Integer num = 1;
 			for (WmTask wmTask1 : wmTaskList) {

+ 105 - 33
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmDaPharmacyServiceImpl.java

@@ -16,7 +16,9 @@
  */
 package com.qunzhixinxi.hnqz.admin.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.csp.sentinel.util.StringUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
@@ -30,6 +32,7 @@ import com.qunzhixinxi.hnqz.admin.service.WmDaPharmacyService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageService;
 import com.qunzhixinxi.hnqz.admin.service.WmScorePackageStatusService;
 import com.qunzhixinxi.hnqz.admin.service.WmTaskService;
+import com.qunzhixinxi.hnqz.admin.util.MapUtil;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.security.util.SecurityUtils;
 import lombok.AllArgsConstructor;
@@ -73,17 +76,36 @@ public class WmDaPharmacyServiceImpl extends ServiceImpl<WmDaPharmacyMapper, WmD
 		if(null==wmTaskContent){
 			return R.failed("调研信息为空");
 		}
-		//Temp3对应药店名称
-		//有药店名称,获取药店信息
-//		List<WmDaPharmacy> wdplist=wmDaPharmacyMapper.slectByParam(wmTaskContent.getTemp3());
+		// 根据省市区+详情地址+药店名称查询药店
 		WmDaPharmacy query = new WmDaPharmacy();
+		// 省市区
+		if (StringUtil.isNotBlank(wmTaskContent.getTemp7())) {
+			String[] citys = wmTaskContent.getTemp7().split("-");
+			if (citys.length == 3) {
+				query.setProvince(citys[0]);
+				query.setCity(citys[1]);
+				query.setArea(citys[2]);
+			} else {
+				String[] citys1 = wmTaskContent.getTemp7().split(",");
+				if (citys1.length == 3) {
+					query.setProvince(citys1[0]);
+					query.setCity(citys1[1]);
+					query.setArea(citys1[2]);
+				} else {
+					throw new RuntimeException("查询药店数据异常");
+				}
+			}
+		}
+		// 详细地址
+		query.setAddress(wmTaskContent.getTemp4());
+		// 药店名称
 		query.setPharmacyName(wmTaskContent.getTemp3());
 		query.setDelFlag("0");
-		List<WmDaPharmacy> wdplist=wmDaPharmacyMapper.selectList(Wrappers.query(query));
-		if(null!=wdplist&&wdplist.size()>0){
-			wmDaPharmacy=wdplist.get(0);
+		List<WmDaPharmacy> wdplist = wmDaPharmacyMapper.selectList(Wrappers.query(query));
+		if(CollectionUtil.isNotEmpty(wdplist)) {
+			wmDaPharmacy = wdplist.get(0);
 			wmTask.setCompareResult("2");//信息不一致
-		}else {
+		} else {
 			wmTask.setCompareResult("1");//新增
 		}
 		Map<String,Object> result = new HashMap();
@@ -154,36 +176,40 @@ public class WmDaPharmacyServiceImpl extends ServiceImpl<WmDaPharmacyMapper, WmD
 				}
 				wmDaPharmacy.setCreateTime(now);
 				wmDaPharmacy.setCreateUser(userId);
+				// 根据地址转换经纬度
+				this.convertToLatAndLong(wmDaPharmacy);
 				this.save(wmDaPharmacy);
 			}else if("2".equals(compareResult)){//信息不一致
 				//对比药店和调研信息,只有所属地区不一样
-				List<WmDaPharmacy> wdplist=wmDaPharmacyMapper.slectByParam(wmTaskContent.getTemp3());
-				if(null!=wdplist&&wdplist.size()>0){
-					wmDaPharmacy=wdplist.get(0);
-				}
-				String address=wmDaPharmacy.getProvince()+"-"+wmDaPharmacy.getCity()+"-"+wmDaPharmacy.getArea();
-				if(null!=wmTaskContent.getTemp7()&&!wmTaskContent.getTemp7().equals(address)){
-					String[] citys=wmTaskContent.getTemp7().split("-");
-					if(citys.length==3){
-						wmDaPharmacy.setProvince(citys[0]);
-						wmDaPharmacy.setCity(citys[1]);
-						wmDaPharmacy.setArea(citys[2]);
-					}else {
-						String[] citys1=wmTaskContent.getTemp7().split(",");
-						if(citys1.length==3) {
-							wmDaPharmacy.setProvince(citys1[0]);
-							wmDaPharmacy.setCity(citys1[1]);
-							wmDaPharmacy.setArea(citys1[2]);
-						}
-					}
-				}
-				wmDaPharmacy.setId(map.get("infoId"));
-				wmDaPharmacy.setPharmacyName(wmTaskContent.getTemp3());//名称
-				wmDaPharmacy.setAddress(wmTaskContent.getTemp4());
-				wmDaPharmacy.setUpdateTime(now);
-				wmDaPharmacy.setUpdateUser(userId);
+//				List<WmDaPharmacy> wdplist=wmDaPharmacyMapper.slectByParam(wmTaskContent.getTemp3());
+//				if(null!=wdplist&&wdplist.size()>0){
+//					wmDaPharmacy=wdplist.get(0);
+//				}
+//				String address=wmDaPharmacy.getProvince()+"-"+wmDaPharmacy.getCity()+"-"+wmDaPharmacy.getArea();
+//				if(null!=wmTaskContent.getTemp7()&&!wmTaskContent.getTemp7().equals(address)){
+//					String[] citys=wmTaskContent.getTemp7().split("-");
+//					if(citys.length==3){
+//						wmDaPharmacy.setProvince(citys[0]);
+//						wmDaPharmacy.setCity(citys[1]);
+//						wmDaPharmacy.setArea(citys[2]);
+//					}else {
+//						String[] citys1=wmTaskContent.getTemp7().split(",");
+//						if(citys1.length==3) {
+//							wmDaPharmacy.setProvince(citys1[0]);
+//							wmDaPharmacy.setCity(citys1[1]);
+//							wmDaPharmacy.setArea(citys1[2]);
+//						}
+//					}
+//				}
+//				wmDaPharmacy.setId(map.get("infoId"));
+//				wmDaPharmacy.setPharmacyName(wmTaskContent.getTemp3());//名称
+//				wmDaPharmacy.setAddress(wmTaskContent.getTemp4());
+//				wmDaPharmacy.setUpdateTime(now);
+//				wmDaPharmacy.setUpdateUser(userId);
+				// 根据地址转换经纬度
+//				this.convertToLatAndLong(wmDaPharmacy);
 				//更新药店信息;
-				this.updateById(wmDaPharmacy);
+//				this.updateById(wmDaPharmacy);
 			}
 
 		}else{
@@ -235,5 +261,51 @@ public class WmDaPharmacyServiceImpl extends ServiceImpl<WmDaPharmacyMapper, WmD
 		return R.ok();
 	}
 
+	/**
+	 * 根据经纬度查询
+	 *
+	 * @param wmDaPharmacy
+	 * @return
+	 */
+	@Override
+	public List<WmDaPharmacy> listByPoint(WmDaPharmacy wmDaPharmacy) {
+		return wmDaPharmacyMapper.listByPoint(wmDaPharmacy);
+	}
+
+	/**
+	 * 批量转换经纬度
+	 */
+	@Override
+	public void parseAddress() {
+		List<WmDaPharmacy> list = this.list(Wrappers.<WmDaPharmacy>lambdaQuery().isNull(WmDaPharmacy::getLatitude));
+		if (CollectionUtil.isNotEmpty(list)) {
+			list.forEach(wmDaPharmacy -> {
+				this.convertToLatAndLong(wmDaPharmacy);
+				this.saveOrUpdate(wmDaPharmacy);
+			});
+		}
+	}
+
+	/**
+	 * 根据地址转换经纬度
+	 *
+	 * @param wmDaPharmacy
+	 */
+	private void convertToLatAndLong(WmDaPharmacy wmDaPharmacy) {
+		String fullAddress = wmDaPharmacy.getProvince() + wmDaPharmacy.getCity() + wmDaPharmacy.getArea()
+				+ wmDaPharmacy.getAddress();
+		JSONObject jsonObject = MapUtil.getLatAndLogByName(fullAddress);
+		if (jsonObject != null) {
+			wmDaPharmacy.setProvince(jsonObject.getString("province"));
+			wmDaPharmacy.setCity(jsonObject.getString("city"));
+			wmDaPharmacy.setArea(jsonObject.getString("district"));
+			String location = jsonObject.getString("location");
+			if (null != location && location.split(",").length > 0) {
+				wmDaPharmacy.setLongitude(location.split(",")[0]);
+				wmDaPharmacy.setLatitude(location.split(",")[1]);
+			}
+		}
+	}
+
 
 }

+ 3 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmReportServiceImpl.java

@@ -30,6 +30,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
 import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageStatus;
@@ -249,7 +250,9 @@ public class WmReportServiceImpl extends ServiceImpl<WmReportMapper, WmReport> i
 				} else if ("18".equals(task.getTaskTypeId())) {
 					Map<String, Object> data = (Map<String, Object>) wmDaPharmacyService.approvalPharmacy(task.getId()).getData();
 					WmTask _wmTask = (WmTask) data.get("_wmTask");
+					WmDaPharmacy info = (WmDaPharmacy) data.get("info");
 					Map<String, String> paramMap = MapUtil.newHashMap(4);
+					paramMap.put("infoId", info.getId());
 					paramMap.put("approvalInfo", approvalInfo);
 					paramMap.put("approvalOpinion", approvalOpinion);
 					paramMap.put("compareResult", _wmTask.getCompareResult());

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskContentServiceImpl.java

@@ -524,7 +524,7 @@ public class WmTaskContentServiceImpl extends ServiceImpl<WmTaskContentMapper, W
 					return R.failed("任务保存失败");
 				}
 				//保存打卡记录
-				if ("5".equals(wmTaskContent.getTemp30()) || "6".equals(wmTaskContent.getTemp30())) {
+				if ("5".equals(wmTaskContent.getTemp30()) || "6".equals(wmTaskContent.getTemp30()) || "33".equals(wmTaskContent.getTemp30())) {
 					WmUserSign wmUserSign = new WmUserSign();
 					wmUserSign.setSignEntType(wmTaskContent.getTemp29());
 					wmUserSign.setSignEntName(wmTaskContent.getTemp7());

+ 3 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmTaskServiceImpl.java

@@ -37,6 +37,7 @@ import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.entity.MonitoringIndicator;
 import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaPharmacy;
 import com.qunzhixinxi.hnqz.admin.entity.WmReport;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackage;
 import com.qunzhixinxi.hnqz.admin.entity.WmScorePackageSettleNote;
@@ -1488,7 +1489,9 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 				} else if ("18".equals(task.getTaskTypeId())) {
 					Map<String, Object> data = (Map<String, Object>) wmDaPharmacyService.approvalPharmacy(task.getId()).getData();
 					WmTask _wmTask = (WmTask) data.get("_wmTask");
+					WmDaPharmacy info = (WmDaPharmacy) data.get("info");
 					Map<String, String> paramMap = MapUtil.newHashMap(4);
+					paramMap.put("infoId", info.getId());
 					paramMap.put("approvalInfo", wmTask.getTaskStatusInfo());
 					paramMap.put("approvalOpinion", approvalOpinion);
 					paramMap.put("compareResult", _wmTask.getCompareResult());

+ 19 - 12
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/WmUserSignServiceImpl.java

@@ -100,16 +100,18 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 			}
 		}
 
-		WmUserSign singQuery = new WmUserSign();
-		singQuery.setSignUserid(wmUserSign.getSignUserid());
-		singQuery.setSignEntName(wmUserSign.getSignEntName());
-//		singQuery.setSignDate(LocalDateTime.now().minus(4, ChronoUnit.HOURS));
-		int total = this.count(Wrappers.query(singQuery).lambda()
-		.gt(WmUserSign::getSignDate,LocalDateTime.now().minus(4, ChronoUnit.HOURS)));
-
-		if(total != 0){
-			log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(),wmUserSign.getSignEntName());
-			return R.failed("客户拜访任务,登录人不符");
+		// 一个用户,在同一打卡地点,4小时内只能打卡一次
+		int total = this.count(Wrappers.<WmUserSign>lambdaQuery()
+				.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
+				.eq(WmUserSign::getSignEntId, wmUserSign.getSignEntId())
+				.gt(WmUserSign::getSignDate, LocalDateTime.now().minus(4, ChronoUnit.HOURS)));
+		// 一个用户,半小时内只能打卡一次
+		int halfHourTotal = this.count(Wrappers.<WmUserSign>lambdaQuery()
+				.eq(WmUserSign::getSignUserid, wmUserSign.getSignUserid())
+				.gt(WmUserSign::getSignDate, LocalDateTime.now().minus(30, ChronoUnit.MINUTES)));
+		if (total != 0 || halfHourTotal != 0) {
+			log.warn("打卡间隔过短:{} {}", wmUserSign.getSignUserid(), wmUserSign.getSignEntName());
+			return R.failed("打卡间隔过短");
 		}
 
 		/**
@@ -140,8 +142,10 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 			wmTask.setTaskUserId(sysU.getUserId() + "");    //任务提交人
 			if ("1".equals(wmUserSign.getSignEntType())) {
 				wmTask.setTaskTypeId("5");                           //任务类型
-			} else {
+			} else if ("2".equals(wmUserSign.getSignEntType())) {
 				wmTask.setTaskTypeId("6");                           //任务类型
+			} else if ("3".equals(wmUserSign.getSignEntType())) {
+				wmTask.setTaskTypeId("33");
 			}
 			wmTask.setSubmitStatus("0");
 			LocalDateTime localDateTime = LocalDateTime.now();
@@ -158,9 +162,12 @@ public class WmUserSignServiceImpl extends ServiceImpl<WmUserSignMapper, WmUserS
 			if ("1".equals(wmUserSign.getSignEntType())) {
 				WmTaskType wmTaskType1 = wmTaskTypeService.getById(5);
 				wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
-			} else {
+			} else if ("2".equals(wmUserSign.getSignEntType())) {
 				WmTaskType wmTaskType1 = wmTaskTypeService.getById(6);
 				wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
+			} else if ("3".equals(wmUserSign.getSignEntType())) {
+				WmTaskType wmTaskType1 = wmTaskTypeService.getById(33);
+				wmTaskType.setTaskTypeName(wmTaskType1.getTaskTypeName());
 			}
 
 			wmTaskType.setRuleId(tWmScorePackage.getRuleId());

+ 5 - 2
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaDistributionMapper.xml

@@ -63,12 +63,15 @@
 		<result property="medicineTraceabilityOther" column="medicine_traceability_other"/>
 	</resultMap>
 
+	<!-- 根据经纬度获取指定范围内数据 -->
 	<select  id="listByPoint" resultMap="wmDaDistributionMap">
 		SELECT
 		s.*,
-		(st_distance (point (s.longitude, s.latitude),point(#{query.longitude},#{query.latitude}) ) / 0.0111) AS distance
+		(st_distance (point (s.longitude, s.latitude),point(#{query.longitude},#{query.latitude})) / 0.0111) AS distance
 		FROM wm_da_distribution s
 		where s.longitude is not null and s.latitude is not null and s.del_flag=0 and s.enable_flag=0
-		ORDER BY distance asc limit 10
+	  	AND (st_distance (point (s.longitude, s.latitude),point(#{query.longitude},#{query.latitude})) / 0.0111)
+			&lt;= (SELECT value from sys_dict_item WHERE type='point_jwd' limit 1) / 1000
+		ORDER BY distance asc
 	</select>
 </mapper>

+ 5 - 2
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaHospitalMapper.xml

@@ -60,12 +60,15 @@
                         <result property="updateUser" column="update_user"/>
             </resultMap>
 
+	<!-- 根据经纬度获取指定范围内数据 -->
 	<select  id="listByPoint" resultMap="wmDaHospitalMap">
 		SELECT
 		s.*,
-		(st_distance (point (s.longitude, s.latitude),point(#{query.longitude},#{query.latitude}) ) / 0.0111) AS distance
+		(st_distance (point (s.longitude, s.latitude),point(#{query.longitude},#{query.latitude})) / 0.0111) AS distance
 		FROM wm_da_hospital s
 		where s.longitude is not null and s.latitude is not null and s.del_flag=0 and s.enable_flag=0
-		ORDER BY distance asc limit 10
+	  	AND (st_distance (point (s.longitude, s.latitude),point(#{query.longitude},#{query.latitude})) / 0.0111)
+			&lt;= (SELECT value from sys_dict_item WHERE type='point_jwd' limit 1) / 1000
+		ORDER BY distance asc
 	</select>
 </mapper>

+ 11 - 1
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/WmDaPharmacyMapper.xml

@@ -49,7 +49,17 @@
 		<if test="pharmacyName != null and pharmacyName != ''">
 			AND wm_da_pharmacy.pharmacy_name= #{pharmacyName}
 		</if>
+	</select>
 
-
+	<!-- 根据经纬度获取指定范围内数据 -->
+	<select  id="listByPoint" resultMap="wmDaPharmacyMap">
+		SELECT
+			p.*,
+			(st_distance (point (p.longitude, p.latitude),point(#{query.longitude},#{query.latitude})) / 0.0111) AS distance
+		FROM wm_da_pharmacy p
+		where p.longitude is not null and p.latitude is not null and p.del_flag=0 and p.enable_flag=0
+		AND (st_distance (point (p.longitude, p.latitude), point(#{query.longitude},#{query.latitude})) / 0.0111)
+		        &lt;= (SELECT value from sys_dict_item WHERE type='point_jwd' limit 1) / 1000
+		ORDER BY distance asc
 	</select>
 </mapper>

+ 246 - 0
hnqz-upms/hnqz-upms-biz/src/test/java/com/qunzhixinxi/hnqz/admin/WmTaskTypeServiceTest.java

@@ -0,0 +1,246 @@
+package com.qunzhixinxi.hnqz.admin;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysDept;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaAgent;
+import com.qunzhixinxi.hnqz.admin.entity.WmDaDrugEnt;
+import com.qunzhixinxi.hnqz.admin.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
+import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
+import com.qunzhixinxi.hnqz.admin.mapper.SysDeptMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmDaAgentMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmDaDrugEntMapper;
+import com.qunzhixinxi.hnqz.admin.mapper.WmTaskTypeMapper;
+import lombok.AllArgsConstructor;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author lixuesong
+ * @date 2021年11月22日 18:55
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest(classes = {HnqzAdminApplication.class, Test.class})
+public class WmTaskTypeServiceTest {
+
+	@Autowired
+	private WmTaskTypeMapper wmTaskTypeMapper;
+
+	@Autowired
+	private SysDeptMapper sysDeptMapper;
+
+	@Autowired
+	private WmDaDrugEntMapper wmDaDrugEntMapper;
+
+	@Autowired
+	private WmDaAgentMapper wmDaAgentMapper;
+
+	/**
+	 * 批量补充新增的任务类型33-药店拜访
+	 */
+	@Test
+	public void test() {
+		WmTaskType wmTaskTypeQ = new WmTaskType();
+//		wmTaskTypeQ.setTaskTypeLevel("1");
+//		wmTaskTypeQ.setStatus("0");
+//		wmTaskTypeQ.setDelFlag("0");
+		wmTaskTypeQ.setId("33");
+		List<WmTaskType> tempList = wmTaskTypeMapper.selectList(Wrappers.query(wmTaskTypeQ));
+
+		// 1.第一级是药企的情况
+		List<SysDept> deptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
+				.eq(SysDept::getLevel, 2));
+
+		// 遍历药企
+		for (SysDept dept : deptList) {
+			// 生成药企任务类型
+			WmDaDrugEnt wmDaDrugEnt = wmDaDrugEntMapper.selectOne(Wrappers.<WmDaDrugEnt>lambdaQuery()
+					.eq(WmDaDrugEnt::getDeptId, dept.getDeptId())
+					.eq(WmDaDrugEnt::getEnableFlag, EnableEnum.ENABLE.val())
+					.eq(WmDaDrugEnt::getDelFlag, DelEnum.NOT_DEL.val()));
+			if (wmDaDrugEnt == null) {
+				continue;
+			}
+			for (WmTaskType wmTaskType1 : tempList) {
+				WmTaskType newOne = BeanUtil.copyProperties(wmTaskType1, WmTaskType.class);
+				newOne.setCreateTime(null);
+				newOne.setId(null);
+				newOne.setDurgentId(wmDaDrugEnt.getId());
+				newOne.setTaskTypeLevel("2");
+				newOne.setTaskEntId(wmDaDrugEnt.getId());
+				newOne.setDeptId(wmDaDrugEnt.getDeptId());
+				newOne.setStatus("0");
+				newOne.setBaseId(wmTaskType1.getId());
+				newOne.setRuleId(wmDaDrugEnt.getId());
+				newOne.setParentId(wmTaskType1.getParentId());
+				List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.lambdaQuery(newOne));
+				if (CollectionUtil.isEmpty(taskTypeList)) {
+					newOne.setCreateTime(LocalDateTime.now());
+					wmTaskTypeMapper.insert(newOne);
+				}
+			}
+
+			// 查询一级CSO
+			List<SysDept> oneCSODeptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
+					.eq(SysDept::getParentId, dept.getDeptId())
+					.eq(SysDept::getDelFlag, DelEnum.NOT_DEL.val())
+					.eq(SysDept::getLevel, 3));
+			for (SysDept oneCSODept : oneCSODeptList) {
+				// 生成药企给一级CSO的任务类型
+				WmDaAgent wmDaAgent = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
+						.eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.val())
+						.eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
+						.eq(WmDaAgent::getDeptId, oneCSODept.getDeptId()));
+				if (wmDaAgent == null) {
+					continue;
+				}
+				for (WmTaskType wmTaskType1 : tempList) {
+					WmTaskType newOne = BeanUtil.copyProperties(wmTaskType1, WmTaskType.class);
+					newOne.setCreateTime(null);
+					newOne.setId(null);
+					newOne.setLevel1Id(wmDaAgent.getId());
+					newOne.setDurgentId(wmDaDrugEnt.getId());
+					newOne.setTaskTypeLevel("2");
+					newOne.setRuleId(wmDaDrugEnt.getId() + wmDaAgent.getId());
+					newOne.setTaskEntId(wmDaAgent.getId());
+					newOne.setDeptId(wmDaAgent.getDeptId());
+					newOne.setStatus("0");
+					newOne.setBaseId(wmTaskType1.getId());
+					List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.lambdaQuery(newOne));
+					if (CollectionUtil.isEmpty(taskTypeList)) {
+						newOne.setCreateTime(LocalDateTime.now());
+						wmTaskTypeMapper.insert(newOne);
+					}
+				}
+				// 生成一级CSO的任务类型
+				for (WmTaskType wmTaskType2 : tempList) {
+					WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
+					newOne.setCreateTime(null);
+					newOne.setId(null);
+					newOne.setLevel1Id(wmDaAgent.getId());
+					newOne.setTaskTypeLevel("2");
+					newOne.setTaskEntId(wmDaAgent.getId());
+					newOne.setRuleId(wmDaAgent.getId());
+					newOne.setDeptId(wmDaAgent.getDeptId());
+					newOne.setStatus("0");
+					newOne.setBaseId(wmTaskType2.getId());
+					List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.lambdaQuery(newOne));
+					if (CollectionUtil.isEmpty(taskTypeList)) {
+						newOne.setCreateTime(LocalDateTime.now());
+						wmTaskTypeMapper.insert(newOne);
+					}
+				}
+
+				// 查询二级CSO
+				List<SysDept> twoCSODeptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
+						.eq(SysDept::getParentId, oneCSODept.getDeptId())
+						.eq(SysDept::getDelFlag, DelEnum.NOT_DEL.val())
+						.eq(SysDept::getLevel, 4));
+				for (SysDept twoCSODept : twoCSODeptList) {
+					// 生成二级CSO任务类型
+					WmDaAgent wmDaAgent2 = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
+							.eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.val())
+							.eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
+							.eq(WmDaAgent::getDeptId, twoCSODept.getDeptId()));
+					if (wmDaAgent2 == null) {
+						continue;
+					}
+					for (WmTaskType wmTaskType2 : tempList) {
+						WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
+						newOne.setCreateTime(null);
+						newOne.setId(null);
+						newOne.setLevel1Id(wmDaAgent2.getId());
+						newOne.setTaskTypeLevel("2");
+						newOne.setTaskEntId(wmDaAgent2.getId());
+						newOne.setRuleId(wmDaAgent2.getId());
+						newOne.setDeptId(wmDaAgent2.getDeptId());
+						newOne.setStatus("0");
+						newOne.setBaseId(wmTaskType2.getId());
+						List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.lambdaQuery(newOne));
+						if (CollectionUtil.isEmpty(taskTypeList)) {
+							newOne.setCreateTime(LocalDateTime.now());
+							wmTaskTypeMapper.insert(newOne);
+						}
+					}
+				}
+
+			}
+
+		}
+
+		// 2.第一级是CSO的情况
+		List<SysDept> deptList2 = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
+				.eq(SysDept::getLevel, 3)
+				.isNull(SysDept::getParentId));
+		// 查询一级CSO
+		for (SysDept oneCSODept : deptList2) {
+			// 生成药企给一级CSO的任务类型
+			WmDaAgent wmDaAgent = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
+					.eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.val())
+					.eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
+					.eq(WmDaAgent::getDeptId, oneCSODept.getDeptId()));
+			if (wmDaAgent == null) {
+				continue;
+			}
+			// 生成一级CSO的任务类型
+			for (WmTaskType wmTaskType2 : tempList) {
+				WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
+				newOne.setCreateTime(null);
+				newOne.setId(null);
+				newOne.setLevel1Id(wmDaAgent.getId());
+				newOne.setTaskTypeLevel("2");
+				newOne.setTaskEntId(wmDaAgent.getId());
+				newOne.setRuleId(wmDaAgent.getId());
+				newOne.setDeptId(wmDaAgent.getDeptId());
+				newOne.setStatus("0");
+				newOne.setBaseId(wmTaskType2.getId());
+				List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.lambdaQuery(newOne));
+				if (CollectionUtil.isEmpty(taskTypeList)) {
+					newOne.setCreateTime(LocalDateTime.now());
+					wmTaskTypeMapper.insert(newOne);
+				}
+			}
+
+			// 查询二级CSO
+			List<SysDept> twoCSODeptList = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery()
+					.eq(SysDept::getParentId, oneCSODept.getDeptId())
+					.eq(SysDept::getDelFlag, DelEnum.NOT_DEL.val())
+					.eq(SysDept::getLevel, 4));
+			for (SysDept twoCSODept : twoCSODeptList) {
+				// 生成二级CSO任务类型
+				WmDaAgent wmDaAgent2 = wmDaAgentMapper.selectOne(Wrappers.<WmDaAgent>lambdaQuery()
+						.eq(WmDaAgent::getDelFlag, DelEnum.NOT_DEL.val())
+						.eq(WmDaAgent::getEnableFlag, EnableEnum.ENABLE.val())
+						.eq(WmDaAgent::getDeptId, twoCSODept.getDeptId()));
+				if (wmDaAgent2 == null) {
+					continue;
+				}
+				for (WmTaskType wmTaskType2 : tempList) {
+					WmTaskType newOne = BeanUtil.copyProperties(wmTaskType2, WmTaskType.class);
+					newOne.setCreateTime(null);
+					newOne.setId(null);
+					newOne.setLevel1Id(wmDaAgent2.getId());
+					newOne.setTaskTypeLevel("2");
+					newOne.setTaskEntId(wmDaAgent2.getId());
+					newOne.setRuleId(wmDaAgent2.getId());
+					newOne.setDeptId(wmDaAgent2.getDeptId());
+					newOne.setStatus("0");
+					newOne.setBaseId(wmTaskType2.getId());
+					List<WmTaskType> taskTypeList = wmTaskTypeMapper.selectList(Wrappers.lambdaQuery(newOne));
+					if (CollectionUtil.isEmpty(taskTypeList)) {
+						newOne.setCreateTime(LocalDateTime.now());
+						wmTaskTypeMapper.insert(newOne);
+					}
+				}
+			}
+		}
+	}
+}