|
@@ -7,13 +7,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import shop.alien.entity.second.SecondGoods;
|
|
|
import shop.alien.entity.second.SecondTradeRecord;
|
|
|
import shop.alien.entity.second.vo.SecondTradeRecordVo;
|
|
|
import shop.alien.entity.store.LifeMessage;
|
|
|
import shop.alien.entity.store.LifeUser;
|
|
|
import shop.alien.entity.store.StoreDictionary;
|
|
|
-import shop.alien.entity.store.vo.WebsocketVo;
|
|
|
import shop.alien.mapper.LifeMessageMapper;
|
|
|
import shop.alien.mapper.LifeUserMapper;
|
|
|
import shop.alien.mapper.StoreDictionaryMapper;
|
|
@@ -23,6 +23,9 @@ import shop.alien.second.feign.AlienStoreFeign;
|
|
|
import shop.alien.second.service.SecondTradeRecordService;
|
|
|
import shop.alien.util.common.JwtUtil;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
|
|
@@ -46,12 +49,8 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
|
|
|
private final AlienStoreFeign alienStoreFeign;
|
|
|
private final StoreDictionaryMapper storeDictionaryMapper;
|
|
|
|
|
|
- /**
|
|
|
- * 创建交易
|
|
|
- * @param trade 交易记录对象
|
|
|
- * @return 操作结果
|
|
|
- */
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public boolean createTrade(SecondTradeRecord trade) throws Exception {
|
|
|
try {
|
|
|
// 保存交易记录
|
|
@@ -81,8 +80,10 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
|
|
|
* @param goods 商品信息
|
|
|
* @param trade 交易信息
|
|
|
* @param tradeStatus 1-待确认 2-已拒绝 3-待交易 6-交易取消
|
|
|
+ * @param messageType 4-二手交易创建/确认/拒绝/取消 5-二手交易签到提醒 6-二手交易已签到
|
|
|
*/
|
|
|
- private void sendMsg(SecondGoods goods, SecondTradeRecord trade, Integer tradeStatus, String messageType) {
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void sendMsg(SecondGoods goods, SecondTradeRecord trade, Integer tradeStatus, String messageType) {
|
|
|
// 封装交易信息
|
|
|
JSONObject message = new JSONObject();
|
|
|
message.put("title", goods.getTitle());
|
|
@@ -142,6 +143,7 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public boolean tradeConfirm(int tradeId, int messageId, int type) throws Exception {
|
|
|
try {
|
|
|
// 修改交易状态
|
|
@@ -160,40 +162,31 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
|
|
|
// 商品信息
|
|
|
SecondGoods goods = secondGoodsMapper.selectById(trade.getGoodsId());
|
|
|
|
|
|
+ // 修改待确认的消息
|
|
|
+ LifeMessage lastMessage = lifeMessageMapper.selectById(messageId);
|
|
|
+
|
|
|
+ JSONObject lastMessageContent = JSONObject.parseObject(lastMessage.getContent());
|
|
|
+ lastMessageContent.put("messageId", lastMessage.getId());
|
|
|
+ lastMessageContent.put("tradeStatus", type == 1 ? 3 : 2);
|
|
|
+ LifeMessage message = new LifeMessage();
|
|
|
+ message.setId(lastMessage.getId());
|
|
|
+ message.setContent(lastMessageContent.toJSONString());
|
|
|
+ lifeMessageMapper.updateById(message);
|
|
|
+
|
|
|
// 发送消息
|
|
|
sendMsg(goods, trade, trade.getTradeStatus(), "4");
|
|
|
|
|
|
-// // 发起交易人信息
|
|
|
-// Integer userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
|
|
|
-// String phoneId = JwtUtil.getCurrentUserInfo().getString("userType") + "_" + JwtUtil.getCurrentUserInfo().getString("phone");
|
|
|
-//
|
|
|
-// // 获取交易对方信息
|
|
|
-// LifeUser lifeUser = lifeUserMapper.selectById(Objects.equals(userId, trade.getBuyerId()) ? trade.getSellerId() : trade.getBuyerId());
|
|
|
-// String receiverId = "user_" + lifeUser.getUserPhone();
|
|
|
-//
|
|
|
-// // 封装交易信息
|
|
|
-// JSONObject message = new JSONObject();
|
|
|
-// message.put("title", goods.getTitle());
|
|
|
-// message.put("homeImage", goods.getHomeImage());
|
|
|
-// message.put("tradeId", trade.getId());
|
|
|
-// message.put("transactionAmount", trade.getTransactionAmount());
|
|
|
-// message.put("transactionLatitudeLongitude", trade.getTransactionLatitudeLongitude());
|
|
|
-// message.put("transactionLatitudeLongitudeAddress", trade.getTransactionLatitudeLongitudeAddress());
|
|
|
-// message.put("transactionLocation", trade.getTransactionLocation());
|
|
|
-// message.put("transactionTime", trade.getTransactionTime());
|
|
|
-// message.put("tradeStatus", 3);
|
|
|
-//
|
|
|
-// // 保存消息记录
|
|
|
-// LifeMessage lifeMessage = new LifeMessage();
|
|
|
-// lifeMessage.setSenderId(phoneId);
|
|
|
-// lifeMessage.setReceiverId(receiverId);
|
|
|
-// lifeMessage.setType("4");
|
|
|
-// lifeMessage.setContent(message.toJSONString());
|
|
|
-// lifeMessageMapper.insert(lifeMessage);
|
|
|
-//
|
|
|
-// // 给买家与卖家发送交易消息
|
|
|
-// alienStoreFeign.sendMsgToClientByPhoneId(phoneId, phoneId, receiverId, "message", "4", message.toJSONString(), lifeMessage.getId());
|
|
|
-// alienStoreFeign.sendMsgToClientByPhoneId(receiverId, phoneId, receiverId, "message", "4", message.toJSONString(), lifeMessage.getId());
|
|
|
+ // 发起交易人信息
|
|
|
+ Integer userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
|
|
|
+ String phoneId = JwtUtil.getCurrentUserInfo().getString("userType") + "_" + JwtUtil.getCurrentUserInfo().getString("phone");
|
|
|
+
|
|
|
+ // 获取交易对方信息
|
|
|
+ LifeUser lifeUser = lifeUserMapper.selectById(Objects.equals(userId, trade.getBuyerId()) ? trade.getSellerId() : trade.getBuyerId());
|
|
|
+ String receiverId = "user_" + lifeUser.getUserPhone();
|
|
|
+
|
|
|
+ // 给买家与卖家发送交易消息
|
|
|
+ alienStoreFeign.sendMsgToClientByPhoneId(phoneId, phoneId, receiverId, "message", "4", lastMessageContent.toJSONString(), lastMessage.getId());
|
|
|
+ alienStoreFeign.sendMsgToClientByPhoneId(receiverId, phoneId, receiverId, "message", "4", lastMessageContent.toJSONString(), lastMessage.getId());
|
|
|
|
|
|
return true;
|
|
|
} catch (Exception e) {
|
|
@@ -203,11 +196,11 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public boolean cancelTrade(int tradeId, String cancelReason, String cancelReasonSupplement) throws Exception {
|
|
|
try {
|
|
|
// 发起交易人信息
|
|
|
Integer userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
|
|
|
- String phoneId = JwtUtil.getCurrentUserInfo().getString("userType") + "_" + JwtUtil.getCurrentUserInfo().getString("phone");
|
|
|
|
|
|
// 修改交易状态
|
|
|
SecondTradeRecord tradeRecord = new SecondTradeRecord();
|
|
@@ -221,50 +214,8 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
|
|
|
// 交易信息
|
|
|
SecondTradeRecord trade = secondTradeRecordMapper.selectById(tradeId);
|
|
|
|
|
|
- // 商品信息
|
|
|
- SecondGoods goods = secondGoodsMapper.selectById(trade.getGoodsId());
|
|
|
-
|
|
|
// 发送消息
|
|
|
- sendMsg(goods, trade, 6, "4");
|
|
|
-
|
|
|
-// // 获取交易对方信息
|
|
|
-// LifeUser lifeUser = lifeUserMapper.selectById(Objects.equals(userId, trade.getBuyerId()) ? trade.getSellerId() : trade.getBuyerId());
|
|
|
-// String receiverId = "user_" + lifeUser.getUserPhone();
|
|
|
-//
|
|
|
-// // 封装交易信息
|
|
|
-//
|
|
|
-// JSONObject message = new JSONObject();
|
|
|
-// message.put("title", goods.getTitle());
|
|
|
-// message.put("homeImage", goods.getHomeImage());
|
|
|
-// message.put("tradeId", trade.getId());
|
|
|
-// message.put("transactionAmount", trade.getTransactionAmount());
|
|
|
-// message.put("transactionLatitudeLongitude", trade.getTransactionLatitudeLongitude());
|
|
|
-// message.put("transactionLatitudeLongitudeAddress", trade.getTransactionLatitudeLongitudeAddress());
|
|
|
-// message.put("transactionLocation", trade.getTransactionLocation());
|
|
|
-// message.put("transactionTime", trade.getTransactionTime());
|
|
|
-// message.put("tradeStatus", 6);
|
|
|
-// message.put("cancelUserId", trade.getCancelUserId());
|
|
|
-// message.put("cancelReason", trade.getCancelReason());
|
|
|
-// message.put("cancelReasonSupplement", trade.getCancelReasonSupplement());
|
|
|
-//
|
|
|
-// // 查询字典表
|
|
|
-// LambdaQueryWrapper<StoreDictionary> wrapper = new LambdaQueryWrapper<>();
|
|
|
-// wrapper.eq(StoreDictionary::getTypeName, "cancelTradeReason");
|
|
|
-// wrapper.eq(StoreDictionary::getDictId, trade.getCancelReason());
|
|
|
-// StoreDictionary storeDictionary = storeDictionaryMapper.selectOne(wrapper);
|
|
|
-// message.put("cancelReasonName", null == storeDictionary ? "" : storeDictionary.getDictDetail());
|
|
|
-//
|
|
|
-// // 保存消息记录
|
|
|
-// LifeMessage lifeMessage = new LifeMessage();
|
|
|
-// lifeMessage.setSenderId(phoneId);
|
|
|
-// lifeMessage.setReceiverId(receiverId);
|
|
|
-// lifeMessage.setType("4");
|
|
|
-// lifeMessage.setContent(message.toJSONString());
|
|
|
-// lifeMessageMapper.insert(lifeMessage);
|
|
|
-//
|
|
|
-// // 给买家与卖家发送交易消息
|
|
|
-// alienStoreFeign.sendMsgToClientByPhoneId(phoneId, phoneId, receiverId, "message", "4", message.toJSONString(), lifeMessage.getId());
|
|
|
-// alienStoreFeign.sendMsgToClientByPhoneId(receiverId, phoneId, receiverId, "message", "4", message.toJSONString(), lifeMessage.getId());
|
|
|
+ sendMsg(secondGoodsMapper.selectById(trade.getGoodsId()), trade, 6, "4");
|
|
|
|
|
|
return true;
|
|
|
} catch (Exception e) {
|
|
@@ -274,59 +225,59 @@ public class SecondTradeRecordServiceImpl extends ServiceImpl<SecondTradeRecordM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean tradeSignIn(int tradeId, int messageId) throws Exception {
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean tradeSignIn(int tradeId, int messageId, String signInLatitudeLongitude, String signInLatitudeLongitudeAddress) throws Exception {
|
|
|
try {
|
|
|
- int userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
|
|
|
SecondTradeRecord trade = secondTradeRecordMapper.selectById(tradeId);
|
|
|
+ if (null == trade) return false;
|
|
|
+
|
|
|
+ // 发起交易人信息
|
|
|
+ int userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
|
|
|
+ String phoneId = JwtUtil.getCurrentUserInfo().getString("userType") + "_" + JwtUtil.getCurrentUserInfo().getString("phone");
|
|
|
+
|
|
|
+ // 获取交易对方信息
|
|
|
+ LifeUser lifeUser = lifeUserMapper.selectById(Objects.equals(userId, trade.getBuyerId()) ? trade.getSellerId() : trade.getBuyerId());
|
|
|
+ String receiverId = "user_" + lifeUser.getUserPhone();
|
|
|
+
|
|
|
+ // 保存交易签到信息
|
|
|
SecondTradeRecord record = new SecondTradeRecord();
|
|
|
record.setId(tradeId);
|
|
|
+ Date now = Date.from(LocalDateTime.now().withSecond(0).withNano(0).atZone(ZoneId.systemDefault()).toInstant());
|
|
|
if (userId == trade.getBuyerId()) {
|
|
|
record.setBuyerSignIn(1);
|
|
|
+ record.setBuyerSignInTime(now);
|
|
|
+ record.setBuyerSignInLatitudeLongitude(signInLatitudeLongitude);
|
|
|
+ record.setBuyerSignInLatitudeLongitudeAddress(signInLatitudeLongitudeAddress);
|
|
|
} else if (userId == trade.getSellerId()) {
|
|
|
record.setSellerSignIn(1);
|
|
|
+ record.setSellerSignInTime(now);
|
|
|
+ record.setSellerSignInLatitudeLongitude(signInLatitudeLongitude);
|
|
|
+ record.setSellerSignInLatitudeLongitudeAddress(signInLatitudeLongitudeAddress);
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
secondTradeRecordMapper.updateById(record);
|
|
|
|
|
|
- // 商品信息
|
|
|
- SecondGoods goods = secondGoodsMapper.selectById(trade.getGoodsId());
|
|
|
-
|
|
|
- // 发送消息
|
|
|
- sendMsg(goods, trade, 3, "6");
|
|
|
-
|
|
|
- // 封装交易信息
|
|
|
-// JSONObject message = new JSONObject();
|
|
|
-// message.put("title", goods.getTitle());
|
|
|
-// message.put("homeImage", goods.getHomeImage());
|
|
|
-// message.put("tradeId", trade.getId());
|
|
|
-// message.put("transactionAmount", trade.getTransactionAmount());
|
|
|
-// message.put("transactionLatitudeLongitude", trade.getTransactionLatitudeLongitude());
|
|
|
-// message.put("transactionLatitudeLongitudeAddress", trade.getTransactionLatitudeLongitudeAddress());
|
|
|
-// message.put("transactionLocation", trade.getTransactionLocation());
|
|
|
-// message.put("transactionTime", trade.getTransactionTime());
|
|
|
-// message.put("tradeStatus", 3);
|
|
|
-//
|
|
|
-// // 发起交易人信息
|
|
|
-//// Integer userId = Objects.requireNonNull(JwtUtil.getCurrentUserInfo()).getInteger("userId");
|
|
|
-// String phoneId = JwtUtil.getCurrentUserInfo().getString("userType") + "_" + JwtUtil.getCurrentUserInfo().getString("phone");
|
|
|
-//
|
|
|
-// // 获取交易对方信息
|
|
|
-// LifeUser lifeUser = lifeUserMapper.selectById(Objects.equals(userId, trade.getBuyerId()) ? trade.getSellerId() : trade.getBuyerId());
|
|
|
-// String receiverId = "user_" + lifeUser.getUserPhone();
|
|
|
-//
|
|
|
-// // 消息
|
|
|
-// LifeMessage lifeMessage = new LifeMessage();
|
|
|
-// lifeMessage.setSenderId(phoneId);
|
|
|
-// lifeMessage.setReceiverId(receiverId);
|
|
|
-// lifeMessage.setType("6");
|
|
|
-// lifeMessage.setContent(message.toJSONString());
|
|
|
-// lifeMessageMapper.insert(lifeMessage);
|
|
|
-//
|
|
|
-// // 给买家与卖家发送交易消息
|
|
|
-// alienStoreFeign.sendMsgToClientByPhoneId(phoneId, phoneId, receiverId, "message", "6", message.toJSONString(), lifeMessage.getId());
|
|
|
-// alienStoreFeign.sendMsgToClientByPhoneId(r
|
|
|
-// eceiverId, phoneId, receiverId, "message", "6", message.toJSONString(), lifeMessage.getId());
|
|
|
+ // 删除签到提醒
|
|
|
+ LifeMessage signInMessage = lifeMessageMapper.selectById(messageId);
|
|
|
+ lifeMessageMapper.deleteById(messageId);
|
|
|
+
|
|
|
+ // 发送已签到消息
|
|
|
+ JSONObject messageContent = JSONObject.parseObject(signInMessage.getContent());
|
|
|
+ messageContent.put("tradeId", tradeId);
|
|
|
+ messageContent.put("signInTime", now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
|
|
|
+ messageContent.put("signInLatitudeLongitude", signInLatitudeLongitude);
|
|
|
+ messageContent.put("signInLatitudeLongitudeAddress", signInLatitudeLongitudeAddress);
|
|
|
+ LifeMessage message = new LifeMessage();
|
|
|
+ message.setSenderId(phoneId);
|
|
|
+ message.setReceiverId(receiverId);
|
|
|
+ message.setContent(messageContent.toJSONString());
|
|
|
+ message.setType("6");
|
|
|
+ lifeMessageMapper.insert(message);
|
|
|
+
|
|
|
+ // 推送已签到消息
|
|
|
+ alienStoreFeign.sendMsgToClientByPhoneId(phoneId, phoneId, receiverId, "message", "6", messageContent.toJSONString(), message.getId());
|
|
|
+ alienStoreFeign.sendMsgToClientByPhoneId(receiverId, phoneId, receiverId, "message", "6", messageContent.toJSONString(), message.getId());
|
|
|
|
|
|
return true;
|
|
|
} catch (Exception e) {
|