Browse Source

8.3 修改订单流程 + 接入阿里云短信通知

Mechrevo 1 year ago
parent
commit
1154972bc1

+ 3 - 0
sp-core/sp-base/pom.xml

@@ -28,6 +28,8 @@
         </dependency>
 		<!-- ================= 模块依赖 end ================= -->
 
+
+
         <!-- 阿里云短信服务 -->
         <dependency>
             <groupId>com.aliyun</groupId>
@@ -40,6 +42,7 @@
             <version>2.1.0</version>
         </dependency>
 
+
         <!--人脸识别 阿里云 新版-->
         <dependency>
             <groupId>com.aliyun</groupId>

+ 109 - 0
sp-core/sp-base/src/main/java/com/pj/aliyun/sms/AliyunSmsService.java

@@ -0,0 +1,109 @@
+package com.pj.aliyun.sms;
+
+import com.alibaba.druid.support.json.JSONUtils;
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.profile.DefaultProfile;
+import com.aliyuncs.profile.IClientProfile;
+import com.pj.common.core.utils.StringUtils;
+import com.pj.common.core.web.domain.AjaxResult;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created on 17/6/7.
+ * 短信API产品的DEMO程序,工程中包含了一个SmsDemo类,直接通过
+ * 执行main函数即可体验短信产品API功能(只需要将AK替换成开通了云通信-短信产品功能的AK即可)
+ * 工程依赖了2个jar包(存放在工程的libs目录下)
+ * 1:aliyun-java-sdk-core.jar
+ * 2:aliyun-java-sdk-dysmsapi.jar
+ * <p>
+ * 备注:Demo工程编码采用UTF-8
+ * 国际短信发送请勿参照此DEMO
+ */
+public class AliyunSmsService {
+
+    //产品名称:云通信短信API产品,开发者无需替换
+    static final String product = "Dysmsapi";
+    //产品域名,开发者无需替换
+    static final String domain = "dysmsapi.aliyuncs.com";
+
+    // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
+    static final String accessKeyId = "LTAI5t6cteYYRcJm8TdTZU8d";
+    static final String accessKeySecret = "nSED2HsrZbyhQM3ifGZmH0ruNaadLu";
+
+    /**
+     * @param phone        手机号
+     * @param SignName     短信签名
+     * @param TemplateCode 短信模板
+     * @param Param        模板内容
+     * @return
+     * @throws ClientException
+     */
+    public static boolean sendSms(String phone, String SignName, String TemplateCode, String Param) {
+
+        //可自助调整超时时间
+        SendSmsResponse response = null;
+        try {
+            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
+            System.setProperty("sun.net.client.defaultReadTimeout", "10000");
+
+            //初始化acsClient,暂不支持region化
+            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
+            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
+            IAcsClient acsClient = new DefaultAcsClient(profile);
+
+            //组装请求对象-具体描述见控制台-文档部分内容
+            SendSmsRequest request = new SendSmsRequest();
+            //必填:待发送手机号
+            request.setPhoneNumbers(phone);
+            //必填:短信签名-可在短信控制台中找到
+            request.setSignName(SignName);
+            //必填:短信模板-可在短信控制台中找到
+            request.setTemplateCode(TemplateCode);
+            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
+            request.setTemplateParam(Param);
+
+            //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
+            //request.setSmsUpExtendCode("90997");
+
+            //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
+            //request.setOutId("yourOutId");
+            //hint 此处可能会抛出异常,注意catch
+            response = acsClient.getAcsResponse(request);
+            System.out.println("发送短信:"+response.getMessage());
+        } catch (ClientException e) {
+            e.printStackTrace();
+            return false;
+        }
+        if (response.getCode() != null && response.getCode().equals("OK")) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 测试发送
+     * @param args
+     */
+    public static void main(String[] args) {
+        Map<String,Integer> param = new HashMap<>();
+        param.put("code", 10086);
+        boolean result = sendSms("18934859524", "一天实验室服务", "SMS_257813081", JSONUtils.toJSONString(param));
+        if (result) {
+//            redisCache.setCacheObject(CacheConstants.APP_CODE_KEY + user.getPhone(), code, 5, TimeUnit.MINUTES);
+            System.out.println("发送成功");
+        }
+    }
+
+}

+ 56 - 0
sp-core/sp-base/src/main/java/com/pj/common/core/utils/DateUtil.java

@@ -0,0 +1,56 @@
+package com.pj.common.core.utils;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+import java.text.DateFormat;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+/**
+ * @Author Mechrevo
+ * @Date 2023 08 03 10 51
+ **/
+
+public class DateUtil {
+
+        public static ThreadLocal<DateFormat> chinaDateSDF = new ThreadLocal<DateFormat>() {
+
+            @Override
+            protected DateFormat initialValue() {
+                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
+                return df;
+
+            }
+        };
+
+        /**
+         * 获取日期yyyy-MM-dd格式字符串
+         *
+         * @param date
+         * @param locale
+         * @return
+         */
+        public static String dateToStr(Date date, Locale locale) {
+            if (locale == null) {
+
+            }
+            return chinaDateSDF.get().format(date);
+        }
+
+        /**
+         * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
+         *
+         * @param strDate
+         * @return
+         */
+        public static Date strToDateLong(String strDate) {
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            ParsePosition pos = new ParsePosition(0);
+            Date strtodate = formatter.parse(strDate, pos);
+            return strtodate;
+        }
+
+
+}

+ 7 - 4
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/MethodGoodsTransitService.java

@@ -1,6 +1,8 @@
 package com.pj.tb_goods_transit;
 
+import com.alibaba.druid.support.json.JSONUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.pj.aliyun.sms.AliyunSmsService;
 import com.pj.current.dto.APPLoginUserInfo;
 import com.pj.enummj.*;
 import com.pj.tb_goods_transit.retry.SmsRetryService;
@@ -8,6 +10,7 @@ import com.pj.tb_order.TbOrder;
 import com.pj.tb_order.TbOrderMapper;
 import com.pj.tb_people.TbPeople;
 import com.pj.tb_people.TbPeopleMapper;
+import com.pj.utils.cache.RedisUtil;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
@@ -17,9 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -51,7 +52,9 @@ public class MethodGoodsTransitService {
      * 给边民组组员发送短信通知
      */
     public int sendSms(List<TbPeople> peopleIdList) {
-
+        Map<String,Object> param = new HashMap<>();
+        param.put("msg","您的组长已下单,请前往app进行确认!");
+//        AliyunSmsService.sendSms("18934859524", "边民互市","SMS_462415029",JSONUtils.toJSONString(param));
         //获取当前电脑核心数
         int processors = Runtime.getRuntime().availableProcessors() / 2;
         //创建固定线程

+ 41 - 28
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransitService.java

@@ -8,15 +8,20 @@ import java.util.Date;
 import java.util.List;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.druid.support.json.JSONUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.pj.aliyun.sms.AliyunSmsService;
 import com.pj.current.dto.APPLoginUserInfo;
 import com.pj.current.satoken.StpAPPUserUtil;
 import com.pj.enummj.*;
+import com.pj.tb_enterprise.TbEnterprise;
+import com.pj.tb_enterprise.TbEnterpriseMapper;
 import com.pj.tb_goods.TbGoods;
 import com.pj.tb_goods.TbGoodsMapper;
 import com.pj.tb_goods_transit.param.JudgeTransitParam;
 import com.pj.tb_goods_transit.param.PurchaseLevelOneGoodsTransitParam;
 import com.pj.tb_goods_transit.param.TransactionGoodsParam;
+import com.pj.tb_goods_transit.retry.SmsRetryService;
 import com.pj.tb_group.TbGroup;
 import com.pj.tb_group.TbGroupMapper;
 import com.pj.tb_order.TbOrder;
@@ -58,7 +63,7 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 	@Autowired
 	private TbGoodsMapper tbGoodsMapper;
 	@Autowired
-	private TbGroupMapper tbGroupMapper;
+	private SmsRetryService smsRetryService;
 	/** 互市区mapper */
 	@Autowired
 	private TbTradeAreaMapper tbTradeAreaMapper;
@@ -69,6 +74,9 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 	@Autowired
 	private TbPeopleMapper tbPeopleMapper;
 
+	@Autowired
+	private TbEnterpriseMapper tbEnterpriseMapper;
+
 	/** 增 */
 	void add(TbGoodsTransit t){
 		save(t);
@@ -206,7 +214,7 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 						tbGoodsTransit.getGoodsStatus() : goodsStatus);
 		//设置基本属性
 		tbGoodsTransit.setUpdateTime(new Date());
-		tbGoodsTransit.setUpdateBy(appLoginInfo.getLoginId() + "");
+		tbGoodsTransit.setUpdateBy(appLoginInfo.getLoginId().toString());
 		tbGoodsTransit.setUpdateName(appLoginInfo.getLoginName());
 		//执行保存
 		int updateById = tbGoodsTransitMapper.updateById(tbGoodsTransit);
@@ -242,40 +250,45 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 		//检查是否属于海关允许销售商品
 		String declareOdd = tbGoodsTransit.getDeclareOdd();
 		TbGoods tbGoods = tbGoodsMapper.selectById(declareOdd);
-		if(tbGoods == null)throw new RuntimeException("当前商品海关不允许销售!");
+		if(tbGoods == null)throw new RuntimeException("当前商品海关不允许销售!");
 		//执行采购,创建一级市场订单表 , 该方法只是设置tbOrder的属性
 		TbOrder tbOrder = methodGoodsTransitService.setTbOrderProperties(tbGoodsTransit, appLoginInfo);
 		//执行保存 创建订单
 		int insert = tbOrderMapper.insert(tbOrder);
 		if(insert == 1){
-			// todo: 执行订单完成后的逻辑
-			// todo: 发送短信给边民组通知其确认
-
-			//获取互市组ID
-			Long groupId = list.get(0).getGroupId();
-			if(groupId == null)throw new RuntimeException("订单异常,原因是没有关联的边民!");
-			//通过互市组ID查询所属边民的ID集合
-			List<TbPeople> tbPeopleList = tbPeopleMapper.selectList
-					(new LambdaQueryWrapper<TbPeople>()
-							.eq(TbPeople::getGroupId, groupId)
-							.eq(TbPeople::getIsLock, IsLock.IS_LOCK_ON.getCode())
-							.eq(TbPeople::getDeleteStatus, DeleteStatus.DELETE_STATUS_ON.getCode()));
-
-			if(tbPeopleList.size() == 0)throw new RuntimeException("订单异常,原因是没有关联的边民!!!");
-			int sendSmsCounts = methodGoodsTransitService.sendSms(tbPeopleList);
-			//边民全部确认,修改边民确认状态
-			if(sendSmsCounts == tbPeopleList.size()){
-//				tbOrder
-			}else {
-				//todo: 如果短信发送成功次数 与 边民数不一致处理
-
+			//将商品信息改成已被下单
+			tbGoodsTransit.setIsOrders(1);
+			int updateById = tbGoodsTransitMapper.updateById(tbGoodsTransit);
+			//执行给商家发送信息
+			if(updateById == 1){
+				//获取商家信息
+				TbEnterprise tbEnterprise = tbEnterpriseMapper.selectById(tbGoodsTransit.getMerchantId());
+				if(tbEnterprise == null)throw new RuntimeException("商家不存在!");
+				//todo: 线上时放开下面的参数
+				return smsRetryService.sendSmsMsg("","","","");
+//				("18934859524", "一天实验室服务", "SMS_257813081", JSONUtils.toJSONString("修改内容"));
 			}
-
-
 		}
-
-		return true;
+		throw new RuntimeException("订单预创建异常!");
 	}
+	/**
+	 * 	// todo: 执行订单完成后的逻辑
+	 * 			// todo: 发送短信给边民组通知其确认
+	 * 			//获取互市组ID
+	 * 			Long groupId = list.get(0).getGroupId();
+	 * 			if(groupId == null)throw new RuntimeException("订单异常,原因是没有关联的边民!");
+	 * 			//通过互市组ID查询所属边民的ID集合
+	 * 			List<TbPeople> tbPeopleList = tbPeopleMapper.selectList
+	 * 					(new LambdaQueryWrapper<TbPeople>()
+	 * 							.eq(TbPeople::getGroupId, groupId)
+	 * 							.eq(TbPeople::getIsLock, IsLock.IS_LOCK_ON.getCode())
+	 * 							.eq(TbPeople::getDeleteStatus, DeleteStatus.DELETE_STATUS_ON.getCode()));
+	 *
+	 * 			if(tbPeopleList.size() == 0)throw new RuntimeException("订单异常,原因是没有关联的边民!!!");
+	 * 			int sendSmsCounts = methodGoodsTransitService.sendSms(tbPeopleList);
+	 * 			return sendSmsCounts == tbPeopleList.size();
+	 */
+
 
 	/**
 	 * 导入

+ 29 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/retry/SmsRetryService.java

@@ -1,5 +1,7 @@
 package com.pj.tb_goods_transit.retry;
 
+import com.alibaba.druid.support.json.JSONUtils;
+import com.pj.aliyun.sms.AliyunSmsService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.retry.annotation.Backoff;
 import org.springframework.retry.annotation.Recover;
@@ -18,14 +20,41 @@ import java.util.logging.Logger;
 public class SmsRetryService {
 
 
+    /**
+     * 验证码短信
+     * @param phone
+     * @param code
+     * @return
+     * @throws Exception
+     */
     @Async
     @Retryable(value = Exception.class,maxAttempts = 3,backoff = @Backoff(delay = 2000,multiplier = 1.5))
     public boolean sendSms(String phone,String code) throws Exception {
         //模拟发送失败
         //todo: 发送短信业务逻辑
+
         throw new Exception("模拟短信发送失败!");
     }
 
+    /**
+     * 通知短信
+     * @param phone
+     * @param signName
+     * @param templateCode
+     * @param jsonString
+     * @return
+     * @throws Exception
+     */
+    @Async
+    @Retryable(value = Exception.class,maxAttempts = 3,backoff = @Backoff(delay = 2000,multiplier = 1.5))
+    public boolean sendSmsMsg(String phone,String signName,String templateCode,String jsonString) throws Exception {
+        System.out.println("\n发送商家通知短信!\n");
+        //todo: 发送短信业务逻辑
+        boolean result = AliyunSmsService.sendSms("18934859524", "Mechrevo", "SMS_462415029", null);
+        if(!result) throw new Exception("模拟短信发送失败!");
+        return true;
+    }
+
 
     //最终补偿机制
     @Recover

+ 79 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_order_people_confirm/TbOrderPeopleConfirm.java

@@ -0,0 +1,79 @@
+package com.pj.tb_order_people_confirm;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.EqualsAndHashCode;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * Model: tb_order_people_confirm -- 便民确认订单监听表
+ * @author yzs 
+ */
+@Data
+@Accessors(chain = true)
+@TableName(TbOrderPeopleConfirm.TABLE_NAME)
+@EqualsAndHashCode(callSuper = false)
+public class TbOrderPeopleConfirm extends Model<TbOrderPeopleConfirm> implements Serializable {
+
+	// ---------- 模块常量 ----------
+	/**
+	 * 序列化版本id 
+	 */
+	private static final long serialVersionUID = 1L;	
+	/**
+	 * 此模块对应的表名 
+	 */
+	public static final String TABLE_NAME = "tb_order_people_confirm";	
+	/**
+	 * 此模块对应的权限码 
+	 */
+	public static final String PERMISSION_CODE = "tb-order-people-confirm";
+	public static final String PERMISSION_CODE_ADD = "tb-order-people-confirm-add";
+	public static final String PERMISSION_CODE_EDIT = "tb-order-people-confirm-edit";
+	public static final String PERMISSION_CODE_DEL = "tb-order-people-confirm-del";
+
+
+
+
+	// ---------- 表中字段 ----------
+	/**
+	 * 便民确认监听表主键ID 
+	 */
+	@TableId(type = IdType.AUTO)
+	private Integer id;	
+
+	/**
+	 * 一级订单表主键ID 
+	 */
+	private Long orderId;	
+
+	/**
+	 * 一级市场边民ID 
+	 */
+	private Long peopleId;	
+
+	/**
+	 * 组ID 
+	 */
+	private Long groupId;	
+
+	/**
+	 * 边民确认时间 
+	 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+
+
+
+
+	
+
+
+}

+ 87 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_order_people_confirm/TbOrderPeopleConfirmController.java

@@ -0,0 +1,87 @@
+package com.pj.tb_order_people_confirm;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import com.pj.utils.sg.*;
+import com.pj.project4sp.SP;
+
+import com.pj.current.satoken.StpUserUtil;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+
+
+/**
+ * Controller: tb_order_people_confirm -- 便民确认订单监听表
+ * @author yzs 
+ */
+@RestController
+@RequestMapping("/TbOrderPeopleConfirm/")
+public class TbOrderPeopleConfirmController {
+
+	/** 底层 Service 对象 */
+	@Autowired
+	TbOrderPeopleConfirmService tbOrderPeopleConfirmService;
+
+	/** 增 */  
+	@RequestMapping("add")
+	@SaCheckPermission(TbOrderPeopleConfirm.PERMISSION_CODE_ADD)
+	public AjaxJson add(TbOrderPeopleConfirm t){
+		tbOrderPeopleConfirmService.add(t);
+		t = tbOrderPeopleConfirmService.getById(SP.publicMapper.getPrimarykey());
+		return AjaxJson.getSuccessData(t);
+	}
+
+	/** 删 */  
+	@RequestMapping("delete")
+	@SaCheckPermission(TbOrderPeopleConfirm.PERMISSION_CODE_DEL)
+	public AjaxJson delete(Long id){
+		 tbOrderPeopleConfirmService.delete(id);
+		return AjaxJson.getSuccess();
+	}
+	
+	/** 删 - 根据id列表 */  
+	@RequestMapping("deleteByIds")
+	@SaCheckPermission(TbOrderPeopleConfirm.PERMISSION_CODE_DEL)
+	public AjaxJson deleteByIds(){
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class); 
+		int line = SP.publicMapper.deleteByIds(TbOrderPeopleConfirm.TABLE_NAME, ids);
+		return AjaxJson.getByLine(line);
+	}
+	
+	/** 改 */  
+	@RequestMapping("update")
+	@SaCheckPermission(TbOrderPeopleConfirm.PERMISSION_CODE_EDIT)
+	public AjaxJson update(TbOrderPeopleConfirm t){
+		tbOrderPeopleConfirmService.update(t);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 查 - 根据id */  
+	@RequestMapping("getById")
+		@SaCheckPermission(TbOrderPeopleConfirm.PERMISSION_CODE)
+	public AjaxJson getById(Integer id){
+		TbOrderPeopleConfirm t = tbOrderPeopleConfirmService.getById(id);
+		return AjaxJson.getSuccessData(t);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	@RequestMapping("getList")
+		@SaCheckPermission(TbOrderPeopleConfirm.PERMISSION_CODE)
+	public AjaxJson getList() { 
+		SoMap so = SoMap.getRequestSoMap();
+		List<TbOrderPeopleConfirm> list = tbOrderPeopleConfirmService.getList(so.startPage());
+		return AjaxJson.getPageData(so.getDataCount(), list);
+	}
+	
+	
+	
+	
+
+	
+	
+	
+
+}

+ 30 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_order_people_confirm/TbOrderPeopleConfirmMapper.java

@@ -0,0 +1,30 @@
+package com.pj.tb_order_people_confirm;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.pj.utils.so.*;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Mapper: tb_order_people_confirm -- 便民确认订单监听表
+ * @author yzs 
+ */
+
+@Mapper
+@Repository
+public interface TbOrderPeopleConfirmMapper extends BaseMapper <TbOrderPeopleConfirm> {
+
+
+
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param so 参数集合 
+	 * @return 数据列表 
+	 */
+	List<TbOrderPeopleConfirm> getList(SoMap so);
+
+
+}

+ 51 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_order_people_confirm/TbOrderPeopleConfirmMapper.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pj.tb_order_people_confirm.TbOrderPeopleConfirmMapper">
+
+
+
+
+	<!-- ================================== 查询相关 ================================== -->
+	<!-- select id, order_id, people_id, group_id, create_time from tb_order_people_confirm  -->
+	
+	<!-- 通用映射:自动模式 -->
+	<resultMap id="model" autoMapping="true" type="com.pj.tb_order_people_confirm.TbOrderPeopleConfirm"></resultMap>
+	
+	<!-- 公共查询sql片段 -->
+	<sql id="select_sql">
+		select * 
+		from tb_order_people_confirm 
+	</sql>
+
+	
+	<!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [G] -->
+	<select id="getList" resultMap="model">
+		<include refid="select_sql"></include>
+		<where>
+			<if test=' this.has("id") '> and id = #{id} </if>
+			<if test=' this.has("orderId") '> and order_id = #{orderId} </if>
+			<if test=' this.has("peopleId") '> and people_id = #{peopleId} </if>
+			<if test=' this.has("groupId") '> and group_id = #{groupId} </if>
+			<if test=' this.has("createTime") '> and create_time = #{createTime} </if>
+		</where>
+		order by
+		<choose>
+			<when test='sortType == 1'> id desc </when>
+			<when test='sortType == 2'> order_id desc </when>
+			<when test='sortType == 3'> people_id desc </when>
+			<when test='sortType == 4'> group_id desc </when>
+			<when test='sortType == 5'> create_time desc </when>
+			<otherwise> id desc </otherwise>
+		</choose>
+	</select>
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+</mapper>

+ 51 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_order_people_confirm/TbOrderPeopleConfirmService.java

@@ -0,0 +1,51 @@
+package com.pj.tb_order_people_confirm;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import com.pj.utils.sg.*;
+
+/**
+ * Service: tb_order_people_confirm -- 便民确认订单监听表
+ * @author yzs 
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class TbOrderPeopleConfirmService extends ServiceImpl<TbOrderPeopleConfirmMapper, TbOrderPeopleConfirm> implements IService<TbOrderPeopleConfirm>{
+
+	/** 底层 Mapper 对象 */
+	@Autowired
+	TbOrderPeopleConfirmMapper tbOrderPeopleConfirmMapper;
+
+	/** 增 */
+	void add(TbOrderPeopleConfirm t){
+		save(t);
+	}
+
+	/** 删 */
+	void delete(Long id){
+		removeById(id);
+	}
+
+	/** 改 */
+	void update(TbOrderPeopleConfirm t){
+		updateById(t);
+
+	}
+
+	/** 查 */
+	TbOrderPeopleConfirm getById(Integer id){
+		return super.getById(id);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	List<TbOrderPeopleConfirm> getList(SoMap so) { 
+		return tbOrderPeopleConfirmMapper.getList(so);	
+	}
+	
+
+}

+ 27 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_order_people_confirm/TbOrderPeopleConfirmUtil.java

@@ -0,0 +1,27 @@
+package com.pj.tb_order_people_confirm;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 工具类:tb_order_people_confirm -- 便民确认订单监听表
+ * @author yzs 
+ *
+ */
+@Component
+public class TbOrderPeopleConfirmUtil {
+
+	
+	/** 底层 Mapper 对象 */
+	public static TbOrderPeopleConfirmMapper tbOrderPeopleConfirmMapper;
+	@Autowired
+	private void setTbOrderPeopleConfirmMapper(TbOrderPeopleConfirmMapper tbOrderPeopleConfirmMapper) {
+		TbOrderPeopleConfirmUtil.tbOrderPeopleConfirmMapper = tbOrderPeopleConfirmMapper;
+	}
+	
+
+
+	
+	
+	
+}

+ 8 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleAppController.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.pj.utils.sg.AjaxJson;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -32,4 +33,11 @@ public class TbPeopleAppController {
         return AjaxJson.getSuccess();
     }
 
+    /** 边民确认订单 */
+    @RequestMapping("confirmOrder")
+    public AjaxJson confirmOrder(@RequestParam("confirm")Integer confirm,@RequestParam("orderId")Long orderId){
+        tbPeopleService.confirmOrder(confirm,orderId);
+        return AjaxJson.getSuccess();
+    }
+
 }

+ 58 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleService.java

@@ -10,13 +10,21 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.pj.api.client.admin.AdminInterface;
 import com.pj.api.dto.AppUserDto;
 import com.pj.api.dto.PeopleDto;
+import com.pj.common.core.exception.ServiceException;
+import com.pj.common.core.utils.DateUtil;
+import com.pj.current.dto.APPLoginUserInfo;
 import com.pj.current.dto.PCLoginUserInfo;
+import com.pj.current.satoken.StpAPPUserUtil;
 import com.pj.current.satoken.StpUserUtil;
 import com.pj.enummj.DeleteStatus;
 import com.pj.enummj.IsLock;
 import com.pj.enummj.People;
 import com.pj.tb_group.TbGroup;
 import com.pj.tb_group.TbGroupMapper;
+import com.pj.tb_order.TbOrder;
+import com.pj.tb_order.TbOrderMapper;
+import com.pj.tb_order_people_confirm.TbOrderPeopleConfirm;
+import com.pj.tb_order_people_confirm.TbOrderPeopleConfirmMapper;
 import com.pj.tb_people.dto.StartStopDto;
 import com.pj.tb_people.vo.ApplyPeopleVo;
 import com.pj.utils.sg.AjaxJson;
@@ -38,6 +46,7 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 import java.util.Objects;
 
 /**
@@ -57,6 +66,12 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
 
 	@Autowired
 	private AdminInterface adminInterface;
+	/** 边民确认订单 */
+	@Autowired
+	private TbOrderPeopleConfirmMapper tbOrderPeopleConfirmMapper;
+	/** 订单对象 */
+	@Autowired
+	private TbOrderMapper tbOrderMapper;
 
 
 	@Autowired
@@ -248,7 +263,50 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
 		return line;
 	}
 
+	/**
+	 *  边民确认订单
+	 * @param confirm 1=确认,0=拒绝
+	 * @param orderId 一级市场订单表ID
+	 */
+	public void confirmOrder(Integer confirm,Long orderId){
+		//获取登录人
+		APPLoginUserInfo appLoginInfo = StpAPPUserUtil.getAPPLoginInfo();
+		if(appLoginInfo == null || appLoginInfo.getLoginId() == null)
+			throw new RuntimeException("当前登录账号信息已失效!");
+		//查询当前边民
+		TbPeople tbPeople = tbPeopleMapper.selectById(appLoginInfo.getFk());
+		if(tbPeople == null)
+			throw new ServiceException("当前边民暂未认证!");
+		//执行确认 todo:调用人脸认证
+		TbOrderPeopleConfirm tbOrderPeopleConfirm = new TbOrderPeopleConfirm();
+		tbOrderPeopleConfirm.setPeopleId(tbPeople.getId());
+		tbOrderPeopleConfirm.setGroupId(tbPeople.getGroupId());
+		tbOrderPeopleConfirm.setOrderId(orderId);
+		tbOrderPeopleConfirm.setCreateTime(new Date());
+		int insert = tbOrderPeopleConfirmMapper.insert(tbOrderPeopleConfirm);
+		//执行查询订单完成情况
+		if(insert == 1){
+			//查询当前互市组的人数
+			Integer selectCount = tbPeopleMapper.selectCount
+					(new LambdaQueryWrapper<TbPeople>()
+							.eq(TbPeople::getGroupId, tbPeople.getGroupId())
+							.eq(TbPeople::getIsLock, IsLock.IS_LOCK_ON.getCode())
+							.eq(TbPeople::getDeleteStatus, DeleteStatus.DELETE_STATUS_ON.getCode()));
+			//查询已确认的边民的数量
+			List<TbOrderPeopleConfirm> selectList = tbOrderPeopleConfirmMapper.selectList
+					(new LambdaQueryWrapper<TbOrderPeopleConfirm>().eq(TbOrderPeopleConfirm::getOrderId,orderId));
+			//判断已确认的边民数量
+			if(selectList.size() == selectCount){
+				//执行边民确认
+				TbOrder tbOrder = tbOrderMapper.selectById(orderId);
+				if(tbOrder == null)throw new RuntimeException("当前订单已被组长取消!");
+				tbOrder.setPeopleConfirm(1);
+				int updateById = tbOrderMapper.updateById(tbOrder);
+				if(updateById != 1)throw new RuntimeException("执行边民确认异常!");
+			}
+		}
 
+	}