|
@@ -2,11 +2,16 @@ package com.pj.tb_goods_transit;
|
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.locks.Lock;
|
|
|
+import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
@@ -44,6 +49,7 @@ import org.apache.poi.hssf.usermodel.HSSFSheet;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.extension.service.IService;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
@@ -53,6 +59,8 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.swing.filechooser.FileSystemView;
|
|
|
|
|
|
+import static com.pj.api.consts.FeignFactory.adminInterface;
|
|
|
+
|
|
|
|
|
|
* Service: tb_goods_transit -- 审核商户在APP端发布的商品
|
|
|
* @author qzy
|
|
@@ -70,40 +78,19 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
|
|
|
|
|
|
@Autowired
|
|
|
private TbGoodsMapper tbGoodsMapper;
|
|
|
-
|
|
|
@Autowired
|
|
|
- private SmsRetryService smsRetryService;
|
|
|
-
|
|
|
+ private TbOrderService tbOrderService;
|
|
|
@Autowired
|
|
|
- private TbGoodsCartService tbGoodsCartService;
|
|
|
-
|
|
|
+ private TbOrderMapper tbOrderMapper;
|
|
|
|
|
|
@Autowired
|
|
|
private TbTradeAreaMapper tbTradeAreaMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private TbOrderMapper tbOrderMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private TbPeopleMapper tbPeopleMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private TbEnterpriseMapper tbEnterpriseMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private TbGoodsCartMapper tbGoodsCartMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private TbOrderService orderService;
|
|
|
+
|
|
|
+ private Lock lock = new ReentrantLock();
|
|
|
|
|
|
- @Autowired
|
|
|
- private MethodOrderService methodOrderService;
|
|
|
-
|
|
|
-
|
|
|
- * 远程调用
|
|
|
- */
|
|
|
- @Autowired
|
|
|
- private AdminInterface adminInterface;
|
|
|
+
|
|
|
+
|
|
|
+ public static final Double QUOTA = 8000.0;
|
|
|
|
|
|
|
|
|
void add(TbGoodsTransit t){
|
|
@@ -154,7 +141,7 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
|
|
|
|
|
|
so.put("tradeAreaId",appLoginInfo.getTradeAreaId());
|
|
|
so.put("merchantId", appLoginInfo.getFk());
|
|
|
- so.put("isOrders",0);
|
|
|
+ so.put("isOrders",IsOrders.IS_ORDERS_ZERO.getCode());
|
|
|
so.set("auditStatus",AuditStatus.AUDIT_STATUS_ON.getCode());
|
|
|
so.put("deleteStatus", DeleteStatus.DELETE_STATUS_ON.getCode());
|
|
|
return tbGoodsTransitMapper.getList(so);
|
|
@@ -204,8 +191,6 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
|
|
|
|
|
|
|
|
|
public boolean transactionGoods(TransactionGoodsParam transactionGoodsParam){
|
|
|
-
|
|
|
-
|
|
|
|
|
|
Double netWeight = transactionGoodsParam.getNetWeight();
|
|
|
Double grossWeight = transactionGoodsParam.getGrossWeight();
|
|
@@ -228,28 +213,28 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
|
|
|
TbGoodsTransit tbGoodsTransit = new TbGoodsTransit();
|
|
|
BeanUtils.copyProperties(transactionGoodsParam,tbGoodsTransit);
|
|
|
|
|
|
- tbGoodsTransit.setTradeAreaName(tbTradeArea.getName());
|
|
|
- tbGoodsTransit.setGoodsName(tbGoods.getName());
|
|
|
- tbGoodsTransit.setDescription(tbGoods.getRemark());
|
|
|
- tbGoodsTransit.setPlaceOrigin(tbGoods.getSource());
|
|
|
- tbGoodsTransit.setGoodsUnits(tbGoods.getUnit());
|
|
|
- tbGoodsTransit.setGoodsType(tbGoods.getTypeNames());
|
|
|
- tbGoodsTransit.setGoodsImg(tbGoods.getAvatar());
|
|
|
+ tbGoodsTransit.setTradeAreaName(tbTradeArea.getName());
|
|
|
+ tbGoodsTransit.setGoodsName(tbGoods.getName());
|
|
|
+ tbGoodsTransit.setDescription(tbGoods.getRemark());
|
|
|
+ tbGoodsTransit.setPlaceOrigin(tbGoods.getSource());
|
|
|
+ tbGoodsTransit.setGoodsUnits(tbGoods.getUnit());
|
|
|
+ tbGoodsTransit.setGoodsType(tbGoods.getTypeNames());
|
|
|
+ tbGoodsTransit.setGoodsImg(tbGoods.getAvatar());
|
|
|
tbGoodsTransit.setGoodsId(tbGoods.getId());
|
|
|
- tbGoodsTransit.setShopId(transactionGoodsParam.getShopId());
|
|
|
- tbGoodsTransit.setShopName(transactionGoodsParam.getShopName());
|
|
|
-
|
|
|
+ tbGoodsTransit.setShopId(transactionGoodsParam.getShopId());
|
|
|
+ tbGoodsTransit.setShopName(transactionGoodsParam.getShopName());
|
|
|
+ tbGoodsTransit.setSellOut(SellOut.SELL_OUT_ZERO.getCode());
|
|
|
|
|
|
- tbGoodsTransit.setMerchantId(appLoginInfo.getFk() + "");
|
|
|
+ tbGoodsTransit.setMerchantId(appLoginInfo.getFk() + "");
|
|
|
|
|
|
- tbGoodsTransit.setMerchantName(appLoginInfo.getLoginName());
|
|
|
+ tbGoodsTransit.setMerchantName(appLoginInfo.getLoginName());
|
|
|
|
|
|
|
|
|
tbGoodsTransit.setDeclareOdd(String.valueOf(tbGoods.getId()));
|
|
|
|
|
|
tbGoodsTransit.setAuditStatus(AuditStatus.AUDIT_STATUS_ON.getCode());
|
|
|
- tbGoodsTransit.setIsOrders(0);
|
|
|
- tbGoodsTransit.setEnterpriseConfirm(EnterpriseConfirm.ENTERPRISE_CONFIRM_ZERO.getCode());
|
|
|
+ tbGoodsTransit.setIsOrders(IsOrders.IS_ORDERS_ZERO.getCode());
|
|
|
+ tbGoodsTransit.setEnterpriseConfirm(ConfirmStatus.CONFIRM_STATUS_ZERO.getCode());
|
|
|
|
|
|
tbGoodsTransit.setCreateTime(new Date());
|
|
|
tbGoodsTransit.setCreateBy(appLoginInfo.getLoginId() + "");
|
|
@@ -284,78 +269,97 @@ public class TbGoodsTransitService extends ServiceImpl<TbGoodsTransitMapper, TbG
|
|
|
}
|
|
|
|
|
|
|
|
|
+ * 一级市场边民的购买操作
|
|
|
* 采购一级市场的商品,
|
|
|
* 包括加入购物车、购买、支付(暂时不做),
|
|
|
* 下单后会向组内边民发送短信,
|
|
|
* 通知其登录APP进行交易确认。
|
|
|
*/
|
|
|
public boolean purchaseLevelOntGoodsTransit(PurchaseLevelOneGoodsTransitParam purchaseLevelOntGoodsTransitParam) throws Exception {
|
|
|
-
|
|
|
-
|
|
|
|
|
|
APPLoginUserInfo appLoginInfo = StpAPPUserUtil.getAPPLoginInfo();
|
|
|
if(appLoginInfo == null || appLoginInfo.getLoginId() == null)
|
|
|
throw new RuntimeException("当前登陆用户信息已失效!");
|
|
|
-
|
|
|
- List<TbPeople> list = tbPeopleMapper.selectList
|
|
|
- (new LambdaQueryWrapper<TbPeople>().eq(TbPeople::getId,appLoginInfo.getFk())
|
|
|
- .eq(TbPeople::getRole, 2)
|
|
|
- .eq(TbPeople::getIsLock, IsLock.IS_LOCK_ON.getCode())
|
|
|
- .eq(TbPeople::getDeleteStatus, DeleteStatus.DELETE_STATUS_ON.getCode()));
|
|
|
- if(list.size() != 1)throw new RuntimeException("您当前不属于互市组组长~");
|
|
|
|
|
|
String goodsTransitId = purchaseLevelOntGoodsTransitParam.getGoodsTransitId();
|
|
|
|
|
|
TbGoodsTransit tbGoodsTransit = tbGoodsTransitMapper.selectById(goodsTransitId);
|
|
|
if(tbGoodsTransit == null || tbGoodsTransit.getId() == null)
|
|
|
throw new RuntimeException("当前商品信息已失效!");
|
|
|
- if(tbGoodsTransit.getGoodsStatus() == GoodsStatus.GOODS_STATUS_OFF.getCode())throw new ServiceException("该商品已下架,无法进行购买!");
|
|
|
+ if(tbGoodsTransit.getGoodsStatus().equals(GoodsStatus.GOODS_STATUS_OFF.getCode()))
|
|
|
+ throw new ServiceException("该商品已下架,无法进行购买!");
|
|
|
+ if(tbGoodsTransit.getSellOut().equals(SellOut.SELL_OUT_ONE.getCode()))
|
|
|
+ throw new ServiceException("该商品已售罄!");
|
|
|
+
|
|
|
+ BigDecimal b = new BigDecimal(tbGoodsTransit.getPrice() * purchaseLevelOntGoodsTransitParam.getNumber());
|
|
|
+ Double totalPrice = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
|
|
|
+
|
|
|
+ if(totalPrice > QUOTA)
|
|
|
+ throw new ServiceException("您当前购物已大于授信额度,请检查购买信息。");
|
|
|
+
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+ LocalDateTime startTime = LocalDateTime.of(today, LocalTime.MIN);
|
|
|
+ LocalDateTime endTime = LocalDateTime.of(today, LocalTime.MAX);
|
|
|
+ List<TbOrder> tbOrderList = tbOrderMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<TbOrder>()
|
|
|
+ .eq(TbOrder::getCreateBy, appLoginInfo.getLoginId())
|
|
|
+ .between(TbOrder::getCreateTime,startTime,endTime)
|
|
|
+ .eq(TbOrder::getDeleteStatus,DeleteStatus.DELETE_STATUS_ON.getCode()));
|
|
|
+ if(tbOrderList.size() != 0)throw new RuntimeException("当天已下订单,暂时无法继续下单!");
|
|
|
|
|
|
Long goodsId = tbGoodsTransit.getGoodsId();
|
|
|
TbGoods tbGoods = tbGoodsMapper.selectById(goodsId);
|
|
|
if(tbGoods == null)throw new RuntimeException("当前商品海关已不允许销售!");
|
|
|
-
|
|
|
-
|
|
|
- LambdaQueryWrapper<TbOrder> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
- queryWrapper.eq(TbOrder::getBuyUserId,appLoginInfo.getFk());
|
|
|
- queryWrapper.apply("DATE(create_time) = DATE({0})", new Date());
|
|
|
- queryWrapper.ne(TbOrder::getEnterpriseConfirm,2);
|
|
|
- queryWrapper.eq(TbOrder::getCancelPeople,0);
|
|
|
- List<TbOrder> orderList = tbOrderMapper.selectList(queryWrapper);
|
|
|
- if(orderList.size() != 0){
|
|
|
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
- TbOrder tbOrder = orderList.get(0);
|
|
|
- throw new ServiceException("您在 " + sdf.format(tbOrder.getCreateTime()) + " 已下单,请勿重复下单。");
|
|
|
- }
|
|
|
-
|
|
|
- TbOrder tbOrder = methodGoodsTransitService.setTbOrderProperties(tbGoodsTransit, appLoginInfo);
|
|
|
-
|
|
|
- int insert = tbOrderMapper.insert(tbOrder);
|
|
|
- if(insert == 1){
|
|
|
-
|
|
|
- tbGoodsCartMapper.deleteById(purchaseLevelOntGoodsTransitParam.getGoodsCartId());
|
|
|
-
|
|
|
- tbGoodsTransit.setIsOrders(1);
|
|
|
+
|
|
|
+ if(tbGoodsTransit.getStock() == 0.0)throw new ServiceException("当前商品已售罄!");
|
|
|
+
|
|
|
+ if(purchaseLevelOntGoodsTransitParam.getNumber() > tbGoodsTransit.getStock())
|
|
|
+ throw new ServiceException("购买数量已超上限!");
|
|
|
+ try{
|
|
|
+
|
|
|
+ lock.lock();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ tbGoodsTransit.setStock(tbGoodsTransit.getStock() - purchaseLevelOntGoodsTransitParam.getNumber());
|
|
|
+
|
|
|
+ if(new BigDecimal(tbGoodsTransit.getStock()).compareTo(new BigDecimal(0.0)) < 0)
|
|
|
+ throw new ServiceException("购买异常!");
|
|
|
+ if(new BigDecimal(tbGoodsTransit.getStock()).compareTo(new BigDecimal(0.0)) == 0)
|
|
|
+ tbGoodsTransit.setSellOut(SellOut.SELL_OUT_ONE.getCode());
|
|
|
+
|
|
|
int updateById = tbGoodsTransitMapper.updateById(tbGoodsTransit);
|
|
|
-
|
|
|
if(updateById == 1){
|
|
|
-
|
|
|
- TbEnterprise tbEnterprise = tbEnterpriseMapper.selectById(tbGoodsTransit.getMerchantId());
|
|
|
- if(tbEnterprise == null)throw new RuntimeException("商家不存在!");
|
|
|
-
|
|
|
-
|
|
|
- MessageDto dto = new MessageDto();
|
|
|
- dto.setUrl("/pages/market/one/merchant/order/list");
|
|
|
- dto.setUserId(tbEnterprise.getId());
|
|
|
- dto.setContents("你的发布的《" + tbGoodsTransit.getGoodsName() + "》已有人接单,请及时确认。");
|
|
|
- adminInterface.messageSave(dto);
|
|
|
-
|
|
|
- methodOrderService.sendGroupMessage(list.get(0).getGroupId(),list.get(0).getName(),true);
|
|
|
-
|
|
|
-
|
|
|
- return true;
|
|
|
+
|
|
|
+ tbGoodsTransit.setPrice(totalPrice);
|
|
|
+ TbOrder tbOrder = methodGoodsTransitService.setTbOrderProperties(tbGoodsTransit, appLoginInfo);
|
|
|
+ boolean save = tbOrderService.save(tbOrder);
|
|
|
+ if(save){
|
|
|
+
|
|
|
+
|
|
|
+ MessageDto dto = new MessageDto();
|
|
|
+ dto.setUrl("/pages/market/one/merchant/order/list");
|
|
|
+ dto.setUserId(Long.valueOf(tbGoodsTransit.getCreateBy()));
|
|
|
+ dto.setContents("你的商品 <<" + tbGoodsTransit.getGoodsName() + ">> " +
|
|
|
+ "已出售"+ purchaseLevelOntGoodsTransitParam.getNumber() +
|
|
|
+ tbGoodsTransit.getGoodsUnits() + "还剩 "+ tbGoodsTransit.getStock() +
|
|
|
+ tbGoodsTransit.getGoodsUnits() +",请前往查看。");
|
|
|
+
|
|
|
+ adminInterface.messageSave(dto);
|
|
|
+
|
|
|
+ dto.setUrl("/pages/market/one/merchant/order/list");
|
|
|
+ dto.setUserId(appLoginInfo.getLoginId());
|
|
|
+ dto.setContents("购买商品 <<" + tbGoodsTransit.getGoodsName() + ">>成功!");
|
|
|
+ adminInterface.messageSave(dto);
|
|
|
+ }
|
|
|
}
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }finally {
|
|
|
+
|
|
|
+ lock.unlock();
|
|
|
}
|
|
|
+
|
|
|
throw new RuntimeException("订单预创建异常!");
|
|
|
}
|
|
|
|