瀏覽代碼

Merge remote-tracking branch 'origin/dev' into dev

lazhaoqian 3 年之前
父節點
當前提交
15b19a4188

+ 11 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/constant/WxConstant.java

@@ -0,0 +1,11 @@
+package org.springblade.land.constant;
+
+public interface WxConstant {
+
+	String LAND_CACHE = "blade:land";
+
+	String WECHAT_TOKEN = "wechat:token:";
+
+	String REQ_SUCCESS = "0";
+
+}

+ 43 - 3
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/NcpCheck.java

@@ -27,7 +27,6 @@ import org.springblade.client.entity.CommonFile;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
 
@@ -61,19 +60,60 @@ public class NcpCheck implements Serializable {
 	@ApiModelProperty(value = "手机号")
 	private String tel;
 	/**
+	 * 箱号一
+	 */
+	@ApiModelProperty(value = "箱号一")
+	private String ctnOne;
+	/**
+	 * 箱号二
+	 */
+	@ApiModelProperty(value = "箱号二")
+	private String ctnTwo;
+	/**
 	 * 租户
 	 */
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 	/**
-	 * 时间
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建时间
 	 */
-	@ApiModelProperty(value = "时间")
+	@ApiModelProperty(value = "创建时间")
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	/**
+	 * 是否已删除(0-否、1-是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0-否、1-是)")
+	private Integer isDeleted;
 
 	@TableField(exist = false)
 	private List<CommonFile> fileList;
 
+	@TableField(exist = false)
+	private String beginCrateTime;
+
+	@TableField(exist = false)
+	private String endCrateTime;
+
+	@TableField(exist = false)
+	private String code;
+
 }

+ 4 - 0
blade-service/blade-land/pom.xml

@@ -43,6 +43,10 @@
         </dependency>
         <dependency>
             <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-http</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
             <artifactId>blade-core-boot</artifactId>
         </dependency>
 

+ 24 - 12
blade-service/blade-land/src/main/java/org/springblade/land/controller/NcpCheckController.java

@@ -16,26 +16,25 @@
  */
 package org.springblade.land.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CommonFile;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.land.entity.NcpCheck;
 import org.springblade.land.service.INcpCheckService;
 import org.springblade.land.vo.NcpCheckVO;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 陆运疫情审查表 控制器
@@ -69,13 +68,7 @@ public class NcpCheckController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入ncpCheck")
 	public R<IPage<NcpCheck>> list(NcpCheck ncpCheck, Query query) {
-		LambdaQueryWrapper<NcpCheck> wrapper = new LambdaQueryWrapper<>();
-		wrapper.like(StringUtil.isNotBlank(ncpCheck.getPlateNo()), NcpCheck::getPlateNo, ncpCheck.getPlateNo())
-			.like(StringUtil.isNotBlank(ncpCheck.getTel()), NcpCheck::getTel, ncpCheck.getTel())
-			.eq(NcpCheck::getTenantId, AuthUtil.getTenantId())
-			.orderByDesc(NcpCheck::getCreateTime);
-		IPage<NcpCheck> pages = ncpCheckService.page(Condition.getPage(query), wrapper);
-		return R.data(pages);
+		return R.data(ncpCheckService.getList(ncpCheck, query));
 	}
 
 	/**
@@ -119,7 +112,6 @@ public class NcpCheckController extends BladeController {
 		return R.status(ncpCheckService.saveOrUpdate(ncpCheck));
 	}
 
-
 	/**
 	 * 删除 陆运疫情审查表
 	 */
@@ -127,7 +119,27 @@ public class NcpCheckController extends BladeController {
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(ncpCheckService.removeByIds(Func.toLongList(ids)));
+		return R.status(ncpCheckService.removeNcpCheck(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 获取手机号
+	 */
+	@PostMapping("/phone")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "获取手机号", notes = "传入ncpCheck")
+	public R phone(@RequestBody NcpCheck ncpCheck) {
+		return R.data(ncpCheckService.phone(ncpCheck));
+	}
+
+	/**
+	 * 附件上传
+	 */
+	@PostMapping("/file")
+	@ApiOperationSupport(order = 15)
+	@ApiOperation(value = "附件上传", notes = "传入fileList")
+	public R file(@RequestBody List<CommonFile> fileList) {
+		return R.status(ncpCheckService.file(fileList));
 	}
 
 	/**

+ 4 - 10
blade-service/blade-land/src/main/java/org/springblade/land/handler/JobHandler.java → blade-service/blade-land/src/main/java/org/springblade/land/handler/LocateJobHandler.java

@@ -26,7 +26,7 @@ import java.util.concurrent.*;
 
 @Component
 @AllArgsConstructor
-public class JobHandler {
+public class LocateJobHandler {
 
 	private final IOrderItemService orderItemService;
 
@@ -64,7 +64,7 @@ public class JobHandler {
 			);
 
 			for (OrderItem item : itemList) {
-				Future<String> result = pool.submit(() -> {
+				pool.execute(() -> {
 					// 业务处理
 					try {
 						String data = getData(json, token, item.getPlateNo());
@@ -82,21 +82,15 @@ public class JobHandler {
 							track.setCreateTime(new Date());
 							orderTrackService.save(track);
 						}
-						return null;
 					} catch (Exception e) {
 						XxlJobLogger.log(e);
-						return e.getMessage();
 					}
 				});
-
-				if (!StringUtil.isEmpty(result.get())) {
-					return new ReturnT<>(ReturnT.FAIL_CODE, result.get());
-				}
 			}
-			return new ReturnT<>("获取数据成功");
+			return ReturnT.SUCCESS;
 		} catch (Exception e) {
 			XxlJobLogger.log(e);
-			return new ReturnT<>(ReturnT.FAIL_CODE, e.getMessage());
+			return ReturnT.FAIL;
 		} finally {
 			pool.shutdown();
 		}

+ 68 - 0
blade-service/blade-land/src/main/java/org/springblade/land/handler/WxJobHandler.java

@@ -0,0 +1,68 @@
+package org.springblade.land.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import lombok.AllArgsConstructor;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.http.HttpRequest;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.land.constant.WxConstant;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.concurrent.*;
+
+@Component
+@AllArgsConstructor
+public class WxJobHandler {
+
+	@XxlJob("weChatJobHandler")
+	public ReturnT<String> wxJobHandler(String param) throws Exception {
+		// 创建线程池
+		ExecutorService pool = new ThreadPoolExecutor(5, 200, 0L,
+			TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024),
+			Executors.defaultThreadFactory(),
+			new ThreadPoolExecutor.AbortPolicy());
+
+		try {
+			List<JSONObject> wxList = JSON.parseArray(param, JSONObject.class);
+			for (JSONObject wx : wxList) {
+				pool.execute(() -> {
+					try {
+						String tenantId = wx.getString("tenantId");
+						String appId = wx.getString("appId");
+						String secret = wx.getString("secret");
+
+						String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret;
+						String token = HttpRequest.get(url)
+							.execute()
+							.onSuccess(responseSpec -> {
+								String value = responseSpec.asString();
+								XxlJobLogger.log(value);
+								JSONObject result = JSON.parseObject(value);
+								String errCode = result.getString("errcode");
+								if (StringUtil.isNotBlank(errCode) && !WxConstant.REQ_SUCCESS.equals(errCode)) {
+									throw new RuntimeException("获取token失败:" + result.getString("errmsg"));
+								}
+								return result.getString("access_token");
+							});
+
+						CacheUtil.put(WxConstant.LAND_CACHE, WxConstant.WECHAT_TOKEN, tenantId, token);
+					} catch (Exception e) {
+						XxlJobLogger.log(e);
+					}
+				});
+			}
+			return ReturnT.SUCCESS;
+		} catch (Exception e) {
+			XxlJobLogger.log(e);
+			return ReturnT.FAIL;
+		} finally {
+			pool.shutdown();
+		}
+	}
+
+}

+ 36 - 2
blade-service/blade-land/src/main/java/org/springblade/land/service/INcpCheckService.java

@@ -16,11 +16,12 @@
  */
 package org.springblade.land.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.client.entity.CommonFile;
+import org.springblade.core.mp.support.Query;
 import org.springblade.land.entity.NcpCheck;
 import org.springblade.land.vo.NcpCheckVO;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.util.List;
 
@@ -42,6 +43,15 @@ public interface INcpCheckService extends IService<NcpCheck> {
 	IPage<NcpCheckVO> selectNcpCheckPage(IPage<NcpCheckVO> page, NcpCheckVO ncpCheck);
 
 	/**
+	 * 列表 分页
+	 *
+	 * @param ncpCheck
+	 * @param query
+	 * @return
+	 */
+	IPage<NcpCheck> getList(NcpCheck ncpCheck, Query query);
+
+	/**
 	 * 保存
 	 *
 	 * @param ncpCheck
@@ -50,6 +60,30 @@ public interface INcpCheckService extends IService<NcpCheck> {
 	boolean saveNcpCheck(NcpCheck ncpCheck);
 
 	/**
+	 * 删除
+	 *
+	 * @param idList
+	 * @return
+	 */
+	boolean removeNcpCheck(List<Long> idList);
+
+	/**
+	 * 获取手机号
+	 *
+	 * @param ncpCheck
+	 * @return
+	 */
+	String phone(NcpCheck ncpCheck);
+
+	/**
+	 * 附件上传
+	 *
+	 * @param fileList
+	 * @return
+	 */
+	boolean file(List<CommonFile> fileList);
+
+	/**
 	 * 附件列表
 	 *
 	 * @param id

+ 82 - 7
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/NcpCheckServiceImpl.java

@@ -16,21 +16,29 @@
  */
 package org.springblade.land.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
-import org.springblade.client.constant.LandConstant;
 import org.springblade.client.entity.CommonFile;
 import org.springblade.client.feign.ICommonFileClient;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.http.HttpRequest;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.land.constant.WxConstant;
 import org.springblade.land.entity.NcpCheck;
-import org.springblade.land.vo.NcpCheckVO;
 import org.springblade.land.mapper.NcpCheckMapper;
 import org.springblade.land.service.INcpCheckService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.land.vo.NcpCheckVO;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.Collections;
 import java.util.Date;
@@ -54,9 +62,28 @@ public class NcpCheckServiceImpl extends ServiceImpl<NcpCheckMapper, NcpCheck> i
 	}
 
 	@Override
+	public IPage<NcpCheck> getList(NcpCheck ncpCheck, Query query) {
+		LambdaQueryWrapper<NcpCheck> wrapper = new LambdaQueryWrapper<>();
+		wrapper.like(StringUtil.isNotBlank(ncpCheck.getPlateNo()), NcpCheck::getPlateNo, ncpCheck.getPlateNo())
+			.like(StringUtil.isNotBlank(ncpCheck.getTel()), NcpCheck::getTel, ncpCheck.getTel())
+			.between(StringUtil.isNotBlank(ncpCheck.getBeginCrateTime()) && StringUtil.isNotBlank(ncpCheck.getEndCrateTime()), NcpCheck::getCreateTime, ncpCheck.getBeginCrateTime(), ncpCheck.getEndCrateTime())
+			.eq(NcpCheck::getTenantId, AuthUtil.getTenantId())
+			.orderByDesc(NcpCheck::getCreateTime);
+		return baseMapper.selectPage(Condition.getPage(query), wrapper);
+	}
+
+	@Override
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public boolean saveNcpCheck(NcpCheck ncpCheck) {
-		ncpCheck.setCreateTime(new Date());
-		baseMapper.insert(ncpCheck);
+		if (ObjectUtil.isEmpty(ncpCheck.getId())) {
+			ncpCheck.setCreateUser(AuthUtil.getUserId());
+			ncpCheck.setCreateTime(new Date());
+			baseMapper.insert(ncpCheck);
+		} else {
+			ncpCheck.setUpdateUser(AuthUtil.getUserId());
+			ncpCheck.setUpdateTime(new Date());
+			baseMapper.updateById(ncpCheck);
+		}
 
 		List<CommonFile> fileList = ncpCheck.getFileList();
 		fileList.forEach(file -> {
@@ -70,6 +97,54 @@ public class NcpCheckServiceImpl extends ServiceImpl<NcpCheckMapper, NcpCheck> i
 	}
 
 	@Override
+	public boolean removeNcpCheck(List<Long> idList) {
+		idList.forEach(id -> {
+			NcpCheck ncpCheck = new NcpCheck();
+			ncpCheck.setId(id);
+			ncpCheck.setIsDeleted(1);
+			baseMapper.updateById(ncpCheck);
+		});
+		return true;
+	}
+
+	@Override
+	public String phone(NcpCheck ncpCheck) {
+		String token = CacheUtil.get(WxConstant.LAND_CACHE, WxConstant.WECHAT_TOKEN, ncpCheck.getTenantId(), String.class);
+		if (StringUtil.isBlank(token)) {
+			throw new RuntimeException("获取请求token失败");
+		}
+
+		JSONObject json = new JSONObject();
+		json.put("code", ncpCheck.getCode());
+
+		return HttpRequest.post("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + token)
+			.bodyString(json.toJSONString())
+			.execute()
+			.onSuccess(responseSpec -> {
+				JSONObject result = JSON.parseObject(responseSpec.asString());
+				String errCode = result.getString("errcode");
+				if (StringUtil.isNotBlank(errCode) && !WxConstant.REQ_SUCCESS.equals(errCode)) {
+					throw new RuntimeException(result.getString("errmsg"));
+				}
+
+				JSONObject phoneInfo = result.getJSONObject("phone_info");
+				return phoneInfo.getString("purePhoneNumber");
+			});
+	}
+
+	@Override
+	@GlobalTransactional(rollbackFor = Exception.class)
+	public boolean file(List<CommonFile> fileList) {
+		fileList.forEach(file -> {
+			if (ObjectUtil.isEmpty(file.getId())) {
+				file.setSource("LAND_NCP_CHECK");
+			}
+		});
+		commonFileClient.saveList(fileList);
+		return true;
+	}
+
+	@Override
 	public List<CommonFile> fileList(Long id) {
 		R<List<CommonFile>> fileList = commonFileClient.getList(id, "LAND_NCP_CHECK");
 		if (fileList.isSuccess() && fileList.getData() != null) {

+ 12 - 0
blade-service/blade-land/src/main/resources/application.yml

@@ -1,3 +1,15 @@
 #服务器端口
 server:
   port: 9955
+
+xxl:
+  job:
+    accessToken: ''
+    admin:
+      addresses: http://127.0.0.1:10031/xxl-job-admin
+    executor:
+      appname: blade-land
+      ip: 127.0.0.1
+      logpath: applogs/xxl-job/jobhandler
+      logretentiondays: -1
+      port: 10032