From 33caf2bb79bb3c561916c91ae386ec772411e2e8 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 11 五月 2026 18:21:50 +0800
Subject: [PATCH] 代码生成
---
server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java | 354 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 321 insertions(+), 33 deletions(-)
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index 04cd73b..13217de 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -21,6 +21,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.GeoUtils;
import com.doumee.core.utils.ID;
import com.doumee.core.utils.geocode.MapUtil;
import com.doumee.core.utils.Utils;
@@ -49,6 +50,7 @@
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -236,7 +238,7 @@
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()), "s2.name", pageWrap.getModel().getTakeShopName());
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsInfo()), Orders::getGoodsInfo, pageWrap.getModel().getGoodsInfo());
queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateStartTime());
- queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateEndTime());
+ queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime()));
queryWrapper.eq(pageWrap.getModel().getDepositShopId() != null, Orders::getDepositShopId, pageWrap.getModel().getDepositShopId());
queryWrapper.eq(pageWrap.getModel().getType() != null, Orders::getType, pageWrap.getModel().getType());
queryWrapper.eq(pageWrap.getModel().getStatus() != null, Orders::getStatus, pageWrap.getModel().getStatus());
@@ -253,6 +255,9 @@
if (o.getStatus() != null) {
Constants.OrderStatus os = Constants.OrderStatus.getByKey(o.getStatus());
o.setStatusDesc(os != null ? os.getValue() : "");
+ }
+ if(Constants.equalsInteger(o.getIsUrgent(),Constants.ZERO)){
+ o.setUrgentAmount(Constants.ZERO.longValue());
}
}
return pageData;
@@ -503,6 +508,7 @@
// 3. 閫愰」璁$畻杩愯垂锛氳捣姝ヤ环 + 瓒呭嚭閮ㄥ垎闃舵浠�
List<ItemPriceVO> itemList = new ArrayList<>();
long itemPriceTotal = 0L;
+ long maxExtraFeeTotal = 0L; // 鏈�澶ц秴鍑鸿窛绂昏垂鐢紙鍗曚环脳鏁伴噺锛�
for (OrderItemDTO item : dto.getItems()) {
PricingRule rule = ruleMap.get(String.valueOf(item.getCategoryId()));
@@ -518,13 +524,15 @@
long extraPricePerUnit = Long.parseLong(rule.getFieldE());
// 闃舵璁′环锛氳窛绂� 鈮� 璧锋璺濈鍙栬捣姝ヤ环锛岃秴鍑烘寜 ceil(瓒呭嚭璺濈/鍗曚綅) 脳 鍗曚环绱姞
+ long extraFee = 0L;
long unitPrice;
if (distanceKm.compareTo(startDistance) <= 0) {
unitPrice = startPrice;
} else {
BigDecimal extraKm = distanceKm.subtract(startDistance);
BigDecimal extraCount = extraKm.divide(extraDistanceUnit, 0, RoundingMode.CEILING);
- unitPrice = startPrice + extraCount.longValue() * extraPricePerUnit;
+ extraFee = extraCount.longValue() * extraPricePerUnit;
+ unitPrice = startPrice + extraFee;
}
long subtotal = unitPrice * item.getQuantity();
@@ -547,8 +555,17 @@
vo.setExtraPrice(extraPricePerUnit);
itemList.add(vo);
- itemPriceTotal += subtotal;
+ // 鎵�鏈夌墿鍝佺殑璧锋浠访楁暟閲� 绱姞
+ itemPriceTotal += startPrice * item.getQuantity();
+ // 璁板綍鏈�澶х殑瓒呭嚭璺濈璐圭敤
+ long extraFeeTotal = extraFee * item.getQuantity();
+ if (extraFeeTotal > maxExtraFeeTotal) {
+ maxExtraFeeTotal = extraFeeTotal;
+ }
}
+
+ // 澶氱墿鍝佹椂鍙姞鏈�澶х殑瓒呭嚭璺濈璐圭敤
+ itemPriceTotal += maxExtraFeeTotal;
// 4. 淇濅环璐圭敤锛氭姤浠烽噾棰� 脳 淇濅环璐圭巼(瀛楀吀 INSURANCE_RATE)锛屽厓鈫掑垎锛堜繚浠烽噾棰�>0鏃惰璐癸級
long insuranceFeeFen = 0L;
@@ -1391,6 +1408,25 @@
}
return urls;
}
+ private List<Multifile> getFileUrlsByidList(List<Integer> orderId, int objType, String prefix) {
+ if(orderId ==null || orderId.size()==0){
+ return null;
+ }
+ List<Multifile> files = multifileMapper.selectList(
+ new QueryWrapper<Multifile>().lambda()
+ .in(Multifile::getObjId, orderId)
+ .eq(Multifile::getObjType, objType)
+ .eq(Multifile::getIsdeleted, Constants.ZERO)
+ .orderByAsc(Multifile::getSortnum));
+ if (files != null) {
+ for (Multifile f : files) {
+ if (StringUtils.isNotBlank(f.getFileurl())) {
+ f.setFileurl(prefix + f.getFileurl());
+ }
+ }
+ }
+ return files;
+ }
/**
* 璁$畻骞惰缃鍗曡柂閰垎閰嶏紙鍙告満銆佸瓨浠堕棬搴椼�佸彇浠堕棬搴楋級
@@ -1412,20 +1448,31 @@
return;
}
Integer cityId = Integer.valueOf(orders.getCityId());
+ boolean isRemote = Constants.equalsInteger(orders.getType(), Constants.ONE);
+ boolean isCompany = Constants.equalsInteger(depositShop.getCompanyType(), Constants.ONE);
- // 鍙告満鍗犳瘮锛歠ieldA=4锛堥厤閫佸憳锛�
+ // 鍙告満鍗犳瘮锛歠ieldA=4锛堥厤閫佸憳锛夛紝濮嬬粓浠庡煄甯傞厤缃彇
BigDecimal driverRata = getRevenueShareRata(cityId, Constants.FOUR);
- // 瀵勪欢闂ㄥ簵鍗犳瘮锛歠ieldA=0(浼佷笟瀵�)/1(涓汉瀵�)
- int depositFieldA = Constants.equalsInteger(depositShop.getCompanyType(), Constants.ONE) ? Constants.ZERO : Constants.ONE;
- BigDecimal depositShopRata = getRevenueShareRata(cityId, depositFieldA);
- // 鍙栦欢闂ㄥ簵鍗犳瘮锛氭棤鍙栦欢闂ㄥ簵鏃舵瘮渚嬩负0
- BigDecimal takeShopRata = BigDecimal.ZERO;
- if (takeShop != null) {
- int takeFieldA = Constants.equalsInteger(takeShop.getCompanyType(), Constants.ONE) ? Constants.TWO : Constants.THREE;
- takeShopRata = getRevenueShareRata(cityId, takeFieldA);
+
+ // 瀛樹欢闂ㄥ簵鍗犳瘮
+ BigDecimal depositShopRata;
+ if (isRemote) {
+ int fallbackFieldA = isCompany ? Constants.ZERO : Constants.ONE;
+ depositShopRata = getShopRevenueShare(depositShop, "remoteDeposit", cityId, fallbackFieldA);
+ } else {
+ int fallbackFieldA = isCompany ? Constants.FIVE : Constants.SIX;
+ depositShopRata = getShopRevenueShare(depositShop, "localDeposit", cityId, fallbackFieldA);
}
- // 璁$畻钖叕锛堝垎锛夛細totalAmount 涓哄垎锛宺ata 涓烘瘮渚嬪�硷紙濡� 0.15 琛ㄧず 15%锛�
+ // 鍙栦欢闂ㄥ簵鍗犳瘮
+ BigDecimal takeShopRata = BigDecimal.ZERO;
+ if (isRemote && takeShop != null) {
+ boolean takeIsCompany = Constants.equalsInteger(takeShop.getCompanyType(), Constants.ONE);
+ int fallbackFieldA = takeIsCompany ? Constants.TWO : Constants.THREE;
+ takeShopRata = getShopRevenueShare(takeShop, "remoteTake", cityId, fallbackFieldA);
+ }
+
+ // 璁$畻钖叕锛堝垎锛�
long driverFee = new BigDecimal(totalAmount).multiply(driverRata).longValue();
long depositShopFee = new BigDecimal(totalAmount).multiply(depositShopRata).longValue();
long takeShopFee = new BigDecimal(totalAmount).multiply(takeShopRata).longValue();
@@ -1442,7 +1489,7 @@
* 浠� pricing_rule 琛ㄨ幏鍙栧垎鎴愭瘮渚嬶紙type=4锛�
*
* @param cityId 鍩庡競涓婚敭
- * @param fieldA 绫诲瀷锛�0=浼佷笟瀵�, 1=涓汉瀵�, 2=浼佷笟鍙�, 3=涓汉鍙�, 4=閰嶉�佸憳
+ * @param fieldA 绫诲瀷锛�0=寮傚湴浼佷笟瀵�, 1=寮傚湴涓汉瀵�, 2=寮傚湴浼佷笟鍙�, 3=寮傚湴涓汉鍙�, 4=閰嶉�佸憳, 5=灏卞湴浼佷笟瀛�, 6=灏卞湴涓汉瀛�
* @return 鍒嗘垚姣斾緥锛堝 0.15 琛ㄧず 15%锛�
*/
private BigDecimal getRevenueShareRata(Integer cityId, int fieldA) {
@@ -1453,10 +1500,35 @@
.eq(PricingRule::getFieldA, String.valueOf(fieldA))
.last("limit 1"));
if (rule != null && StringUtils.isNotBlank(rule.getFieldB())) {
- // fieldB 瀛樺偍鐨勬槸鐧惧垎姣旀暣鏁帮紙濡�15琛ㄧず15%锛夛紝杞崲涓哄皬鏁版瘮渚嬶紙0.15锛�
+ // fieldB 瀛樺偍鐨勬槸鐧惧垎姣旀暟瀛楋紙濡�15琛ㄧず15%锛夛紝杞崲涓哄皬鏁版瘮渚嬶紙0.15锛�
return new BigDecimal(rule.getFieldB()).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP);
}
return BigDecimal.ZERO;
+ }
+
+ /**
+ * 鑾峰彇闂ㄥ簵鏀剁泭鍗犳瘮锛氫紭鍏堜粠闂ㄥ簵 revenueShareConfig 鍙栵紝鏃犲垯鍏滃簳鍩庡競 pricing_rule
+ *
+ * @param shop 闂ㄥ簵淇℃伅
+ * @param jsonKey revenueShareConfig 涓殑閿悕
+ * @param cityId 鍩庡競涓婚敭锛堝厹搴曠敤锛�
+ * @param fallbackFieldA 鍏滃簳 pricing_rule fieldA 鍊�
+ * @return 鍒嗘垚姣斾緥
+ */
+ private BigDecimal getShopRevenueShare(ShopInfo shop, String jsonKey, Integer cityId, int fallbackFieldA) {
+ if (shop != null && StringUtils.isNotBlank(shop.getRevenueShareConfig())) {
+ try {
+ JSONObject config = JSONObject.parseObject(shop.getRevenueShareConfig());
+ if (config != null && config.containsKey(jsonKey)) {
+ Double value = config.getDouble(jsonKey);
+ if (value != null) {
+ return new BigDecimal(value).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP);
+ }
+ }
+ } catch (Exception ignored) {
+ }
+ }
+ return getRevenueShareRata(cityId, fallbackFieldA);
}
@Override
@@ -1496,11 +1568,23 @@
.eq(status != null, Orders::getStatus, status)
.in(statusList != null, Orders::getStatus, statusList)
.orderByDesc(Orders::getCreateTime);
+ // 鍏抽敭璇嶆悳绱細鏀朵欢浜�/鏀朵欢浜虹數璇濇ā绯娿�佽鍗曞彿绮惧噯
+ if (model != null && StringUtils.isNotBlank(model.getKeyword())) {
+ String kw = model.getKeyword().trim();
+ wrapper.and(w -> w.like(Orders::getTakeUser, kw)
+ .or().like(Orders::getTakePhone, kw)
+ .or().eq(Orders::getCode, kw));
+ }
IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
List<MyOrderVO> voList = new ArrayList<>();
- if (orderPage != null && orderPage.getRecords() != null) {
-
+ if (orderPage != null && orderPage.getRecords() != null && orderPage.getRecords().size()>0) {
+ String imgPrefix = getOrdersPrefix();
+ List<Integer> idList =new ArrayList<>();
+ for (Orders o : orderPage.getRecords()) {
+ idList.add(o.getId());
+ }
+ List<Multifile> files = getFileUrlsByidList(idList,Constants.FileType.ORDER_FILE.getKey(), imgPrefix);
for (Orders o : orderPage.getRecords()) {
MyOrderVO vo = new MyOrderVO();
vo.setId(o.getId());
@@ -1545,16 +1629,20 @@
// 璇勪环鐘舵��
vo.setCommentStatus(o.getCommentStatus());
+ //搴忓彿
+ vo.setSortnum(Constants.formatIntegerNum(o.getDepositShopId())+"-"+o.getId());
+ if(o.getTakeShopId()!=null){
+ vo.setSortnumTake(Constants.formatIntegerNum(o.getTakeShopId())+"-"+o.getId());
+ }
// 鏌ヨ鐗╁搧鏄庣粏锛堜竴娆℃煡璇紝鍚屾椂鐢ㄤ簬鐗╁搧鍒楄〃鍜岄�炬湡璁$畻锛�
List<OrdersDetail> details = ordersDetailMapper.selectList(
new QueryWrapper<OrdersDetail>().lambda()
.eq(OrdersDetail::getOrderId, o.getId())
.eq(OrdersDetail::getDeleted, Constants.ZERO));
-
// 鐗╁搧鏄庣粏
vo.setDetailList(buildDetailList(details));
-
+ vo.setOrderImages(getFileUrlsFromList(o.getId(),files));
// 閫炬湡鐘舵��
fillOverdueStatus(vo, o, details);
voList.add(vo);
@@ -1568,6 +1656,22 @@
pageData.setPage(orderPage.getCurrent());
pageData.setCapacity(orderPage.getSize());
return pageData;
+ }
+
+ private List<String> getFileUrlsFromList(Integer id, List<Multifile> files) {
+ List<String> urls = new ArrayList<>();
+ try {
+ if(files!=null){
+ for(Multifile f : files){
+ if(Constants.equalsInteger(f.getObjId(),id)){
+ urls.add(f.getFileurl());
+ }
+ }
+ }
+ }catch (Exception e){
+ }
+
+ return urls;
}
@Override
@@ -1620,8 +1724,20 @@
}
wrapper.eq(status != null, Orders::getStatus, status)
- .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList)
- .orderByDesc(Orders::getId);
+ .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList);
+ if(Objects.nonNull(model.getCombinedStatus())&&Constants.equalsInteger(model.getCombinedStatus(),Constants.OrderCombinedStatus.finished.getKey())){
+ wrapper.orderByDesc(Orders::getFinishTime);
+ }else{
+ wrapper.orderByDesc(Orders::getId);
+ }
+ // 鍏抽敭璇嶆悳绱細鏀朵欢浜�/鏀朵欢浜虹數璇濇ā绯娿�佽鍗曞彿绮惧噯
+ MyOrderDTO shopModel = pageWrap.getModel();
+ if (shopModel != null && StringUtils.isNotBlank(shopModel.getKeyword())) {
+ String kw = shopModel.getKeyword().trim();
+ wrapper.and(w -> w.like(Orders::getTakeUser, kw)
+ .or().like(Orders::getTakePhone, kw)
+ .or().eq(Orders::getCode, kw));
+ }
IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
List<MyOrderVO> voList = new ArrayList<>();
@@ -1674,8 +1790,6 @@
.eq(OrdersDetail::getDeleted, Constants.ZERO));
vo.setDetailList(buildDetailList(details));
-
-
// 閫炬湡鐘舵��
fillOverdueStatus(vo, o, details);
@@ -1775,7 +1889,11 @@
if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.waitPay.getStatus())) {
vo.setPayCountdownMs(calcPayCountdownMs(order));
}
-
+ //搴忓彿
+ vo.setSortnum(Constants.formatIntegerNum(order.getDepositShopId())+"-"+order.getId());
+ if(order.getTakeShopId()!=null){
+ vo.setSortnumTake(Constants.formatIntegerNum(order.getTakeShopId())+"-"+order.getId());
+ }
// 瀛樹欢闂ㄥ簵
if (order.getDepositShopId() != null) {
ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId());
@@ -2163,6 +2281,14 @@
order.setWxExternalNo(wxTradeNo);
order.setPayAmount(order.getTotalAmount());
order.setUpdateTime(now);
+ // 璁$畻搴楅摵璁㈠崟搴忓彿锛氬綋鍓嶅瓨浠堕棬搴楀綋澶╁凡鏀粯璁㈠崟鏁� + 1
+ Date todayStart = DateUtil.getStartOfDay(now);
+ Long currentCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getDepositShopId, order.getDepositShopId())
+ .eq(Orders::getPayStatus, Constants.ONE)
+ .ge(Orders::getPayTime, todayStart)
+ .eq(Orders::getDeleted, Constants.ZERO));
+ order.setAutoNum(currentCount + 1);
// 鐢熸垚浼氬憳鏍搁攢鐮�
order.setMemberVerifyCode(generateVerifyCode());
// 寮傚湴瀵勫瓨锛氳绠楅璁¢�佽揪鏃堕棿
@@ -2391,26 +2517,37 @@
otherOrders.setUpdateTime(now);
otherOrdersMapper.updateById(otherOrders);
- // 4. 鏌ヨ闂ㄥ簵淇℃伅锛堥�氳繃娉ㄥ唽浼氬憳涓婚敭鍏宠仈锛�
+ // 4. 鏌ヨ鍙樻洿鐗堟湰闂ㄥ簵淇℃伅锛堥�氳繃娉ㄥ唽浼氬憳涓婚敭鍏宠仈锛�
ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
.eq(ShopInfo::getRegionMemberId, otherOrders.getMemberId())
.eq(ShopInfo::getDeleted, Constants.ZERO)
+ .eq(ShopInfo::getVersionType, Constants.ONE)
.last("limit 1"));
if (shopInfo == null) {
- throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵鍙樻洿璁板綍涓嶅瓨鍦�");
}
- // 5. 鏇存柊闂ㄥ簵鐘舵�侊細宸叉敮浠樻娂閲�
- shopInfo.setAuditStatus(Constants.THREE); // 3=宸叉敮浠樻娂閲�
+ // 5. 鏇存柊鍙樻洿鐗堟湰鏀粯鐘舵��
+ Member member = memberMapper.selectById(otherOrders.getMemberId());
+ shopInfo.setAuditStatus(Constants.THREE);
shopInfo.setPayStatus(Constants.ONE);
shopInfo.setPayTime(now);
shopInfo.setWxExternalNo(wxTradeNo);
shopInfo.setCode(otherOrders.getCode());
- Member member = memberMapper.selectById(otherOrders.getMemberId());
if (member != null) {
shopInfo.setPayMemberOpenId(member.getOpenid());
}
shopInfo.setUpdateTime(now);
shopInfoMapper.updateById(shopInfo);
+
+ // 6. 鍚屾鏇存柊姝e紡鐗堟湰鐘舵�佷负宸叉敮浠樻娂閲�
+ if (shopInfo.getRelationShopId() != null) {
+ ShopInfo officialShop = shopInfoMapper.selectById(shopInfo.getRelationShopId());
+ if (officialShop != null) {
+ officialShop.setAuditStatus(Constants.THREE);
+ officialShop.setUpdateTime(now);
+ shopInfoMapper.updateById(officialShop);
+ }
+ }
// 鐭俊閫氱煡闂ㄥ簵锛氭垚鍔熷叆椹�
String rawPassword = shopInfo.getTelephone() != null && shopInfo.getTelephone().length() >= 6
@@ -2757,6 +2894,10 @@
}
order.setMemberVerifyCode(generateVerifyCode());
ordersMapper.updateById(order);
+ // 瀵勫瓨鏃跺浘鐗囧繀濉�
+ if (images == null || images.isEmpty()) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇蜂笂浼犲瘎瀛樺浘鐗�");
+ }
// 淇濆瓨瀵勫瓨鍥剧墖锛坥bj_type=2 璁㈠崟瀵勫瓨鍥剧墖锛屾渶澶�3寮狅級
saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId);
// 璁板綍璁㈠崟鏃ュ織
@@ -2794,6 +2935,12 @@
order.setStatus(Constants.OrderStatus.finished.getStatus());
order.setConfirmArriveTime(now);
ordersMapper.updateById(order);
+ // 灏卞湴瀵勫瓨(type=0)鍙栦欢鏃跺浘鐗囦笉蹇呭~锛屽叾浠栫被鍨嬪彇浠跺繀濉�
+ if (!Constants.equalsInteger(order.getType(), Constants.ZERO)) {
+ if (images == null || images.isEmpty()) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇蜂笂浼犲彇浠跺浘鐗�");
+ }
+ }
// 璁㈠崟瀹屾垚锛岄噴鏀炬牳閿�鐮�
String verifyCode = order.getMemberVerifyCode();
if (StringUtils.isNotBlank(verifyCode)) {
@@ -3487,7 +3634,12 @@
return "鍙告満宸插彇浠讹紝姝h繍寰�鐩殑鍦�";
}
if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) {
- return "琛屾潕宸查�佽揪鏈嶅姟鐐癸紝璇峰強鏃跺墠寰�鍙栦欢";
+ if(Constants.equalsInteger(order.getType(),Constants.ZERO)){
+ return "琛屾潕宸插瘎瀛橈紝璇峰嚟鍙栦欢鐮佸墠寰�鎸囧畾闂ㄥ簵鍙栦欢~";
+ }else{
+ return "琛屾潕宸查�佽揪鏈嶅姟鐐癸紝璇峰強鏃跺墠寰�鍙栦欢";
+ }
+
}
if (Constants.equalsInteger(status, Constants.OrderStatus.finished.getStatus())) {
if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) {
@@ -3974,7 +4126,6 @@
"time", String.valueOf(noGrabMinutes));
}
// 鏍囪宸查�氱煡 + 璁板綍閫氱煡鏃堕棿
- order.setPlatformSmsNotified(Constants.ONE);
order.setPlatformSmsNotifiedTime(now);
order.setUpdateTime(now);
ordersMapper.updateById(order);
@@ -4087,6 +4238,9 @@
if (StringUtils.isBlank(phone)) {
return;
}
+ if (!smsNotify.isEnabled()) {
+ return;
+ }
String content = smsNotify.format(paramPairs);
try {
JSONObject templateParam = new JSONObject();
@@ -4131,7 +4285,7 @@
if (!Constants.equalsInteger(orders.getDepositShopId(), shopId)) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠闂ㄥ簵涓嶆槸璇ヨ鍗曠殑瀛樹欢闂ㄥ簵");
}
- if (orders.getStatus() < 2 || orders.getStatus() > 5) {
+ if (orders.getStatus() < 1 || orders.getStatus() > 7) {
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鎵撳嵃");
}
ShopInfo shop = shopInfoMapper.selectById(shopId);
@@ -4152,7 +4306,13 @@
userInfo += "锛�" + phone.substring(phone.length() - 4) + "锛�";
}
}
- String content = printService.getPrintContent(shop.getName(), detailList, userInfo, orders.getCode(), orders.getRemark(),
+
+ //搴忓彿锛氬晢閾篒D-鏃ユ湡-鑷闀垮簭鍙凤紙濡� 32-06-001锛�
+ String dateStr = new SimpleDateFormat("dd").format(orders.getPayTime() != null ? orders.getPayTime() : new Date());
+ String autoNumStr = String.format("%03d", orders.getAutoNum() != null ? orders.getAutoNum() : 0);
+ String sort = shopId + "-" + dateStr + "-" + autoNumStr;
+// String content = printService.getPrintContent(shop.getName(), detailList, userInfo, orders.getCode(), orders.getRemark(),
+ String content = printService.getPrintContent(shop.getName(), detailList, userInfo, orders.getCode(), sort,
orders.getTakeLocationRemark(),
orders.getPayTime() != null ? new SimpleDateFormat("yyyy-MM-dd HH:mm").format(orders.getPayTime()) : "",
orders.getExpectedTakeTime() != null ? new SimpleDateFormat("yyyy-MM-dd HH:mm").format(orders.getExpectedTakeTime()) : "");
@@ -4220,4 +4380,132 @@
JPushUtil.sendByAliases(aliases, title, content, extras);
}
+ @Override
+ public int notifyArrivalPickUp() {
+ String timeStr = operationConfigBiz.getConfig().getArrivalPickUpTime();
+ if (StringUtils.isBlank(timeStr)) {
+ return 0;
+ }
+ int minutes;
+ try {
+ minutes = Integer.parseInt(timeStr);
+ } catch (NumberFormatException e) {
+ log.warn("鍗冲皢鍒拌揪鍙栦欢鏃堕棿閰嶇疆寮傚父: {}", timeStr);
+ return 0;
+ }
+ if (minutes <= 0) {
+ return 0;
+ }
+ // 璁$畻鏃堕棿绐楀彛锛氬綋鍓嶆椂闂� + minutes 灏辨槸"鍗冲皢鍒拌揪"鐨勪复鐣岀偣
+ Date now = new Date();
+ Date threshold = new Date(now.getTime() + (long) minutes * 60 * 1000);
+ // 鏌ヨ锛歴tatus=5銆佹湭閫氱煡銆佸氨鍦板瘎瀛� or 寮傚湴(鏈夊彇浠堕棬搴�)銆侀璁″彇浠舵椂闂村湪 now~threshold 涔嬮棿
+ List<Orders> orders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+ .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus())
+ .eq(Orders::getPayStatus, Constants.ONE)
+ .eq(Orders::getDeleted, Constants.ZERO)
+ .and(w -> w
+ .eq(Orders::getType, Constants.ZERO)
+ .or(w2 -> w2.eq(Orders::getType, Constants.ONE).isNotNull(Orders::getTakeShopId))
+ )
+ .ne(Orders::getPickUpNotifyStatus, Constants.ONE)
+ .isNotNull(Orders::getExpectedTakeTime)
+ .ge(Orders::getExpectedTakeTime, now)
+ .le(Orders::getExpectedTakeTime, threshold));
+ if (orders == null || orders.isEmpty()) {
+ return 0;
+ }
+ int count = 0;
+ for (Orders order : orders) {
+ Member member = memberMapper.selectById(order.getMemberId());
+ if (member != null && StringUtils.isNotBlank(member.getTelephone())) {
+ sendSmsNotify(member.getTelephone(), Constants.SmsNotify.MEMBER_TIME_OUT,
+ "orderNo", order.getCode());
+ }
+ order.setPickUpNotifyStatus(Constants.ONE);
+ ordersMapper.updateById(order);
+ count++;
+ }
+ return count;
+ }
+
+ @Override
+ public Boolean checkOperationRadius(Integer orderId, Integer userId, Integer userType, Double lng, Double lat) {
+ String radiusStr = operationConfigBiz.getConfig().getOperationRadius();
+ if (StringUtils.isBlank(radiusStr)) {
+ return true;
+ }
+ double radiusM;
+ try {
+ radiusM = Double.parseDouble(radiusStr);
+ } catch (NumberFormatException e) {
+ return true;
+ }
+ if (radiusM <= 0) {
+ return true;
+ }
+ Orders order = ordersMapper.selectById(orderId);
+ if (order == null) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟涓嶅瓨鍦�");
+ }
+ BigDecimal targetLat;
+ BigDecimal targetLgt;
+ if (Constants.equalsInteger(userType, Constants.ZERO)) {
+ // 闂ㄥ簵鎿嶄綔
+ if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.waitDeposit.getStatus())) {
+ // status=1 闂ㄥ簵瀵勫瓨鏍搁獙
+ if (!Constants.equalsInteger(order.getDepositShopId(), userId)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+ }
+ targetLat = order.getDepositLat();
+ targetLgt = order.getDepositLgt();
+ } else if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+ // status=5 闂ㄥ簵瀹屾垚鏍搁攢
+ if (Constants.equalsInteger(order.getType(), Constants.ZERO)) {
+ // 灏卞湴瀛樺彇 鈫� 瀵规瘮瀛樹欢闂ㄥ簵
+ if (!Constants.equalsInteger(order.getDepositShopId(), userId)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+ }
+ targetLat = order.getDepositLat();
+ targetLgt = order.getDepositLgt();
+ } else {
+ // 寮傚湴瀛樺彇 鈫� 瀵规瘮鍙栦欢闂ㄥ簵
+ if (!Constants.equalsInteger(order.getTakeShopId(), userId)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+ }
+ targetLat = order.getTakeLat();
+ targetLgt = order.getTakeLgt();
+ }
+ } else {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟鐘舵�佷笉鍏佽姝ゆ搷浣�");
+ }
+ } else if (Constants.equalsInteger(userType, Constants.ONE)) {
+ // 鍙告満鎿嶄綔
+ if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.deposited.getStatus())) {
+ // status=2 鍙告満鍙栦欢
+ if (!Constants.equalsInteger(order.getAcceptDriver(), userId)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+ }
+ targetLat = order.getDepositLat();
+ targetLgt = order.getDepositLgt();
+ } else if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) {
+ // status=4 鍙告満閫佽揪
+ if (!Constants.equalsInteger(order.getAcceptDriver(), userId)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+ }
+ targetLat = order.getTakeLat();
+ targetLgt = order.getTakeLgt();
+ } else {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟鐘舵�佷笉鍏佽姝ゆ搷浣�");
+ }
+ } else {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐢ㄦ埛绫诲瀷涓嶅悎娉�");
+ }
+ if (targetLat == null || targetLgt == null) {
+ return true;
+ }
+ double distanceKm = GeoUtils.haversineDistance(lat, lng, targetLat.doubleValue(), targetLgt.doubleValue());
+ return distanceKm * 1000 <= radiusM;
+ }
+
}
--
Gitblit v1.9.3