Browse Source

7.28 日常开发 - 启用异步通信

Mechrevo 1 year ago
parent
commit
5c4d6ea431
18 changed files with 461 additions and 44 deletions
  1. 3 3
      sp-core/sp-api/src/main/java/com/pj/api/client/transport/TransportInterface.java
  2. 2 1
      sp-core/sp-api/src/main/java/com/pj/api/client/transport/TransportInterfaceFallback.java
  3. 17 0
      sp-core/sp-base/pom.xml
  4. 26 0
      sp-core/sp-base/src/main/java/com/pj/enummj/EnterpriseConfirm.java
  5. 43 0
      sp-core/sp-base/src/main/java/com/pj/rabbitmq/config/RabbitMqConfig.java
  6. 24 0
      sp-service/level-one-server/src/main/java/com/pj/rabbitmq/listener/RabbitMQListener.java
  7. 11 7
      sp-service/level-one-server/src/main/java/com/pj/tb_enterprise/MethodEnterpriseService.java
  8. 0 4
      sp-service/level-one-server/src/main/java/com/pj/tb_enterprise/TbEnterpriseAppController.java
  9. 15 2
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/GoodsTransitAppController.java
  10. 70 0
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/MethodGoodsTransitService.java
  11. 23 1
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransit.java
  12. 100 21
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransitService.java
  13. 26 0
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/param/PurchaseLevelOneGoodsTransitParam.java
  14. 12 1
      sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/param/TransactionGoodsParam.java
  15. 1 1
      sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrder.java
  16. 1 1
      sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrderMapper.xml
  17. 85 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_role/AppRoleApiController.java
  18. 2 2
      sp-service/transport-server/src/main/java/com/pj/project/tb_logistics/TbLogisticsController.java

+ 3 - 3
sp-core/sp-api/src/main/java/com/pj/api/client/transport/TransportInterface.java

@@ -1,11 +1,11 @@
 package com.pj.api.client.transport;
 
 import com.pj.api.FeignInterceptor;
-import com.pj.api.client.admin.AdminInterfaceFallback;
 import com.pj.api.consts.FeignConsts;
 import com.pj.api.dto.TbLogisticsDto;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * @Author Mechrevo
@@ -14,10 +14,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
 @FeignClient(
         name = FeignConsts.TRANSPORT_SERVER, 				// 服务名称
         configuration = FeignInterceptor.class,		// 请求拦截器
-        fallbackFactory = AdminInterfaceFallback.class	// 服务降级
+        fallbackFactory = TransportInterfaceFallback.class	// 服务降级
 )
 public interface TransportInterface {
 
     @RequestMapping("/TbLogistics/rpc/selectByOrderId")
-    public TbLogisticsDto selectByOrderId(Long orderId);
+    public TbLogisticsDto selectByOrderId(@RequestParam("orderId") Long orderId);
 }

+ 2 - 1
sp-core/sp-api/src/main/java/com/pj/api/client/transport/TransportInterfaceFallback.java

@@ -14,13 +14,14 @@ import org.springframework.stereotype.Component;
 @Component
 public class TransportInterfaceFallback implements FallbackFactory<TransportInterface> {
 
-    private static final Logger log = LoggerFactory.getLogger(AdminInterfaceFallback.class);
+    private static final Logger log = LoggerFactory.getLogger(TransportInterfaceFallback.class);
 
     @Override
     public TransportInterface create(Throwable throwable) {
         return new TransportInterface() {
             @Override
             public TbLogisticsDto selectByOrderId(Long orderId) {
+                System.out.println(throwable.getMessage());
                 log.error("触发降级熔断机制,id为:{}",orderId);
                 return null;
             }

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

@@ -28,6 +28,23 @@
         </dependency>
 		<!-- ================= 模块依赖 end ================= -->
 
+        <!-- 异步通信 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+
+        <!-- 消息转换器 -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.9.10</version>
+        </dependency>
+
         <!-- excel文件导入与导出 -->
         <dependency>
             <groupId>org.apache.poi</groupId>

+ 26 - 0
sp-core/sp-base/src/main/java/com/pj/enummj/EnterpriseConfirm.java

@@ -0,0 +1,26 @@
+package com.pj.enummj;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Author Mechrevo
+ * @Date 2023 07 28 15 14
+ **/
+@Getter
+@AllArgsConstructor
+public enum EnterpriseConfirm {
+    /**
+     * 商户订单确认情况
+     */
+    ENTERPRISE_CONFIRM_ZERO(0,"待确认"),
+    ENTERPRISE_CONFIRM_ONE(1,"已确认"),
+    ENTERPRISE_CONFIRM_TWO(2,"拒绝");
+
+    private Integer code;
+
+    private String msg;
+
+
+
+}

+ 43 - 0
sp-core/sp-base/src/main/java/com/pj/rabbitmq/config/RabbitMqConfig.java

@@ -0,0 +1,43 @@
+package com.pj.rabbitmq.config;
+
+import org.springframework.amqp.core.Queue;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+/**
+ * 异步通信
+ * @Author Mechrevo
+ * @Date 2023 07 28 16 43
+ **/
+@Configuration
+public class RabbitMqConfig {
+    /** 边民队列 */
+    public  static final String PEOPLE_REVEIVE_MESSAGE_MQ = "people_queue";
+    /** 商家队列 */
+    public  static final String ENTERPRISE_REVEIVE_MESSAGE_MQ = "enterprise_queue";
+
+    /**
+     * 边民接收消息队列
+     * @return
+     */
+    @Bean
+    public Queue peopleQueue(){
+        return new Queue(PEOPLE_REVEIVE_MESSAGE_MQ,true);
+    }
+
+    /**
+     * 商家接收消息队列
+     * @return
+     */
+    @Bean
+    public Queue enterpriseQueue(){
+        return new Queue(ENTERPRISE_REVEIVE_MESSAGE_MQ,true);
+    }
+
+
+
+
+
+
+}

+ 24 - 0
sp-service/level-one-server/src/main/java/com/pj/rabbitmq/listener/RabbitMQListener.java

@@ -0,0 +1,24 @@
+package com.pj.rabbitmq.listener;
+
+import com.pj.rabbitmq.config.RabbitMqConfig;
+import com.pj.tb_people.TbPeople;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author Mechrevo
+ * @Date 2023 07 28 17 12
+ **/
+@Component
+public class RabbitMQListener {
+
+
+    @RabbitHandler
+    @RabbitListener(queuesToDeclare = @Queue(RabbitMqConfig.PEOPLE_REVEIVE_MESSAGE_MQ))
+    public void consumerPeople(TbPeople tbPeople){
+        //todo:开始执行发送短信
+        System.out.println("peopleId = " + tbPeople.getId().toString() + "\n");
+    }
+}

+ 11 - 7
sp-service/level-one-server/src/main/java/com/pj/tb_enterprise/MethodEnterpriseService.java

@@ -7,6 +7,8 @@ import com.pj.api.dto.TbLogisticsDto;
 import com.pj.tb_enterprise.vo.OrdersVo;
 import com.pj.tb_goods.TbGoods;
 import com.pj.tb_goods.TbGoodsMapper;
+import com.pj.tb_goods_transit.TbGoodsTransit;
+import com.pj.tb_goods_transit.TbGoodsTransitMapper;
 import com.pj.tb_order.TbOrder;
 import com.pj.tb_people.TbPeople;
 import com.pj.tb_people.TbPeopleMapper;
@@ -42,7 +44,7 @@ public class MethodEnterpriseService {
     @Autowired
     private TransportInterface transportInterface;
     @Autowired
-    private TbGoodsMapper tbGoodsMapper;
+    private TbGoodsTransitMapper tbGoodsTransitMapper;
 
     /**
      * 方法抽取:将List<TbOrder> tbOrderList 转成 List<OrderVo> vo
@@ -64,23 +66,25 @@ public class MethodEnterpriseService {
             //开始处理
             Long buyUserId = item.getBuyUserId();
             AppUserDto appUserById = adminInterface.getAppUserById(buyUserId);
-            if(appUserById == null)throw new RuntimeException("该订单无买家信息");
+            if(appUserById.getId() == null)throw new RuntimeException("该订单无买家信息");
             //orderId
             orderId = item.getId();
             //groupId,groupName
             String fkId = appUserById.getFkId();
             TbPeople tbPeople = tbPeopleMapper.selectById(fkId);
-            if(tbPeople != null){
+            if(tbPeople != null && tbPeople.getId() != null){
                 groupId = tbPeople.getGroupId();
                 groupName = tbPeople.getGroupName();
             }
             //tradeNum
             tradeNum = item.getTradeNo();
-            //goodsName,goodsImg
-            goodsName = item.getGoodsNames();
             Long goodsId = item.getGoodsId();
-            TbGoods tbGoods = tbGoodsMapper.selectById(goodsId);
-            if(tbGoods != null)goodsImg = tbGoods.getAvatar();
+            TbGoodsTransit tbGoods = tbGoodsTransitMapper.selectById(goodsId);
+            if(tbGoods != null){
+                //goodsName,goodsImg
+                goodsName = tbGoods.getGoodsName();
+                goodsImg = tbGoods.getGoodsImg();
+            }
             //price
             price = item.getTotalPrice();
             //orderTime

+ 0 - 4
sp-service/level-one-server/src/main/java/com/pj/tb_enterprise/TbEnterpriseAppController.java

@@ -1,15 +1,11 @@
 package com.pj.tb_enterprise;
 
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import com.pj.project4sp.SP;
 import com.pj.tb_enterprise.vo.OrdersVo;
 import com.pj.utils.sg.AjaxJson;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
 import java.util.List;
 
 

+ 15 - 2
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/GoodsTransitAppController.java

@@ -1,7 +1,7 @@
 package com.pj.tb_goods_transit;
 
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import com.pj.project4sp.SP;
+
+import com.pj.tb_goods_transit.param.PurchaseLevelOneGoodsTransitParam;
 import com.pj.tb_goods_transit.param.TransactionGoodsParam;
 import com.pj.utils.sg.AjaxJson;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,4 +52,17 @@ public class GoodsTransitAppController {
 
 
 
+    /** app端用户上架/下架商品 */
+    @RequestMapping("purchaseLevelOntGoodsTransit")
+//    @SaCheckPermission(TbGoodsTransit.PERMISSION_CODE_ADD)
+    public AjaxJson purchaseLevelOntGoodsTransit(@Validated @RequestBody PurchaseLevelOneGoodsTransitParam purchaseLevelOneGoodsTransitParam){
+        boolean goods = tbGoodsTransitService.purchaseLevelOntGoodsTransit(purchaseLevelOneGoodsTransitParam);
+        if(goods){
+            return AjaxJson.getSuccess("提交成功,待商家确认订单!");
+        }
+        return AjaxJson.getError("提交失败!");
+    }
+
+
+
 }

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

@@ -1,17 +1,25 @@
 package com.pj.tb_goods_transit;
 
+import com.pj.current.dto.APPLoginUserInfo;
+import com.pj.enummj.DeleteStatus;
+import com.pj.enummj.EnterpriseConfirm;
+import com.pj.rabbitmq.config.RabbitMqConfig;
 import com.pj.tb_goods.TbGoods;
 import com.pj.tb_goods_type.TbGoodsTypeService;
+import com.pj.tb_order.TbOrder;
+import com.pj.tb_people.TbPeople;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.ss.usermodel.CellType;
 import org.apache.poi.ss.usermodel.DateUtil;
+import org.springframework.amqp.core.AmqpTemplate;
 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.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -28,6 +36,68 @@ public class MethodGoodsTransitService {
     @Autowired
     private TbGoodsTransitService tbGoodsTransitService;
 
+    @Autowired
+    private AmqpTemplate amqpTemplate;
+
+    /**
+     * 给边民组组员发送短信通知
+     */
+    public void sendSms(List<TbPeople> peopleIdList){
+        peopleIdList.forEach(item -> {
+            amqpTemplate.convertAndSend(RabbitMqConfig.PEOPLE_REVEIVE_MESSAGE_MQ,item);
+        });
+    }
+
+
+    /**
+     * 设置订单表的属性
+     * @param tbGoodsTransit
+     * @param appLoginInfo
+     * @return
+     */
+    public TbOrder setTbOrderProperties(TbGoodsTransit tbGoodsTransit, APPLoginUserInfo appLoginInfo){
+        //执行采购,创建一级市场订单表
+        TbOrder tbOrder = new TbOrder();
+        //设置属性
+        tbOrder.setTradeAreaId(tbGoodsTransit.getTradeAreaId());
+        tbOrder.setTradeAreaName(tbGoodsTransit.getTradeAreaName());
+        tbOrder.setGoodsId(tbGoodsTransit.getId());
+        tbOrder.setSaleMainId(Long.valueOf(tbGoodsTransit.getMerchantId()));
+//		tbOrder.setTradeNo();  // 建议编号
+        tbOrder.setBuyUserId(appLoginInfo.getLoginId());
+        tbOrder.setBuyUserType(2 + "");
+        tbOrder.setBuyUserName(appLoginInfo.getLoginName());
+        tbOrder.setEnterpriseId(Long.valueOf(tbGoodsTransit.getMerchantId()));
+        tbOrder.setEnterpriseName(tbGoodsTransit.getMerchantName());
+        tbOrder.setTotalWeight(tbGoodsTransit.getGrossWeight());
+        tbOrder.setTotalPrice(tbGoodsTransit.getPrice());
+//		tbOrder.setTradeTime();  // 交易时间
+        tbOrder.setTradeStatus(0 + "");
+//		tbOrder.setPayType();  //交易类型
+//		tbOrder.setRealPrice();  // 当前结算金额
+        tbOrder.setShouldPrice(tbGoodsTransit.getPrice());  //应结算金额
+//		tbOrder.setReceiveName();
+//		tbOrder.setReceivePhone(); // 收货人的基本信息
+//		tbOrder.setReceiveAddress();
+        tbOrder.setGoodsNames(tbGoodsTransit.getGoodsName());
+        tbOrder.setConfirm(EnterpriseConfirm.ENTERPRISE_CONFIRM_ZERO.getCode());
+        tbOrder.setShopId(tbGoodsTransit.getShopId());
+        tbOrder.setShopName(tbGoodsTransit.getShopName());
+        tbOrder.setSend(0);
+        //设置下单时的默认状态
+        tbOrder.setDeleteStatus(DeleteStatus.DELETE_STATUS_ON.getCode());
+        tbOrder.setTradeStatus(0 + "");
+        //订单表基本字段
+        tbOrder.setCreateBy(appLoginInfo.getLoginId().toString());
+        tbOrder.setCreateName(appLoginInfo.getLoginName());
+        tbOrder.setCreateTime(new Date());
+        return tbOrder;
+    }
+
+
+
+
+
     /**
      * 方法抽取  导入
      * @param row

+ 23 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/TbGoodsTransit.java

@@ -65,6 +65,10 @@ public class TbGoodsTransit extends Model<TbGoodsTransit> implements Serializabl
 	 * 商品类型 
 	 */
 	private String goodsType;	
+	/**
+	 * 商品图片
+	 */
+	private String goodsImg;
 
 	/**
 	 * 商品名称 
@@ -168,13 +172,31 @@ public class TbGoodsTransit extends Model<TbGoodsTransit> implements Serializabl
 	/**
 	 * 更新人名称 
 	 */
-	private String updateName;	
+	private String updateName;
+	/**
+	 * 商铺名称
+	 */
+	private String shopName;
+	/**
+	 * 商铺ID
+	 */
+	private Long shopId;
 
 	/**
 	 * 删除状态(0=禁用,1=启用) 
 	 */
 	private Integer deleteStatus;
 
+	/**
+	 * 是否已被下单[0=未被下单,1=已被下单]
+	 */
+	private Integer isOrders;
+
+	/**
+	 * 商铺确认情况[0=待确认,1=已确认,2=拒绝]
+	 */
+	private Integer enterpriseConfirm;
+
 
 
 

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

@@ -4,25 +4,27 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.pj.api.client.admin.AdminInterface;
-import com.pj.api.dto.AppUserDto;
 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.AuditStatus;
-import com.pj.enummj.DeleteStatus;
-import com.pj.enummj.GoodsStatus;
-import com.pj.tb_enterprise.TbEnterprise;
+import com.pj.enummj.*;
 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_group.TbGroup;
+import com.pj.tb_group.TbGroupMapper;
+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.tb_trade_area.TbTradeArea;
 import com.pj.tb_trade_area.TbTradeAreaMapper;
 import com.pj.utils.so.SoMap;
@@ -30,13 +32,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.beans.BeanUtils;
 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.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.swing.filechooser.FileSystemView;
@@ -59,10 +61,16 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 	@Autowired
 	private TbGoodsMapper tbGoodsMapper;
 	@Autowired
-	private AdminInterface adminInterface;
+	private TbGroupMapper tbGroupMapper;
 	/** 互市区mapper */
 	@Autowired
 	private TbTradeAreaMapper tbTradeAreaMapper;
+	/** 订单保存 */
+	@Autowired
+	private TbOrderMapper tbOrderMapper;
+	/** 边民 */
+	@Autowired
+	private TbPeopleMapper tbPeopleMapper;
 
 	/** 增 */
 	void add(TbGoodsTransit t){
@@ -109,6 +117,8 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 		//获取审核id
 		List<String> ids = judgeTransitParam.getIds();
 		if(ids.size() == 0)return "没有需要审核的数据。";
+		//检查登录
+		StpUtil.checkLogin();
 		//获取审核状态
 		Integer judgeStatus = judgeTransitParam.getJudgeStatus();
 		//添加审核计数器
@@ -135,18 +145,18 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 
 	/** app端 - 添加需要交易的商品 */
 	public boolean transactionGoods(TransactionGoodsParam transactionGoodsParam){
+		//检查登录
+//		StpUtil.checkLogin();
 		//判断商品的净重毛重
 		Double netWeight = transactionGoodsParam.getNetWeight();
 		Double grossWeight = transactionGoodsParam.getGrossWeight();
 		if(netWeight > grossWeight){
 			throw new RuntimeException("净重超过了毛重,请检查输入。");
 		}
-		//获取当前登录人 todo:生产阶段需打开该注释
-//		StpUserUtil.checkLogin();
-//		long loginIdAsLong = StpUserUtil.getLoginIdAsLong();
-		Long loginIdAsLong = 4L;//测试阶段,写死appUser的id
-		AppUserDto appUserById = adminInterface.getAppUserById(loginIdAsLong);
-		if(appUserById == null)throw new RuntimeException("账户登录信息已失效!请重新登录");
+		//获取当前登录人
+		APPLoginUserInfo appLoginInfo = StpAPPUserUtil.getAPPLoginInfo();
+		if(appLoginInfo == null || appLoginInfo.getLoginId() == null)
+			throw new RuntimeException("账户登录信息已失效!请重新登录");
 		//取出申报商品ID
 		Long id = transactionGoodsParam.getId();
 		//查询监管产品
@@ -165,13 +175,17 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 		tbGoodsTransit.setPlaceOrigin(tbGoods.getSource());
 		tbGoodsTransit.setGoodsUnits(tbGoods.getUnit());
 		tbGoodsTransit.setGoodsType(tbGoods.getTypeNames());
+		tbGoodsTransit.setShopId(transactionGoodsParam.getShopId());
+		tbGoodsTransit.setShopName(transactionGoodsParam.getShopName());
+		//保存海关商品表的主键到商品审核表上 todo:原计划是保存[海关申报单号],临时修改成保存海关商品表的主键
+		tbGoodsTransit.setDeclareOdd(tbGoods.getId().toString());
 		//设置默认信息
 		tbGoodsTransit.setAuditStatus(1);//默认已过审
 		tbGoodsTransit.setGoodsStatus(1);//默认已上架
 		//设置基本信息
 		tbGoodsTransit.setCreateTime(new Date());
-		tbGoodsTransit.setCreateBy(loginIdAsLong + "");
-		tbGoodsTransit.setCreateName(appUserById.getName());
+		tbGoodsTransit.setCreateBy(appLoginInfo.getLoginId() + "");
+		tbGoodsTransit.setCreateName(appLoginInfo.getLoginName());
 		tbGoodsTransit.setDeleteStatus(1);
 		//执行保存
 		int insert = tbGoodsTransitMapper.insert(tbGoodsTransit);
@@ -183,10 +197,16 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 	boolean UpOrDownGoods(Long goodsTransitId , Integer goodsStatus){
 		//获取当前登陆人
 		APPLoginUserInfo appLoginInfo = StpAPPUserUtil.getAPPLoginInfo();
-		if(appLoginInfo == null)throw new RuntimeException("当前登陆人不存在!");
+		if(appLoginInfo == null || appLoginInfo.getLoginId() == null)
+			throw new RuntimeException("当前登陆人不存在!");
+		//查询当前需要执行上架/下架的商品
 		TbGoodsTransit tbGoodsTransit = tbGoodsTransitMapper.selectById(goodsTransitId);
-		if(tbGoodsTransit == null)throw new RuntimeException("该商品状态异常或不存在!");
-		tbGoodsTransit.setGoodsStatus(goodsStatus == null? 0 : goodsStatus);
+		if(tbGoodsTransit == null || tbGoodsTransit.getId() == null)
+			throw new RuntimeException("该商品状态异常或不存在!");
+		//设置商品状态
+		tbGoodsTransit.setGoodsStatus
+				(goodsStatus == null || goodsStatus.toString().equals("")?
+						tbGoodsTransit.getGoodsStatus() : goodsStatus);
 		//设置基本属性
 		tbGoodsTransit.setUpdateTime(new Date());
 		tbGoodsTransit.setUpdateBy(appLoginInfo.getLoginId() + "");
@@ -198,6 +218,65 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
 	}
 
 	/**
+	 * 采购一级市场的商品,
+	 * 包括加入购物车、购买、支付(暂时不做),
+	 * 下单后会向组内边民发送短信,
+	 * 通知其登录APP进行交易确认。
+	 */
+	public boolean purchaseLevelOntGoodsTransit(PurchaseLevelOneGoodsTransitParam purchaseLevelOntGoodsTransitParam){
+		//检查登录
+//		StpUtil.checkLogin();
+		//获取当前登陆人
+		APPLoginUserInfo appLoginInfo = StpAPPUserUtil.getAPPLoginInfo();
+		if(appLoginInfo == null || appLoginInfo.getLoginId() == null)
+			throw new RuntimeException("当前登陆用户信息已失效!");
+		//判断当前登陆人是否为互市组组长
+		List<TbGroup> list = tbGroupMapper.selectList
+				(new LambdaQueryWrapper<TbGroup>().eq(TbGroup::getLeaderId, appLoginInfo.getLoginId())
+						.eq(TbGroup::getIsLock, IsLock.IS_LOCK_ON.getCode())
+						.eq(TbGroup::getDeleteStatus, DeleteStatus.DELETE_STATUS_ON.getCode()));
+		if(list.size() != 1)throw new RuntimeException("您当前不属于互市组组长~");
+		//获取商品ID
+		String goodsTransitId = purchaseLevelOntGoodsTransitParam.getGoodsTransitId();
+		//查询商品
+		TbGoodsTransit tbGoodsTransit = tbGoodsTransitMapper.selectById(goodsTransitId);
+		if(tbGoodsTransit == null || tbGoodsTransit.getId() == null)
+			throw new RuntimeException("当前商品信息已失效!");
+		//检查是否属于海关允许销售商品
+		String declareOdd = tbGoodsTransit.getDeclareOdd();
+		TbGoods tbGoods = tbGoodsMapper.selectById(declareOdd);
+		if(tbGoods == null)throw new RuntimeException("当前商品已海关不允许销售!");
+		//执行采购,创建一级市场订单表
+		TbOrder tbOrder = methodGoodsTransitService.setTbOrderProperties(tbGoodsTransit, appLoginInfo);
+
+		//查询是否已存在该订单
+		List<TbOrder> tbOrderList = tbOrderMapper.selectList(new LambdaQueryWrapper<TbOrder>().eq(TbOrder::getGoodsId, tbGoodsTransit.getId()));
+		if(tbOrderList.size() != 0)throw new RuntimeException("当前商品已存在订单,暂时无法继续下单!");
+
+		//执行保存
+		int insert = tbOrderMapper.insert(tbOrder);
+		if(insert == 1){
+			// todo: 执行订单完成后的逻辑
+			// todo: 发送短信给边民组通知其确认
+			//获取互市组ID
+			Long groupId = list.get(0).getId();
+			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("订单异常,原因是没有关联的边民!!!");
+			methodGoodsTransitService.sendSms(tbPeopleList);
+
+		}
+
+		return false;
+	}
+
+	/**
 	 * 导入
 	 * @param file excel文件
 	 * @return

+ 26 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/param/PurchaseLevelOneGoodsTransitParam.java

@@ -0,0 +1,26 @@
+package com.pj.tb_goods_transit.param;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Author Mechrevo
+ * @Date 2023 07 28 14 29
+ **/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PurchaseLevelOneGoodsTransitParam {
+
+    /** 所购商品的ID */
+    @NotBlank(message = "所购商品ID不能为空")
+    private String goodsTransitId;
+
+//    private String receiveName;
+//    private String receivePhone;
+//    private String receiveAddress;
+
+}

+ 12 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_goods_transit/param/TransactionGoodsParam.java

@@ -36,7 +36,7 @@ public class TransactionGoodsParam {
     private Integer stock;
 
     /** 监管商品的ID */
-    @NotNull
+    @NotBlank(message = "监管商品ID不能为空")
     private Long id;
 
     /** 当前添加商品的商户id */
@@ -45,6 +45,17 @@ public class TransactionGoodsParam {
     /** 当前添加商品的商户名称 */
     private String merchantName;
 
+    /** 商品描述 */
+    private String description;
+
+    /** 商品图片 */
+    private String goodsImg;
+
+    /** 商铺id */
+    @NotBlank(message = "商铺ID不能为空")
+    private Long shopId;
 
+    /** 商铺名称 */
+    private String shopName;
 
 }

+ 1 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrder.java

@@ -254,7 +254,7 @@ public class TbOrder extends Model<TbOrder> implements Serializable {
 	/**
 	 * 是否发货 
 	 */
-	private String send;	
+	private Integer send;
 
 	/**
 	 * 发货时间 

+ 1 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrderMapper.xml

@@ -18,7 +18,7 @@
 	<sql id="select_sql">
 		select id,trade_area_id,trade_no,trade_area_name,buy_user_name,buy_user_type,enterprise_name,total_weight,total_price,
 			   trade_time, trade_status, real_price,pay_type,should_price,goods_names,apply,confirm,pick,pick_time,
-			   send,send_time,level_two_order_id
+			   send,send_time,level_two_order_id,goods_id,buy_user_id
 		from tb_order 
 	</sql>
 

+ 85 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_role/AppRoleApiController.java

@@ -0,0 +1,85 @@
+package com.pj.project.app_role;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.pj.project4sp.SP;
+import com.pj.utils.sg.AjaxJson;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * Controller: app_role -- 
+ * @author qzy 
+ */
+@RestController
+@RequestMapping("/app/AppRole/")
+public class AppRoleApiController {
+
+	/** 底层 Service 对象 */
+	@Autowired
+	AppRoleService appRoleService;
+
+	/** 增 */  
+	@RequestMapping("add")
+	@SaCheckPermission(AppRole.PERMISSION_CODE_ADD)
+	public AjaxJson add(AppRole a){
+		appRoleService.add(a);
+		a = appRoleService.getById(SP.publicMapper.getPrimarykey());
+		return AjaxJson.getSuccessData(a);
+	}
+
+	/** 删 */  
+	@RequestMapping("delete")
+	@SaCheckPermission(AppRole.PERMISSION_CODE_DEL)
+	public AjaxJson delete(Long id){
+		 appRoleService.delete(id);
+		return AjaxJson.getSuccess();
+	}
+	
+	/** 删 - 根据id列表 */  
+	@RequestMapping("deleteByIds")
+	@SaCheckPermission(AppRole.PERMISSION_CODE_DEL)
+	public AjaxJson deleteByIds(){
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class); 
+		int line = SP.publicMapper.deleteByIds(AppRole.TABLE_NAME, ids);
+		return AjaxJson.getByLine(line);
+	}
+	
+	/** 改 */  
+	@RequestMapping("update")
+	@SaCheckPermission(AppRole.PERMISSION_CODE_EDIT)
+	public AjaxJson update(AppRole a){
+		appRoleService.update(a);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 查 - 根据id */  
+	@RequestMapping("getById")
+		@SaCheckPermission(AppRole.PERMISSION_CODE)
+	public AjaxJson getById(Long id){
+		AppRole a = appRoleService.getById(id);
+		return AjaxJson.getSuccessData(a);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	@RequestMapping("getList")
+//		@SaCheckPermission(AppRole.PERMISSION_CODE)
+	public AjaxJson getList() { 
+		SoMap so = SoMap.getRequestSoMap();
+		List<AppRole> list = appRoleService.getList(so.startPage());
+		return AjaxJson.getPageData(so.getDataCount(), list);
+	}
+	
+	
+	
+	
+
+	
+	
+	
+
+}

+ 2 - 2
sp-service/transport-server/src/main/java/com/pj/project/tb_logistics/TbLogisticsController.java

@@ -148,8 +148,8 @@ public class TbLogisticsController {
 
 	/** 查 - 根据id */
 	@RequestMapping("rpc/selectByOrderId")
-	@SaCheckPermission(TbLogistics.PERMISSION_CODE)
-	public TbLogisticsDto selectByOrderId(Long orderId){
+//	@SaCheckPermission(TbLogistics.PERMISSION_CODE)
+	public TbLogisticsDto selectByOrderId(@RequestParam("orderId") Long orderId){
 		TbLogisticsDto t = tbLogisticsService.selectByOrderId(orderId);
 		return t;
 	}