فهرست منبع

联合丽格1.0.2

huangzhiguo 1 سال پیش
والد
کامیت
e8e92e067f
35فایلهای تغییر یافته به همراه1201 افزوده شده و 359 حذف شده
  1. 7 2
      pom.xml
  2. 37 38
      src/main/java/com/caimei365/order/components/OrderCommonService.java
  3. 65 0
      src/main/java/com/caimei365/order/components/OssService.java
  4. 10 12
      src/main/java/com/caimei365/order/components/ProductService.java
  5. 1 1
      src/main/java/com/caimei365/order/constant/Constant.java
  6. 0 10
      src/main/java/com/caimei365/order/controller/OrderSubmitApi.java
  7. 54 0
      src/main/java/com/caimei365/order/controller/ShipApi.java
  8. 6 0
      src/main/java/com/caimei365/order/mapper/CartClubMapper.java
  9. 1 1
      src/main/java/com/caimei365/order/mapper/OrderClubMapper.java
  10. 7 0
      src/main/java/com/caimei365/order/mapper/OrderCommonMapper.java
  11. 57 0
      src/main/java/com/caimei365/order/mapper/ShipMapper.java
  12. 28 0
      src/main/java/com/caimei365/order/model/dto/OrderRemarkDto.java
  13. 33 0
      src/main/java/com/caimei365/order/model/dto/OssFileDto.java
  14. 18 0
      src/main/java/com/caimei365/order/model/dto/RemarkImageDto.java
  15. 4 0
      src/main/java/com/caimei365/order/model/po/OrderShopPo.java
  16. 6 2
      src/main/java/com/caimei365/order/model/vo/CartItemVo.java
  17. 28 0
      src/main/java/com/caimei365/order/model/vo/CartShopVo.java
  18. 21 0
      src/main/java/com/caimei365/order/model/vo/ShopOrderVo.java
  19. 13 0
      src/main/java/com/caimei365/order/service/ShipService.java
  20. 0 6
      src/main/java/com/caimei365/order/service/SubmitService.java
  21. 92 31
      src/main/java/com/caimei365/order/service/impl/CartClubServiceImpl.java
  22. 29 6
      src/main/java/com/caimei365/order/service/impl/CartSellerServiceImpl.java
  23. 12 0
      src/main/java/com/caimei365/order/service/impl/HeliPayServiceImpl.java
  24. 14 14
      src/main/java/com/caimei365/order/service/impl/OrderClubServiceImpl.java
  25. 97 3
      src/main/java/com/caimei365/order/service/impl/ShipServiceImpl.java
  26. 173 196
      src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java
  27. 243 0
      src/main/java/com/caimei365/order/utils/OSSUtils.java
  28. 9 6
      src/main/resources/mapper/BaseMapper.xml
  29. 44 21
      src/main/resources/mapper/CartClubMapper.xml
  30. 4 4
      src/main/resources/mapper/CartSellerMapper.xml
  31. 1 1
      src/main/resources/mapper/MessagePushMapper.xml
  32. 1 1
      src/main/resources/mapper/OrderClubMapper.xml
  33. 15 2
      src/main/resources/mapper/OrderCommonMapper.xml
  34. 69 0
      src/main/resources/mapper/ShipMapper.xml
  35. 2 2
      src/main/resources/mapper/SubmitMapper.xml

+ 7 - 2
pom.xml

@@ -166,7 +166,12 @@
             <artifactId>hutool-crypto</artifactId>
             <version>5.7.16</version>
         </dependency>
-
+        <!--对象存储oss-->
+        <dependency>
+            <groupId>com.aliyun.oss</groupId>
+            <artifactId>aliyun-sdk-oss</artifactId>
+            <version>3.10.2</version>
+        </dependency>
 
 
 
@@ -242,4 +247,4 @@
         </plugins>
     </build>
 
-</project>
+</project>

+ 37 - 38
src/main/java/com/caimei365/order/components/OrderCommonService.java

@@ -68,9 +68,9 @@ public class OrderCommonService {
         String[] shopOrderIdArr = order.getShopOrderIds().split(",");
         List<String> shopOrderIds = Arrays.asList(shopOrderIdArr);
         List<ShopOrderVo> shopOrderList = orderCommonMapper.getShopOrderList(shopOrderIds);
-        // 冷链商品类型
-        List<Integer> arrList = new ArrayList<>();
         shopOrderList.forEach(shopOrder -> {
+            // 冷链商品类型
+            List<Integer> arrList = new ArrayList<>();
             // 店铺促销活动
             PromotionsVo shopPromotion = null;
             if (null != shopOrder.getOrderPromotionsId() && shopOrder.getOrderPromotionsId() > 0) {
@@ -82,9 +82,9 @@ public class OrderCommonService {
             // 冷链商品判定
             List<Integer> collect = orderProductList.stream().map(OrderProductVo::getProductId).collect(Collectors.toList());
             collect.removeIf(c -> c == 999);
-            if (collect.stream().allMatch(c -> c == 7881)) {
+            if (collect.stream().allMatch(c -> c == 7536)) {
                 arrList.add(1);
-            } else if (!collect.contains(7881)) {
+            } else if (!collect.contains(7536)) {
                 arrList.add(2);
             } else {
                 arrList.add(3);
@@ -125,47 +125,46 @@ public class OrderCommonService {
                     }
                 }
             });
-            shopOrder.setOrderProductList(orderProductList);
-            shopOrder.setShopLogo(ImageUtil.getImageUrl("shopLogo", shopOrder.getShopLogo(), domain));
-            if (0 == order.getOnlinePayFlag()) {
-                shopOrder.setObligation(MathUtil.sub(shopOrder.getRealPay(), shopOrder.getReceiptAmount()).doubleValue());
-            }
             // 冷链运输费 -- 联合丽格
             if (null != shopOrder.getIsColdChina() && 1 == shopOrder.getIsColdChina()) {
-                order.setColdChina(700.00d);
-                order.setIsColdChina(shopOrder.getIsColdChina());
+                shopOrder.setColdChina(700.00d);
             } else {
-                order.setColdChina(0.00d);
-                order.setIsColdChina(0);
+                shopOrder.setColdChina(0.00d);
             }
-        });
-        // 拼接运费信息--联合丽格
-        if (null != order.getColdChina()) {
-            String open = "";
-            String close = "";
-            if (order.getIsColdChina()==1) {
-                open = "(";
-                close = ")";
-            } else if (!arrList.stream().allMatch(c -> c == 1)) {
-                open = "(";
-                close = ")";
+            // 拼接运费信息--联合丽格
+            if (null != shopOrder.getColdChina()) {
+                String open = "";
+                String close = "";
+                if (shopOrder.getIsColdChina()==1) {
+                    open = "(";
+                    close = ")";
+                } else if (!arrList.stream().allMatch(c -> c == 1)) {
+                    open = "(";
+                    close = ")";
+                } else {
+                    open = "";
+                    close = "";
+                }
+                if (-1 == shopOrder.getShopPostFlag()) {
+                    // 到付
+                    shopOrder.setPostageInfo("¥" + shopOrder.getShopPostFee().doubleValue() + open +(shopOrder.getIsColdChina()==1?"冷链费: ¥" + shopOrder.getColdChina().doubleValue():"") + (arrList.stream().allMatch(c -> c == 1)?"":" 其他: 到付")+close);
+                } else if (0 == shopOrder.getShopPostFlag()) {
+                    // 包邮
+                    shopOrder.setPostageInfo("¥" + shopOrder.getShopPostFee().doubleValue() + open +(shopOrder.getIsColdChina()==1?"冷链费: ¥" + shopOrder.getColdChina().doubleValue():"") + (arrList.stream().allMatch(c -> c == 1)?"":" 其他: 包邮")+close);
+                } else {
+                    // 有运费
+                    shopOrder.setPostageInfo("¥" + shopOrder.getShopPostFee().doubleValue() + open +(shopOrder.getIsColdChina()==1?"冷链费: ¥" + shopOrder.getColdChina().doubleValue():"") + (!arrList.stream().allMatch(c -> c == 1)?" 其他: ¥" + MathUtil.sub(order.getPostage(), order.getColdChina()).doubleValue():"") + close);
+                }
             } else {
-                open = "";
-                close = "";
+                shopOrder.setPostageInfo(shopOrder.getShopPostFlag() == -1?"到付":shopOrder.getShopPostFlag() == 0?"包邮":"¥" + shopOrder.getShopPostFee().doubleValue());
             }
-            if (-1 == order.getPostageFlag()) {
-                // 到付
-                order.setPostageInfo("¥" + order.getPostage().doubleValue() + open +(order.getIsColdChina()==1?"冷链费: ¥" + order.getColdChina().doubleValue():"") + (arrList.stream().allMatch(c -> c == 1)?"":" 其他: 到付")+close);
-            } else if (0 == order.getPostageFlag()) {
-                // 包邮
-                order.setPostageInfo("¥" + order.getPostage().doubleValue() + open +(order.getIsColdChina()==1?"冷链费: ¥" + order.getColdChina().doubleValue():"") + (arrList.stream().allMatch(c -> c == 1)?"":" 其他: 包邮")+close);
-            } else {
-                // 有运费
-                order.setPostageInfo("¥" + order.getPostage().doubleValue() + open +(order.getIsColdChina()==1?"冷链费: ¥" + order.getColdChina().doubleValue():"") + (!arrList.stream().allMatch(c -> c == 1)?" 其他: ¥" + MathUtil.sub(order.getPostage(), order.getColdChina()).doubleValue():"") + close);
+            shopOrder.setOrderProductList(orderProductList);
+            shopOrder.setShopLogo(ImageUtil.getImageUrl("shopLogo", shopOrder.getShopLogo(), domain));
+            if (0 == order.getOnlinePayFlag()) {
+                shopOrder.setObligation(MathUtil.sub(shopOrder.getRealPay(), shopOrder.getReceiptAmount()).doubleValue());
             }
-        } else {
-            order.setPostageInfo(order.getPostage().doubleValue() == -1?"到付":order.getPostageFlag() == 0?"包邮":"¥" + order.getPostage().doubleValue());
-        }
+
+        });
         // 过滤运费商品
         shopOrderList.removeIf(shopOrder -> shopOrder.getShopId() == 998);
         order.setShopOrderList(shopOrderList);

+ 65 - 0
src/main/java/com/caimei365/order/components/OssService.java

@@ -0,0 +1,65 @@
+package com.caimei365.order.components;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+
+/**
+ * @author zzj
+ */
+@Slf4j
+@Service
+public class OssService {
+
+    public void download(HttpServletRequest request, HttpServletResponse response, String fileName) throws IOException {
+        File file = new File("./" + fileName);
+        //  文件存在才下载
+        if (file.exists()) {
+            OutputStream out = null;
+            FileInputStream in = null;
+            try {
+                // 1.读取要下载的内容
+                in = new FileInputStream(file);
+
+                // 2. 告诉浏览器下载的方式以及一些设置
+                // 解决文件名乱码问题,获取浏览器类型,转换对应文件名编码格式,IE要求文件名必须是utf-8, firefo要求是iso-8859-1编码
+                String agent = request.getHeader("user-agent");
+                if (agent.contains("FireFox")) {
+                    fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
+                } else {
+                    fileName = URLEncoder.encode(fileName, "UTF-8");
+                }
+                // 设置下载文件的mineType,告诉浏览器下载文件类型
+                String mineType = request.getServletContext().getMimeType(fileName);
+                response.setContentType(mineType);
+                // 设置一个响应头,无论是否被浏览器解析,都下载
+                response.setHeader("Content-disposition", "attachment; filename=" + fileName);
+                // 将要下载的文件内容通过输出流写到浏览器
+                out = response.getOutputStream();
+                int len = 0;
+                byte[] buffer = new byte[1024];
+                while ((len = in.read(buffer)) > 0) {
+                    out.write(buffer, 0, len);
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            } finally {
+                if (out != null) {
+                    out.close();
+                }
+                if (in != null) {
+                    in.close();
+                }
+                file.delete();
+            }
+        }
+    }
+}

+ 10 - 12
src/main/java/com/caimei365/order/components/ProductService.java

@@ -192,7 +192,7 @@ public class ProductService {
         Integer organizeId = baseMapper.getOrganizeId(userId);
         // 返回数据初始化
         Map<String, Object> postageMap = new HashMap<>(4);
-        // 运费标志:0包邮 -1到付 1遵循运费规则
+        // 运费标志:0包邮 2到付 1遵循运费规则
         int postageFlag = 0;
         // 运费
         Double postage = 0.00d;
@@ -215,15 +215,13 @@ public class ProductService {
             postageFlagList = baseMapper.getPostageFlagOrganizeList(skuIdList);
         }
         // 是否包含需要冷链运输商品
-        if (0 != organizeId) {
-            List<Integer> collect = postageFlagList.stream().map(ProductPostageVo::getProductId).collect(Collectors.toList());
-            if (collect.stream().allMatch(c -> c == 7881)) {
-                postageMap.put("designatedFlag", 1);
-            } else if (!collect.contains(7881)) {
-                postageMap.put("designatedFlag", 2);
-            } else {
-                postageMap.put("designatedFlag", 3);
-            }
+        List<Integer> collect = postageFlagList.stream().map(ProductPostageVo::getProductId).collect(Collectors.toList());
+        if (collect.stream().allMatch(c -> c == 7536)) {
+            postageMap.put("designatedFlag", 1);
+        } else if (!collect.contains(7536)) {
+            postageMap.put("designatedFlag", 2);
+        } else {
+            postageMap.put("designatedFlag", 3);
         }
         if (null != postageFlagList && postageFlagList.size() > 0) {
             for (ProductPostageVo postageVo : postageFlagList) {
@@ -232,7 +230,7 @@ public class ProductService {
                     boolean flag = (null == postageVo.getCommodityType() || 2 == postageVo.getCommodityType() || (null != postageVo.getPostageFlag() && 1 == postageVo.getPostageFlag()));
                     if (flag) {
                         // 到付
-                        postageMap.put("postageFlag", -1);
+                        postageMap.put("postageFlag", 2);
                         postageMap.put("postage", 0.00d);
                         return postageMap;
                     } else if (null != postageVo.getPostageFlag() && 2 == postageVo.getPostageFlag()) {
@@ -273,7 +271,7 @@ public class ProductService {
                 postage = 15.00d;
             } else {
                 // 到付
-                postageFlag = -1;
+                postageFlag = 2;
             }
             postageMap.put("postageFlag", postageFlag);
             postageMap.put("postage", postage);

+ 1 - 1
src/main/java/com/caimei365/order/constant/Constant.java

@@ -11,7 +11,7 @@ public class Constant {
     public static final String SIGNATURE_TYPE = "SM3WITHSM2";
     //专票 信息 测试佣金暂入信息  308785626@qq.com vip/二手暂入信息
     public static final String CUSTOMERNUM = "E1807059160";
-    public static final String BCCMERCHANT = "E1807059160";
+    public static final String BCCMERCHANT = "E1807782723";
     //信息的邮箱
     public static final String XX_MAIL = "308785626@qq.com";
 

+ 0 - 10
src/main/java/com/caimei365/order/controller/OrderSubmitApi.java

@@ -81,16 +81,6 @@ public class OrderSubmitApi {
      *
      *              }
      */
-    @PostMapping("/verify")
-    public ResponseJson<Map<String,Object>> verify(SubmitDto submitDto) {
-        if (null == submitDto.getClubId()){
-            return ResponseJson.error("机构Id不能为空!", null);
-        }
-        if (StringUtils.isEmpty(submitDto.getOrderInfo())){
-            return ResponseJson.error("订单商品数据不能为空!", null);
-        }
-        return submitService.verify(submitDto);
-    }
 
 
     @ApiOperation("提交订单(旧:/order/submit)(/seller/order/submit)")

+ 54 - 0
src/main/java/com/caimei365/order/controller/ShipApi.java

@@ -4,6 +4,7 @@ import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.JsonParamsDto;
 import com.caimei365.order.model.dto.LogisticsBatchDto;
 import com.caimei365.order.model.dto.LogisticsDto;
+import com.caimei365.order.model.dto.OrderRemarkDto;
 import com.caimei365.order.model.vo.*;
 import com.caimei365.order.service.ShipService;
 import com.github.pagehelper.PageInfo;
@@ -12,7 +13,11 @@ import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -348,4 +353,53 @@ public class ShipApi {
     public ResponseJson<Void> saveProductQualification(JsonParamsDto jsonParamsDto) {
         return shipService.saveProductQualification(jsonParamsDto);
     }
+
+    /**
+     * 订单备注详情
+     * @param orderId
+     * @return
+     */
+    @ApiOperation("订单备注详情")
+    @GetMapping(value = "/remarksView/{orderId}")
+    public ResponseJson<List<OrderRemarkDto>> remarksView(@PathVariable("orderId") Integer orderId) {
+        List<OrderRemarkDto> remarksList = shipService.findList(orderId);
+        return ResponseJson.success(remarksList);
+    }
+
+    /**
+     * 添加订单备注
+     * @param remark
+     * @return
+     */
+    @ApiOperation("添加订单备注")
+    @PostMapping(value = "/add/remark")
+    public ResponseJson addRemark(@RequestBody OrderRemarkDto remark) {
+        shipService.insertRemark(remark);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 上传备注文件
+     * @param file
+     * @param orderId
+     * @return
+     */
+    @ApiOperation("上传备注文件")
+    @PostMapping("/upload/remark")
+    public ResponseJson<Map<String, Object>> uploadFile(MultipartFile file, Integer orderId) {
+        return shipService.upload(file, orderId);
+    }
+
+    /**
+     * 下载备注文件
+     * @param fileId
+     * @param request
+     * @param response
+     * @throws IOException
+     */
+    @ApiOperation("下载备注文件")
+    @GetMapping("/download/remark")
+    public void downFile(Integer fileId, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        shipService.downFile(fileId, request, response);
+    }
 }

+ 6 - 0
src/main/java/com/caimei365/order/mapper/CartClubMapper.java

@@ -77,6 +77,12 @@ public interface CartClubMapper {
      */
     List<CartShopVo> getCartShopsByProductIds(@Param("userId") Integer userId, @Param("skuIds") List<String> skuIds,@Param("status")Integer status);
 
+    /**
+     * 商品能否退货
+     * @param skuIds
+     * @return
+     */
+    List<CartShopVo> getProductReturnGoodsStutas(@Param("skuIds") List<String> skuIds);
     /**
      * 根据商品ids获取供应商列表
      * @param productIds

+ 1 - 1
src/main/java/com/caimei365/order/mapper/OrderClubMapper.java

@@ -356,7 +356,7 @@ public interface OrderClubMapper {
 
     List<Sku> getOrganizeSku(@Param("productId") Integer productId);
 
-    List<VoucherPo> getVoucher(@Param("orderId") Integer orderId);
+    List<VoucherPo> getVoucher(@Param("shopOrderId") Integer shopOrderId);
 
     List<VoucherImageDto> getVoucherImage(@Param("voucherIds") List<Integer> voucherIds);
 

+ 7 - 0
src/main/java/com/caimei365/order/mapper/OrderCommonMapper.java

@@ -32,6 +32,13 @@ public interface OrderCommonMapper {
      * @param shopOrderIds 子订单Ids
      */
     List<ShopOrderVo> getShopOrderList(@Param("shopOrderIds") List<String> shopOrderIds);
+
+    /**
+     * 子订单是否支付
+     * @param shopOrderId
+     * @return
+     */
+    DiscernReceiptVo getShopOrderReceipt(@Param("shopOrderId") Integer shopOrderId);
     /**
      * 根据Id获取订单促销
      * @param orderPromotionsId 订单促销Id

+ 57 - 0
src/main/java/com/caimei365/order/mapper/ShipMapper.java

@@ -1,5 +1,8 @@
 package com.caimei365.order.mapper;
 
+import com.caimei365.order.model.dto.OrderRemarkDto;
+import com.caimei365.order.model.dto.OssFileDto;
+import com.caimei365.order.model.dto.RemarkImageDto;
 import com.caimei365.order.model.po.*;
 import com.caimei365.order.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
@@ -208,4 +211,58 @@ public interface ShipMapper {
     void updateLogisticsRecordSn(Integer recordId, String sn);
 
     Integer getUserIdByShopId(Integer shopId);
+
+    /**
+     * 订单备注
+     * @param orderId
+     * @return
+     */
+    List<OrderRemarkDto> findList(Integer orderId);
+
+    /**
+     * 插入订单备注
+     * @param remark
+     */
+    void insert(OrderRemarkDto remark);
+
+    /**
+     * 修改订单备注
+     * @param remark
+     */
+    void update(OrderRemarkDto remark);
+
+    /**
+     * 订单备注图
+     * @param id
+     * @return
+     */
+    List<String> findImages(Integer id);
+
+    /**
+     * 订单备注文件
+     * @param id
+     * @return
+     */
+    List<OssFileDto> findFiles(Integer id);
+
+    OssFileDto findFileByMd5(String md5Hex);
+
+    /**
+     * 订单备注 -- Id查询
+     * @param fileId
+     * @return
+     */
+    OssFileDto findRemarkById(Integer fileId);
+
+    /**
+     * 插入订单备注图
+     * @param i
+     */
+    void insertImage(RemarkImageDto i);
+
+    /**
+     * 插入订单备注文件信息
+     * @param o
+     */
+    void insertFile(OssFileDto o);
 }

+ 28 - 0
src/main/java/com/caimei365/order/model/dto/OrderRemarkDto.java

@@ -0,0 +1,28 @@
+package com.caimei365.order.model.dto;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/6/12
+ */
+@Data
+public class OrderRemarkDto implements Serializable {
+
+    private Integer id;
+    private Integer orderId;
+    private Integer shopOrderId;
+    private Integer createBy;
+    private String remarks;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String createDate;
+    private String createName;
+    private List<String> images;
+    private List<OssFileDto> ossFiles;
+}

+ 33 - 0
src/main/java/com/caimei365/order/model/dto/OssFileDto.java

@@ -0,0 +1,33 @@
+package com.caimei365.order.model.dto;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/6/12
+ */
+@Data
+public class OssFileDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Integer id;
+
+    private Integer orderId;
+
+    private Integer remarkId;
+
+    private String name;
+
+    private String ossName;
+
+    private String md5Hex;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private String uploadTime;
+}

+ 18 - 0
src/main/java/com/caimei365/order/model/dto/RemarkImageDto.java

@@ -0,0 +1,18 @@
+package com.caimei365.order.model.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/6/12
+ */
+@Data
+public class RemarkImageDto implements Serializable {
+    private Integer orderId;
+    private Integer remarkId;
+    private String remarkImage;
+}

+ 4 - 0
src/main/java/com/caimei365/order/model/po/OrderShopPo.java

@@ -129,6 +129,10 @@ public class OrderShopPo implements Serializable {
      * 付供应商 运费
      */
     private Double shopPostFee;
+    /**
+     * 免邮标志  运费:-1到付,0包邮,1需要运费,-2仪器到付其它包邮
+     */
+    private Integer shopPostFlag;
     /**
      * 付供应商税费
      */

+ 6 - 2
src/main/java/com/caimei365/order/model/vo/CartItemVo.java

@@ -182,7 +182,11 @@ public class CartItemVo implements Serializable {
      */
     private String  helpContent;
     /**
-     * 
+     * 冷链
      */
-    private Map<String, Object> postageMap;
+    private Double coldChain;
+    /**
+     * 运费标志:0包邮 2到付 1遵循运费规则
+     */
+    private Integer postageFlag;
 }

+ 28 - 0
src/main/java/com/caimei365/order/model/vo/CartShopVo.java

@@ -78,4 +78,32 @@ public class CartShopVo implements Serializable {
      * 特殊商品退货须知提示  (取后台帮助中心id1040的数据)
      */
     private String  helpContent;
+    /**
+     * 冷链费
+     */
+    private Double coldChain;
+    /**
+     * 运费标志:0包邮 2到付 1遵循运费规则
+     */
+    private Integer postageFlag;
+    /**
+     * 运费
+     */
+    private Double postage;
+    /**
+     * 总运费
+     */
+    private Double allPostage;
+    /**
+     * 可用采美豆
+     */
+    private Integer userBeans;
+    /**
+     * 是否包含需要冷链运输商品
+     */
+    private Integer designatedFlag;
+    /**
+     * 是否勾选冷链费
+     */
+    private Boolean isColdChina;
 }

+ 21 - 0
src/main/java/com/caimei365/order/model/vo/ShopOrderVo.java

@@ -1,5 +1,6 @@
 package com.caimei365.order.model.vo;
 
+import com.caimei365.order.model.po.VoucherPo;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -51,6 +52,14 @@ public class ShopOrderVo implements Serializable {
      * 冷链费用标记
      */
     private Integer isColdChina;
+    /**
+     * 冷链费
+     */
+    private Double coldChina;
+    /**
+     * 运费--联合丽格
+     */
+    private String postageInfo;
     /**
      * 订单编号
      */
@@ -151,6 +160,10 @@ public class ShopOrderVo implements Serializable {
      * 付供应商 运费
      */
     private Double shopPostFee;
+    /**
+     * 免邮标志  运费:-1到付,0包邮,1需要运费,-2仪器到付其它包邮
+     */
+    private Integer shopPostFlag;
     /**
      * 付供应商税费
      */
@@ -263,4 +276,12 @@ public class ShopOrderVo implements Serializable {
      * 是否使用余额 0否 1是
      */
    private Integer useBalanceFlag;
+    /**
+     * 支付凭证
+     */
+   private List<VoucherPo> voucher;
+    /**
+     * 能否线上
+     */
+   private Integer onlinePay;
 }

+ 13 - 0
src/main/java/com/caimei365/order/service/ShipService.java

@@ -4,10 +4,15 @@ import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.JsonParamsDto;
 import com.caimei365.order.model.dto.LogisticsBatchDto;
 import com.caimei365.order.model.dto.LogisticsDto;
+import com.caimei365.order.model.dto.OrderRemarkDto;
 import com.caimei365.order.model.vo.*;
 import com.github.pagehelper.PageInfo;
 import org.springframework.http.HttpHeaders;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -155,4 +160,12 @@ public interface ShipService {
      *                         }, {}]
      */
     ResponseJson<Void> saveProductQualification(JsonParamsDto jsonParamsDto);
+
+    List<OrderRemarkDto> findList(Integer orderId);
+
+    void insertRemark(OrderRemarkDto remark);
+
+    ResponseJson<Map<String, Object>> upload(MultipartFile file, Integer orderId);
+
+    void downFile(Integer fileId, HttpServletRequest request, HttpServletResponse response) throws IOException;
 }

+ 0 - 6
src/main/java/com/caimei365/order/service/SubmitService.java

@@ -13,12 +13,6 @@ import java.util.Map;
  * @date : 2021/7/6
  */
 public interface SubmitService {
-    /**
-     * 验证是否有购买资格
-     * @param submitDto
-     * @return
-     */
-    ResponseJson<Map<String,Object>> verify(SubmitDto submitDto);
     /**
      * 生成订单
      */

+ 92 - 31
src/main/java/com/caimei365/order/service/impl/CartClubServiceImpl.java

@@ -944,8 +944,6 @@ public class CartClubServiceImpl implements CartClubService {
         List<Integer> promotionsIds = new ArrayList<>();
         // 供应商Id集合,用户判断赠品供应商是否在当前供应商中
         List<Integer> shopIds = new ArrayList<>();
-        // 运费sku
-        List<String> skuIdp = new ArrayList<>();
         // 用户身份
         Integer userIdentity = baseMapper.getIdentityByUserId(userId);
         if (null == userIdentity) {
@@ -979,6 +977,7 @@ public class CartClubServiceImpl implements CartClubService {
         if (firstSize != shopList.size()) {
             shopList = cartClubMapper.getCartShopsByProductIds(userId, skuIdList, 2);
         }
+        List<CartShopVo> goodsStutas = cartClubMapper.getProductReturnGoodsStutas(skuIdList);
         String helpContent = null;
         boolean flag = false;
         if (null != shopList && shopList.size() > 0) {
@@ -987,9 +986,9 @@ public class CartClubServiceImpl implements CartClubService {
             Integer finalUserIdentity = userIdentity;
             Integer finalUserClubType = userClubType;
             Integer finalUserIdentity1 = userIdentity;
-            for (int i = 0; i < shopList.size(); i++) {
+            for (int i = 0; i < goodsStutas.size(); i++) {
                 //订单中存在不能退货的商品则给出不能退货提示
-                if (null != shopList.get(i).getReturnGoodsStutas() && shopList.get(i).getReturnGoodsStutas() == 2) {
+                if (null != goodsStutas.get(i).getReturnGoodsStutas() && goodsStutas.get(i).getReturnGoodsStutas() == 2) {
                     flag = true;
                     helpContent = cartClubMapper.getHelpContent(1040);
                     break;
@@ -1031,12 +1030,30 @@ public class CartClubServiceImpl implements CartClubService {
                             // 去除库存不足商品
                             productList.removeIf(cartItemVo -> !(cartItemVo.getStock() != null && cartItemVo.getStock() > 0 && cartItemVo.getStock() >= cartItemVo.getMin() && cartItemVo.getStock() >= cartItemVo.getNumber()));
                         }
+                        List<Integer> collect = productList.stream().map(CartItemVo::getSkuId).collect(Collectors.toList());
+                        List<String> skuIdsList = collect.stream().map(String::valueOf).collect(Collectors.toList());
+                        // 设置商品运费
+                        if (null != townId) {
+                            Map<String, Object> postageMap = productService.computePostage(userId, townId, skuIdsList);
+                            shop.setPostage((Double) postageMap.get("postage"));
+                            shop.setPostageFlag((Integer) postageMap.get("postageFlag"));
+                            shop.setUserBeans((Integer) postageMap.get("userBeans"));
+                            shop.setDesignatedFlag((Integer) postageMap.get("designatedFlag"));
+                        }
+                        // 冷链费
+                        Double coldChain = 0d;
                         // 迭代器设置商品信息
                         for (CartItemVo cartItemVo : productList) {
                             // 设置商品运费
-                            skuIdp.add(cartItemVo.getSkuId().toString());
-                            Map<String, Object> postageMap = productService.computePostage(userId, townId, skuIdp);
-                            cartItemVo.setPostageMap(postageMap);
+                            if (7536 == cartItemVo.getProductId()) {
+                                if (cartItemVo.getNumber() >= 100) {
+                                    coldChain = 0d;
+                                } else {
+                                    coldChain = 700d;
+                                    shop.setPostageFlag(1);
+                                    shopPrice.set(MathUtil.add(shopPrice.get(), coldChain).doubleValue());
+                                }
+                            }
                             // 设置商品图片及税费
                             boolean taxFlag = false;
                             if (0 == organizeId) {
@@ -1145,6 +1162,14 @@ public class CartClubServiceImpl implements CartClubService {
                             totalCount.updateAndGet(v -> v + cartItemVo.getNumber());
                         }
 
+                        shop.setColdChain(coldChain);
+                        if (700 >= coldChain) {
+                            shop.setIsColdChina(true);
+                        }
+                        // 供应商总金额
+                        shopPrice.set(MathUtil.add(shopPrice.get(), shop.getPostage()).doubleValue());
+                        // 总运费
+                        shop.setAllPostage(MathUtil.add(shop.getPostage(),coldChain).doubleValue());
                         if (shopKindCount.get() > 0) {
                             // 店铺促销
                             if (null != shopPromotion) {
@@ -1310,7 +1335,7 @@ public class CartClubServiceImpl implements CartClubService {
             double coldChain = 0.00d;
             if (null != totalProductList) {
                 for (CartItemVo cart :totalProductList) {
-                    if (7881 == cart.getProductId()) {
+                    if (7536 == cart.getProductId()) {
                         if (cart.getNumber() >= 100) {
                             coldChain = 0.00d;
                         } else {
@@ -1373,8 +1398,6 @@ public class CartClubServiceImpl implements CartClubService {
         List<String> productIdList = new ArrayList<>();
         //skuIdList
         List<Integer> skuIdList = new ArrayList<>();
-        // 运费sku
-        List<String> skuIds = new ArrayList<>();
         // 用户身份
         Integer userIdentity = baseMapper.getIdentityByUserId(userId);
         if (null == userIdentity) {
@@ -1410,6 +1433,7 @@ public class CartClubServiceImpl implements CartClubService {
 
         // 商品的供应商列表
         List<CartShopVo> shopList = cartClubMapper.getShopsByProductIds(productIdList);
+        List<CartShopVo> goodsStutas = cartClubMapper.getProductReturnGoodsStutas(skuIdList.stream().map(String::valueOf).collect(Collectors.toList()));
         //按供应商分类统计商品
         String helpContent = null;
         boolean flag = false;
@@ -1419,9 +1443,9 @@ public class CartClubServiceImpl implements CartClubService {
             Integer finalUserIdentity = userIdentity;
             Integer finalUserClubType = userClubType;
             Integer finalUserIdentity1 = userIdentity;
-            for (int i = 0; i < shopList.size(); i++) {
+            for (int i = 0; i < goodsStutas.size(); i++) {
                 //订单中存在不能退货的商品则给出不能退货提示
-                if (null != shopList.get(i).getReturnGoodsStutas() && shopList.get(i).getReturnGoodsStutas() == 2) {
+                if (null != goodsStutas.get(i).getReturnGoodsStutas() && goodsStutas.get(i).getReturnGoodsStutas() == 2) {
                     flag = true;
                     helpContent = cartClubMapper.getHelpContent(1040);
                     break;
@@ -1457,12 +1481,31 @@ public class CartClubServiceImpl implements CartClubService {
                         productList.removeIf(cartItemVo -> !(cartItemVo.getPriceFlag() == 0 || (cartItemVo.getPriceFlag() == 2 && (finalUserIdentity == 2 || svipUserFlag)) || (cartItemVo.getPriceFlag() == 3 && finalUserClubType == 1)));
                         // 去除库存不足商品
                         productList.removeIf(cartItemVo -> !(cartItemVo.getStock() != null && cartItemVo.getStock() > 0 && cartItemVo.getStock() >= cartItemVo.getMin() && cartItemVo.getStock() >= cartItemVo.getNumber()));
+                        // 设置商品运费
+                        List<Integer> collect = productList.stream().map(CartItemVo::getSkuId).collect(Collectors.toList());
+                        List<String> skuIdsList = collect.stream().map(String::valueOf).collect(Collectors.toList());
+                        if (null != townId) {
+                            Map<String, Object> postageMap = productService.computePostage(userId, townId, skuIdsList);
+                            shop.setPostage((Double) postageMap.get("postage"));
+                            shop.setPostageFlag((Integer) postageMap.get("postageFlag"));
+                            shop.setUserBeans((Integer) postageMap.get("userBeans"));
+                            shop.setDesignatedFlag((Integer) postageMap.get("designatedFlag"));
+                        }
+                        Double coldChain = 0d;
                         // 迭代器设置商品信息
                         for (CartItemVo cartItemVo : productList) {
                             // 设置商品运费
-                            skuIds.add(cartItemVo.getSkuId().toString());
-                            Map<String, Object> postageMap = productService.computePostage(userId, townId, skuIds);
-                            cartItemVo.setPostageMap(postageMap);
+                            if (null != townId) {
+                                if (7536 == cartItemVo.getProductId()) {
+                                    if (cartItemVo.getNumber() >= 100) {
+                                        coldChain = 0d;
+                                    } else {
+                                        coldChain = 700d;
+                                        shop.setPostageFlag(1);
+                                        shopPrice.set(MathUtil.add(shopPrice.get(), coldChain).doubleValue());
+                                    }
+                                }
+                            }
                             // 设置商品图片及税费
                             boolean taxFlag = productService.setCartItemImgAndTax(cartItemVo);
                             // 是否充值商品
@@ -1556,6 +1599,14 @@ public class CartClubServiceImpl implements CartClubService {
                             totalCount.updateAndGet(v -> v + cartItemVo.getNumber());
                         }
 
+                        shop.setColdChain(coldChain);
+                        if (700 >= coldChain) {
+                            shop.setIsColdChina(true);
+                        }
+                        // 供应商总金额
+                        shopPrice.set(MathUtil.add(shopPrice.get(), shop.getPostage()).doubleValue());
+                        // 总运费
+                        shop.setAllPostage(MathUtil.add(shop.getPostage(),coldChain).doubleValue());
                         if (shopKindCount.get() > 0) {
                             // 店铺促销
                             if (null != shopPromotion) {
@@ -1771,11 +1822,6 @@ public class CartClubServiceImpl implements CartClubService {
                 cartItemVo.setHelpContent(helpContent);
             }
         }
-        // 计算运费
-        List<String> skuIds = new ArrayList<>();
-        skuIds.add(cartDto.getSkuId().toString());
-        Map<String, Object> postageMap = productService.computePostage(cartDto.getUserId(), cartDto.getTownId(), skuIds);
-        cartItemVo.setPostageMap(postageMap);
         // 用户身份
         Integer userIdentity = baseMapper.getIdentityByUserId(cartDto.getUserId());
         if (null == userIdentity) {
@@ -1829,7 +1875,6 @@ public class CartClubServiceImpl implements CartClubService {
         AtomicDouble reducedPrice = new AtomicDouble(0);
         // svip优惠金额
         AtomicDouble svipReducedPrice = new AtomicDouble(0);
-
         // 供应商促销优惠活动
         PromotionsVo promotions = baseMapper.getPromotionByShopId(shop.getShopId());
         if (promotions != null && promotions.getSeen() != null && promotions.getSeen() == 2 && userIdentity == 1) {
@@ -1919,6 +1964,32 @@ public class CartClubServiceImpl implements CartClubService {
                 }
             }
         }
+        // 计算运费
+        Double coldChain = 0d;
+        if (null != cartDto.getTownId()) {
+            List<String> skuIds = new ArrayList<>();
+            skuIds.add(cartDto.getSkuId().toString());
+            Map<String, Object> postageMap = productService.computePostage(cartDto.getUserId(), cartDto.getTownId(), skuIds);
+            shop.setPostage((Double) postageMap.get("postage"));
+            shop.setPostageFlag((Integer) postageMap.get("postageFlag"));
+            shop.setUserBeans((Integer) postageMap.get("userBeans"));
+            shop.setDesignatedFlag((Integer) postageMap.get("designatedFlag"));
+            if (7536 == cartItemVo.getProductId()) {
+                if (cartItemVo.getNumber() >= 100) {
+                    coldChain = 0d;
+                } else {
+                    coldChain = 700d;
+                    shop.setPostageFlag(1);
+                    totalPrice.set(MathUtil.add(totalPrice.get(), coldChain).doubleValue());
+                    shop.setIsColdChina(true);
+                }
+            }
+            shop.setColdChain(coldChain);
+        }
+        // 总运费
+        shop.setAllPostage(MathUtil.add(shop.getPostage(),coldChain).doubleValue());
+        // 供应商总金额
+        totalPrice.set(MathUtil.add(totalPrice.get(), shop.getPostage()).doubleValue());
         // 商品总金额累加
         originalPrice.set(MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getOriginalPrice()).doubleValue());
         totalPrice.set(MathUtil.add(totalPrice.get(), MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice())).doubleValue());
@@ -2015,16 +2086,6 @@ public class CartClubServiceImpl implements CartClubService {
         resultData.put("couponList", couponList);
         // 联合丽格冷链费
         if (0 != organizeId) {
-            double coldChain = 0.00d;
-            if (7881 == cartDto.getProductId()) {
-                if (cartDto.getProductCount() >= 100) {
-                    coldChain = 0.00d;
-                } else {
-                    coldChain = 700.00d;
-                }
-            } else {
-                coldChain = 0.00d;
-            }
             resultData.put("coldChain", coldChain);
         }
         if (flag) {

+ 29 - 6
src/main/java/com/caimei365/order/service/impl/CartSellerServiceImpl.java

@@ -456,8 +456,6 @@ public class CartSellerServiceImpl implements CartSellerService {
         List<Integer> promotionsIds = new ArrayList<>();
         // 供应商Id集合,用户判断赠品供应商是否在当前供应商中
         List<Integer> shopIds = new ArrayList<>();
-        // 运费sku
-        List<String> skuIdp = new ArrayList<>();
         // 前端接收商品Id信息
         List<String> skuIdList = new ArrayList<>();
         if (skuIds.contains(",")) {
@@ -493,12 +491,29 @@ public class CartSellerServiceImpl implements CartSellerService {
                 }
                 // 供应商下商品列表
                 List<CartItemVo> productList = cartSellerMapper.getCartProductsByProductIds(serviceProviderId, clubId, shop.getShopId(), finalIdList);
+                List<Integer> collect = productList.stream().map(CartItemVo::getSkuId).collect(Collectors.toList());
+                List<String> skuIdsList = collect.stream().map(String::valueOf).collect(Collectors.toList());
+                // 设置商品运费
+                if (null != townId) {
+                    Map<String, Object> postageMap = productService.computePostage(clubUserId, townId, skuIdsList);
+                    shop.setPostage((Double) postageMap.get("postage"));
+                    shop.setPostageFlag((Integer) postageMap.get("postageFlag"));
+                    shop.setUserBeans((Integer) postageMap.get("userBeans"));
+                    shop.setDesignatedFlag((Integer) postageMap.get("designatedFlag"));
+                }
+                // 冷链费
+                Double coldChain = 0d;
                 if (null != productList && productList.size() > 0) {
                     for (CartItemVo cartItemVo : productList) {
-                        // 设置商品运费
-                        skuIdp.add(cartItemVo.getSkuId().toString());
-                        Map<String, Object> postageMap = productService.computePostage(clubUserId, townId, skuIdp);
-                        cartItemVo.setPostageMap(postageMap);
+                        if (7536 == cartItemVo.getProductId()) {
+                            if (cartItemVo.getNumber() >= 100) {
+                                coldChain = 0d;
+                            } else {
+                                coldChain = 700d;
+                                shop.setPostageFlag(1);
+                                shopPrice.set(MathUtil.add(shopPrice.get(), coldChain).doubleValue());
+                            }
+                        }
                         // 设置商品图片及税费
                         boolean taxFlag = productService.setCartItemImgAndTax(cartItemVo);
                         // 是否充值商品
@@ -670,6 +685,14 @@ public class CartSellerServiceImpl implements CartSellerService {
                     }
                     totalProductList.addAll(productList);
                 }
+
+                shop.setColdChain(coldChain);
+                if (700 >= coldChain) {
+                    shop.setIsColdChina(true);
+                }
+                // 供应商总金额
+                shopPrice.set(MathUtil.add(shopPrice.get(), coldChain).doubleValue());
+                shop.setAllPostage(MathUtil.add(shop.getPostage(),coldChain).doubleValue());
                 // 供应商下商品种类
                 shop.setCount(shopKindCount.get());
             });

+ 12 - 0
src/main/java/com/caimei365/order/service/impl/HeliPayServiceImpl.java

@@ -1241,6 +1241,18 @@ public class HeliPayServiceImpl implements HeliPayService {
             }
             shopOrder.setOrderProductList(orderProductList);
             shopOrder.setShopLogo(ImageUtil.getImageUrl("shopLogo", shopOrder.getShopLogo(), domain));
+            // 子订单支付方式
+            Integer onlinePay = 0;
+            // 支付记录
+            DiscernReceiptVo shopOrderReceipt = orderCommonMapper.getShopOrderReceipt(shopOrder.getShopOrderId());
+            if (null != shopOrderReceipt) {
+                if (1 == shopOrderReceipt.getPayWay()) {
+                    onlinePay = 1;
+                } else if (2 == shopOrderReceipt.getPayWay()) {
+                    onlinePay = 2;
+                }
+            }
+            shopOrder.setOnlinePay(onlinePay);
         });
         return ResponseJson.success(shopOrderList);
     }

+ 14 - 14
src/main/java/com/caimei365/order/service/impl/OrderClubServiceImpl.java

@@ -261,6 +261,18 @@ public class OrderClubServiceImpl implements OrderClubService {
                     orderProduct.setIncludedTaxFlag(3);
                 }
             });
+            // 支付凭证
+            List<VoucherPo> voucher = orderClubMapper.getVoucher(shopOrder.getShopOrderId());
+            // 支付凭证图片
+            if (null != voucher) {
+                List<Integer> ids = voucher.stream().map(VoucherPo::getId).collect(Collectors.toList());
+                List<VoucherImageDto> voucherImage = orderClubMapper.getVoucherImage(ids);
+                voucher.forEach(v -> {
+                    List<VoucherImageDto> imageList = voucherImage.stream().filter(m -> m.getVoucherId().equals(v.getId())).collect(Collectors.toList());
+                    v.setImgs(imageList);
+                });
+            }
+            shopOrder.setVoucher(voucher);
         });
         order.setExpensesOfTaxation(expensesOfTaxation.get());
         // 发票信息
@@ -319,18 +331,7 @@ public class OrderClubServiceImpl implements OrderClubService {
                 }
             }
         }
-        // 支付凭证
-//        VoucherPo voucherPo = new VoucherPo();
-        List<VoucherPo> voucher = orderClubMapper.getVoucher(orderId);
-        // 支付凭证图片
-        if (null != voucher) {
-            List<Integer> ids = voucher.stream().map(VoucherPo::getId).collect(Collectors.toList());
-            List<VoucherImageDto> voucherImage = orderClubMapper.getVoucherImage(ids);
-            voucher.forEach(v -> {
-                List<VoucherImageDto> imageList = voucherImage.stream().filter(m -> m.getVoucherId().equals(v.getId())).collect(Collectors.toList());
-                v.setImgs(imageList);
-            });
-        }
+
         Map<String, Object> map = new HashMap<>();
         map.put("order", order);
         map.put("shopOrderList", shopOrderList);
@@ -340,7 +341,6 @@ public class OrderClubServiceImpl implements OrderClubService {
         map.put("discernReceiptList", discernReceiptList);
         map.put("returnedPurchaseList", returnedPurchaseList);
         map.put("clause", clause);
-        map.put("voucher",voucher);
         if (flag) {
             map.put("returnGoodsStutas", 2);
             map.put("helpContent", helpContent);
@@ -363,7 +363,7 @@ public class OrderClubServiceImpl implements OrderClubService {
         if (null == voucherDto.getShopOrderId()) {
             return ResponseJson.error(-1,"订单Id不能为空",null);
         }
-        // 修改支付凭证
+        // 上传支付凭证
         orderClubMapper.insertVoucher(voucherDto);
         // 修改支付凭证图片
         if (!"".equals(voucherDto.getVoucherImgs())) {

+ 97 - 3
src/main/java/com/caimei365/order/service/impl/ShipServiceImpl.java

@@ -2,20 +2,21 @@ package com.caimei365.order.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.caimei365.order.components.OssService;
 import com.caimei365.order.components.WeChatService;
 import com.caimei365.order.mapper.*;
 import com.caimei365.order.model.ResponseJson;
-import com.caimei365.order.model.dto.JsonParamsDto;
-import com.caimei365.order.model.dto.LogisticsBatchDto;
-import com.caimei365.order.model.dto.LogisticsDto;
+import com.caimei365.order.model.dto.*;
 import com.caimei365.order.model.po.*;
 import com.caimei365.order.model.vo.*;
 import com.caimei365.order.service.RemoteCallService;
 import com.caimei365.order.service.ShipService;
 import com.caimei365.order.utils.ImageUtil;
+import com.caimei365.order.utils.OSSUtils;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang.RandomStringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
@@ -24,8 +25,14 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -54,6 +61,10 @@ public class ShipServiceImpl implements ShipService {
     private OrderClubMapper orderClubMapper;
     @Resource
     private RemoteCallService remoteCallService;
+    @Resource
+    private OssService ossService;
+    @Resource
+    private OSSUtils ossUtils;
 
     @Resource
     private WeChatService weChatService;
@@ -973,4 +984,87 @@ public class ShipServiceImpl implements ShipService {
             return ResponseJson.error("保存商品资质参数解析异常!", null);
         }
     }
+
+    @Override
+    public List<OrderRemarkDto> findList(Integer orderId) {
+        List<OrderRemarkDto> list = shipMapper.findList(orderId);
+        list.forEach(l -> {
+            l.setImages(shipMapper.findImages(l.getId()));
+            l.setOssFiles(shipMapper.findFiles(l.getId()));
+        });
+        return list;
+    }
+
+    @Override
+    public void insertRemark(OrderRemarkDto remark) {
+        /*CmMallAdminUser user = (CmMallAdminUser) SecurityUtils.getSubject().getPrincipal();
+        remark.setCreateBy(user.getId());
+        shipMapper.insert(remark);*/
+        List<String> images = remark.getImages();
+        List<OssFileDto> ossFiles = remark.getOssFiles();
+        if (null != images && images.size() > 0) {
+            images.forEach(i -> {
+                RemarkImageDto remarkImage = new RemarkImageDto();
+                remarkImage.setRemarkImage(i);
+                remarkImage.setRemarkId(remark.getId());
+                remarkImage.setOrderId(remark.getOrderId());
+                shipMapper.insertImage(remarkImage);
+            });
+        }
+        if (null != ossFiles && ossFiles.size() > 0) {
+            ossFiles.forEach(o -> {
+                o.setRemarkId(remark.getId());
+                o.setOrderId(remark.getOrderId());
+                shipMapper.insertFile(o);
+            });
+        }
+    }
+
+    @Override
+    public ResponseJson<Map<String, Object>> upload(MultipartFile file, Integer orderId) {
+        Map<String, Object> map = new HashMap<>();
+        String fileAllName = file.getOriginalFilename();
+        String fileType = fileAllName.substring(fileAllName.lastIndexOf(".") + 1);
+        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
+        String filePath = uuid + "." + fileType;
+        String contentType = ossUtils.getContentType(fileAllName);
+        try {
+            //保存本地
+            File fil = ossUtils.ossUpload(file);
+            //判断文件的唯一性,转换成16进制md5值
+            String md5Hex = DigestUtils.md5Hex(new FileInputStream(fil));
+            OssFileDto remarkFile = shipMapper.findFileByMd5(md5Hex);
+            String url = "";
+            if (remarkFile == null) {
+                log.info("默认路径>>>" + fil.getAbsolutePath());
+                //上传oss
+                url = ossUtils.ossUpload(filePath, fil, contentType);
+            } else {
+                filePath = remarkFile.getOssName();
+            }
+            //删除本地文件
+            ossUtils.deleteFile(fil);
+            //保存关联关系
+            OssFileDto orderRemarkFile = new OssFileDto();
+            orderRemarkFile.setOrderId(orderId);
+            orderRemarkFile.setName(fileAllName);
+            orderRemarkFile.setOssName(filePath);
+            orderRemarkFile.setMd5Hex(md5Hex);
+            map.put("url", url);
+            map.put("ossFiles", orderRemarkFile);
+            return ResponseJson.success(map);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info("备注文件上传异常!!!");
+            return ResponseJson.error("备注文件上传异常");
+        }
+    }
+
+    @Override
+    public void downFile(Integer fileId, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        OssFileDto remarkFile = shipMapper.findRemarkById(fileId);
+        String fileName = remarkFile.getName();
+        ossUtils.downFile(remarkFile.getOssName(), fileName);
+        ossService.download(request, response, fileName);
+    }
 }

+ 173 - 196
src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java

@@ -71,53 +71,6 @@ public class SubmitServiceImpl implements SubmitService {
     private PayOrderMapper payOrderMapper;
 
 
-    /**
-     * 验证是否有购买资格
-     *
-     * @param submitDto
-     * @return
-     */
-    @Override
-    public ResponseJson<Map<String, Object>> verify(SubmitDto submitDto) {
-
-        /*Map<String, Object> map = new HashMap<>();
-        boolean bol = false;
-        // 机构一级分类
-        String firstClubType = baseMapper.firstClubTypeById(submitDto.getClubId());
-        if (!StringUtils.isNotBlank(firstClubType)) {
-            firstClubType = "0";
-        }
-        try {
-            ArrayList<Integer> list = new ArrayList<>();
-            JSONArray orderInfo = parseArray(submitDto.getOrderInfo());
-            *//*Object productInfo = orderInfo.get("productInfo");
-            JSONArray jsonArray = parseArray(productInfo.toString());*//*
-            for (Object infoObject : orderInfo) {
-                JSONObject productTemp = (JSONObject) infoObject;
-                JSONArray productArr = (JSONArray) productTemp.get("productInfo");
-                for (Object productObject : productArr) {
-                    JSONObject product = (JSONObject) productObject;
-                    list.add((Integer) product.get("skuId"));
-                }
-            }
-            // 获取订单商品械字号类型
-            List<String> machineType = baseMapper.machineTypeByID(list);
-            for (String str : machineType) {
-                if ("3".equals(str)) {
-                    bol = true;
-                }
-            }
-            if (!"1".equals(firstClubType) && bol) {
-                map.put("code", -1);
-            } else {
-                map.put("code", 1);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            return  ResponseJson.error("商品验证失败",null);
-        }*/
-        return ResponseJson.success();
-    }
 
     /**
      * 生成订单
@@ -229,27 +182,27 @@ public class SubmitServiceImpl implements SubmitService {
         String orderShouldPayFee = (String) payInfo.get("orderShouldPayFee");
         orderParamBo.setOrderShouldPayFee(Double.parseDouble(orderShouldPayFee));
         // 运费标志:0包邮 -1到付 1遵循运费规则
-        Integer postageFlag = (Integer) payInfo.get("postageFlag");
+        // Integer postageFlag = (Integer) payInfo.get("postageFlag");
         // 运费
-        String postage = (String) payInfo.get("postage");
+        /*String postage = (String) payInfo.get("postage");
         if (null == postageFlag || null == postage) {
             return ResponseJson.error("运费数据异常!", null);
         }
         orderParamBo.setPostageFlag(postageFlag);
-        orderParamBo.setPostage(Double.parseDouble(postage));
+        orderParamBo.setPostage(Double.parseDouble(postage));*/
         // 采美豆抵扣运费,1:100,到付默认30元,抵扣3000豆
         Integer userBeans = (Integer) payInfo.get("userBeans");
         if (null != userBeans && userBeans > 0) {
             // 计算需抵扣采美豆数量
-            int offsetBeans = MathUtil.mul(postage, 100).intValue();
+            /*int offsetBeans = MathUtil.mul(postage, 100).intValue();
             if (-1 == postageFlag) {
                 // 到付默认30元,抵扣3000豆
                 offsetBeans = 3000;
-            }
+            }*/
             // 与前端传入采美豆数量比较
-            if (null == orderParamBo.getUserBeans() || !userBeans.equals(offsetBeans)) {
+            /*if (null == orderParamBo.getUserBeans() || !userBeans.equals(offsetBeans)) {
                 return ResponseJson.error("采美豆数据异常!", null);
-            }
+            }*/
             if (orderParamBo.getUserBeans() <= 0) {
                 return ResponseJson.error("用户没有剩余采美豆!", null);
             }
@@ -504,6 +457,8 @@ public class SubmitServiceImpl implements SubmitService {
         AtomicDouble payableAmount = new AtomicDouble(0);
         // 余额支付金额
         AtomicDouble balancePayFee = new AtomicDouble(0);
+        // 总运费
+        AtomicDouble postageFee = new AtomicDouble(0);
         // 冷链运输费
         AtomicDouble isColdChina = new AtomicDouble(0);
         // 统计销量用
@@ -535,6 +490,9 @@ public class SubmitServiceImpl implements SubmitService {
             JSONObject shopInfo = (JSONObject) infoObject;
             Integer shopId = (Integer) shopInfo.get("shopId");
             String shopNote = (String) shopInfo.get("note");
+            String postageString = (String) shopInfo.get("postage");
+            Integer postageFlag = (Integer) shopInfo.get("postageFlag");
+            Integer isColdChinaShop = (Integer) shopInfo.get("isColdChina");
             if (null == shopId) {
                 return ResponseJson.error("供应商数据异常!", null);
             }
@@ -542,6 +500,12 @@ public class SubmitServiceImpl implements SubmitService {
             if (null == productArr) {
                 return ResponseJson.error("订单商品数据异常!", null);
             }
+            if (1252 == shopId) {
+                secondHandOrderFlag = true;
+            }
+            log.info("postageFlag*****************"+postageFlag);
+            // 运费
+            Double postage = Double.parseDouble(postageString);
             // 供应商名称
             String shopName = baseMapper.getShopNameById(shopId);
             /*
@@ -551,6 +515,8 @@ public class SubmitServiceImpl implements SubmitService {
             shopOrder.setShopId(shopId);
             shopOrder.setShopName(shopName);
             shopOrder.setNote(shopNote);
+            // 是否勾选冷链运输费
+            shopOrder.setIsColdChina(isColdChinaShop);
             // 用户Id
             shopOrder.setUserId(orderParamBo.getUserId());
             shopOrder.setClubId(orderParamBo.getClubId());
@@ -570,6 +536,8 @@ public class SubmitServiceImpl implements SubmitService {
             AtomicDouble shopAmount = new AtomicDouble(0);
             // 付供应商 商品费
             AtomicDouble shopProductAmount = new AtomicDouble(0);
+            // 冷链运输费
+            AtomicDouble shopIsColdChina = new AtomicDouble(0);
             // 付供应商税费
             AtomicDouble shopTaxFee = new AtomicDouble(0);
             // 店铺促销活动状态
@@ -616,18 +584,16 @@ public class SubmitServiceImpl implements SubmitService {
                     return ResponseJson.error("订单商品不存在!", null);
                 }
                 // 联合丽格冷链费商品
-                if (1 == orderParamBo.getIsColdChain()) {
-                    if (7881 == product.getProductId()) {
+                if (1 == isColdChinaShop) {
+                    if (7536 == product.getProductId()) {
                         if (productNum >= 100) {
-                            isColdChina.set(0.00d);
+                            shopIsColdChina.set(0.00d);
                         } else {
-                            isColdChina.set(700.00d);
-    //                        payableAmount.set(MathUtil.add(payableAmount.get(), isColdChina).doubleValue());
-//                            orderParamBo.setOrderShouldPayFee(MathUtil.sub(orderParamBo.getOrderShouldPayFee(), isColdChina.get()).doubleValue());
+                            shopIsColdChina.set(700.00d);
                         }
                     }
                 } else {
-                    isColdChina.set(0.00d);
+                    shopIsColdChina.set(0.00d);
                 }
                 // 是否二手商品
                 if (null != product.getProductCategory() && 2 == product.getProductCategory()) {
@@ -967,6 +933,18 @@ public class SubmitServiceImpl implements SubmitService {
                 productIdList.add(product.getProductId().toString());
                 skuIdList.add(product.getSkuId().toString());
             }
+            // 设置运费
+            if (( 1 == postageFlag && 0 == mainOrder.getUserBeans() ) || ( 0 == postageFlag && isColdChina.get() > 0.00d && 0 != organizeId ) || ( -1 == postageFlag && isColdChina.get() > 0.00d && 0 != organizeId )) {
+                postage = MathUtil.add(shopIsColdChina.get(), postage).doubleValue();
+                shopOrder.setShopPostFee(postage);
+            }
+            log.info("shopIsColdChina.get()=------=-=-===="+shopIsColdChina.get());
+            log.info("postage=-***===="+postage);
+            isColdChina.set(MathUtil.add(isColdChina.get(), shopIsColdChina.get()).doubleValue());
+            log.info("isColdChina.get()=------=-=-===="+isColdChina.get());
+            // 统计总运费
+            postageFee.set(MathUtil.add(postageFee.get(), postage).doubleValue());
+            log.info("统计总运费+--+-+-"+postageFee.get());
             Integer count = submitMapper.findSplitResult(productIdList);
             if (count > 0) {
                 //有商品无分帐号,走线下
@@ -1045,7 +1023,7 @@ public class SubmitServiceImpl implements SubmitService {
             // 付供应商 = 商品费 + 运费 + 税费
             shopOrder.setShouldPayShopAmount(MathUtil.add(shopProductAmount.get(), shopTaxFee.get()).doubleValue());
             // 付给供应商运费
-            shopOrder.setShopPostFee(0d);
+            // shopOrder.setShopPostFee(0d);
             // 已付供应商金额
             shopOrder.setPayedShopAmount(0d);
             // (付款供应商)付款状态:1待付款、2部分付款、3已付款
@@ -1057,6 +1035,9 @@ public class SubmitServiceImpl implements SubmitService {
                 // 普通订单
                 shopOrder.setOrderType(1);
             }
+            // 运费标记
+            shopOrder.setShopPostFlag(postageFlag);
+            log.info("shopOrder.getShopPostFlag()*****************"+shopOrder.getShopPostFlag());
             // 添加到子订单列表
             shopOrderList.add(shopOrder);
             // 统计商品总金额
@@ -1145,7 +1126,7 @@ public class SubmitServiceImpl implements SubmitService {
         /**
          * 计算运费
          */
-        if (3 != orderParamBo.getCartType()) {
+        /*if (3 != orderParamBo.getCartType()) {
             // 机构用户 校验商品运费
             if (orderParamBo.getPostageFlag() != -1) {
                 Integer townId = baseMapper.getTownIdByAddressId(orderParamBo.getAddressId());
@@ -1157,27 +1138,28 @@ public class SubmitServiceImpl implements SubmitService {
                     return ResponseJson.error("订单邮费不正确!", null);
                 }
             }
-        }
+        }*/
         // 设置运费
-        mainOrder.setPostage(orderParamBo.getPostage());
+        // mainOrder.setPostage(orderParamBo.getPostage());
         // 订单总额 = 商品费 + 运费
-        payTotalFee.set(MathUtil.add(productTotalFee.get(), orderParamBo.getPostage()).doubleValue());
+        log.info("总运费"+postageFee.get());
+        payTotalFee.set(MathUtil.add(productTotalFee.get(), postageFee.get()).doubleValue());
         // 运费标志:0包邮 -1到付 1遵循运费规则
-        mainOrder.setPostageFlag(orderParamBo.getPostageFlag());
-        if (1 == orderParamBo.getPostageFlag() && orderParamBo.getOffsetBeans() > 0) {
+        // mainOrder.setPostageFlag(orderParamBo.getPostageFlag());
+        /*if (1 == orderParamBo.getPostageFlag() && orderParamBo.getOffsetBeans() > 0) {
             // 订单总额 = 商品费 - 优惠券金额
             payTotalFee.set(MathUtil.sub(productTotalFee.get(), couponAmount).doubleValue());
         } else {
             // 订单总额 -= 优惠券金额
             payTotalFee.set(MathUtil.sub(payTotalFee.get(), couponAmount).doubleValue());
-        }
+        }*/
         // 超级会员优惠
         mainOrder.setSvipFullReduction(svipFullReduction.get());
         // 商品总额
         mainOrder.setProductTotalFee(productTotalFee.get());
         mainOrder.setOrderTotalFee(productTotalFee.get());
         // 订单总额(商品金额+运费)-- 冷链运输费
-        mainOrder.setPayTotalFee(MathUtil.add(payTotalFee.get(), isColdChina.get()).doubleValue());
+        mainOrder.setPayTotalFee(payTotalFee.get());
         // 订单状态
         if (0 == organizeId) {
             if (3 == orderParamBo.getCartType()) {
@@ -1239,7 +1221,7 @@ public class SubmitServiceImpl implements SubmitService {
         // 余额支付金额
         mainOrder.setBalancePayFee(balancePayFee.get());
         // 实际支付金额(商品金额+运费-余额抵扣) + 冷链费用
-        mainOrder.setPayableAmount(MathUtil.add(payableAmount.get(), isColdChina.get()).doubleValue());
+        mainOrder.setPayableAmount(payableAmount.get());
 
         // 是否返佣订单
         Integer rebateFlag = (null == orderParamBo.getRebateFlag() ? 0 : orderParamBo.getRebateFlag());
@@ -1248,8 +1230,9 @@ public class SubmitServiceImpl implements SubmitService {
             mainOrder.setRebateFee(orderParamBo.getRebateFee());
         }
 
+        log.info("订单总额"+payTotalFee.get());
         // 判断前端传入orderShouldPayFee订单应付金额,和后台计算应付金额对比
-        orderParamBo.setOrderShouldPayFee(MathUtil.sub(orderParamBo.getOrderShouldPayFee(), isColdChina.get()).doubleValue());
+        // orderParamBo.setOrderShouldPayFee(MathUtil.sub(orderParamBo.getOrderShouldPayFee(), isColdChina.get()).doubleValue());
         log.info("【提交订单】>>>>>后台计算payableAmount:" + payableAmount.get() + " ,前端传入orderShouldPayFee:" + orderParamBo.getOrderShouldPayFee());
         // compare return[-1:v1<v2, 0:v1=v2, 1:v1>v2]
         int compare = MathUtil.compare(orderParamBo.getOrderShouldPayFee(), payableAmount.get());
@@ -1259,7 +1242,7 @@ public class SubmitServiceImpl implements SubmitService {
             return ResponseJson.error("订单付款金额不正确!", null);
         }
         // 加冷链费
-        orderParamBo.setOrderShouldPayFee(MathUtil.add(orderParamBo.getOrderShouldPayFee(), isColdChina.get()).doubleValue());
+        // orderParamBo.setOrderShouldPayFee(MathUtil.add(orderParamBo.getOrderShouldPayFee(), isColdChina.get()).doubleValue());
         // 售后条款
         Integer clauseId = orderParamBo.getClauseId();
         String clauseName = null;
@@ -1450,17 +1433,12 @@ public class SubmitServiceImpl implements SubmitService {
                 shopOrder.setSplitCode(Constant.BCCMERCHANT);
                 shopOrder.setRealPay(shopOrder.getNeedPayAmount());
             }
-            // 冷链运输费
-            if (1 == orderParamBo.getIsColdChain()) {
-                shopOrder.setIsColdChina(1);
-                mainOrder.setPostage(MathUtil.add(mainOrder.getPostage(), isColdChina.get()).doubleValue());
-            } else {
-                shopOrder.setIsColdChina(0);
-            }
             // 设置运费
-            if (( 1 == mainOrder.getPostageFlag() && 0 == mainOrder.getUserBeans() ) || ( 0 == mainOrder.getPostageFlag() && isColdChina.get() > 0.00d && 0 != organizeId ) || ( -1 == mainOrder.getPostageFlag() && isColdChina.get() > 0.00d && 0 != organizeId )) {
-                shopOrder.setShopPostFee(mainOrder.getPostage());
+            boolean shopFlag = ( 1 == shopOrder.getShopPostFlag() && (null != mainOrder.getUserBeans() && 0 == mainOrder.getUserBeans()) ) || ( 0 == shopOrder.getShopPostFlag() && isColdChina.get() > 0.00d && 0 != organizeId ) || ( -1 == shopOrder.getShopPostFlag() && isColdChina.get() > 0.00d && 0 != organizeId );
+            if (!shopFlag) {
+                shopOrder.setShopPostFee(0d);
             }
+            log.info("shopOrder.getIsColdChina()******"+shopOrder.getIsColdChina()+"=====shopOrder.getShopPostFee()"+shopOrder.getShopPostFee());
             /*
              * 保存子订单
              */
@@ -1539,115 +1517,115 @@ public class SubmitServiceImpl implements SubmitService {
          * 采美豆抵扣不生成
          * 版本不在使用运费子订单
          */
-        if (organizeId == 998 && ( 1 == mainOrder.getPostageFlag() && 0 == mainOrder.getUserBeans() ) || ( 0 == mainOrder.getPostageFlag() && isColdChina.get() > 0.00d && 0 != organizeId ) || ( -1 == mainOrder.getPostageFlag() && isColdChina.get() > 0.00d && 0 != organizeId )) {
-            // 获取 邮费商品    productId 999 skuId 1
-            OrderProductPo postageProduct = submitMapper.getProductDetails(1);
-            // 生成子订单编号
-            StringBuilder postageOrderNo = new StringBuilder();
-            postageOrderNo.append(mainOrder.getOrderNo());
-            if (shopOrderIndex.get() < 10) {
-                postageOrderNo.append("0");
-            }
-            postageOrderNo.append(shopOrderIndex.get());
-            shopOrderIndex.incrementAndGet();
-            /*
-             * 初始化邮费订单
-             */
-            OrderShopPo postageOrder = new OrderShopPo();
-            postageOrder.setShopOrderNo(postageOrderNo.toString());
-            postageOrder.setOrderNo(mainOrder.getOrderNo());
-            postageOrder.setOrderId(mainOrder.getOrderId());
-            postageOrder.setUserId(mainOrder.getUserId());
-            postageOrder.setOrderSubmitType(mainOrder.getOrderSubmitType());
-            postageOrder.setItemCount(1);
-            if (0 == organizeId) {
-                postageOrder.setSplitCode(Constant.CUSTOMERNUM);
-            } else {
-                // 联合丽格
-                postageOrder.setSplitCode(Constant.BCCMERCHANT);
-            }
-            // 冷链运输费
-            if (1 == orderParamBo.getIsColdChain()) {
-                postageOrder.setIsColdChina(1);
-                mainOrder.setPostage(MathUtil.add(mainOrder.getPostage(), isColdChina.get()).doubleValue());
-            } else {
-                postageOrder.setIsColdChina(0);
-            }
-            postageOrder.setRealPay(mainOrder.getPostage());
-            postageOrder.setEachDiscount(0d);
-
-            //运费商品供应商Id默认998
-            postageOrder.setShopId(postageProduct.getShopId());
-            postageOrder.setProductAmount(mainOrder.getPostage());
-            postageOrder.setTotalAmount(mainOrder.getPostage());
-            postageOrder.setNeedPayAmount(mainOrder.getPostage());
-            postageOrder.setOrderTime(mainOrder.getOrderTime());
-            postageOrder.setCanRefundAmount(0d);
-            postageOrder.setClubId(mainOrder.getClubId());
-            // 已付供应商金额
-            postageOrder.setPayedShopAmount(0d);
-            // (付款供应商)付款状态:1待付款、2部分付款、3已付款
-            postageOrder.setPayStatus(3);
-            if (3 == orderParamBo.getCartType()) {
-                // 协销订单
-                postageOrder.setSpId(orderParamBo.getBuyUserId());
-                postageOrder.setOrderType(0);
-            } else {
-                // 普通订单
-                postageOrder.setOrderType(1);
-            }
-            // 订单默认可拆分
-            postageOrder.setSplitFlag(1);
-            // 设置组织Id
-            postageOrder.setOrganizeId(organizeId);
-            /*
-             * 保存运费子订单
-             */
-            submitMapper.insertShopOrder(postageOrder);
-            log.info("【提交订单】>>>>>>>>>>>>>>>>>>>>>>>>>>新增子订单(运费商品)(insert[cm_shop_order])shopOrderId::" + postageOrder.getShopOrderId() + ",orderId:" + mainOrder.getOrderId());
-            // 收集子订单Id字符串
-            if (StringUtils.isEmpty(shopOrderIds.get())) {
-                shopOrderIds.set(postageOrder.getShopOrderId().toString());
-            } else {
-                shopOrderIds.set(shopOrderIds.get() + "," + postageOrder.getShopOrderId());
-            }
-            // 有冷链运输费 且大于 0 修改主订单运费状态
-            if (MathUtil.add(mainOrder.getPostage(), isColdChina.get()).doubleValue() > 0) {
-                submitMapper.updateOrder(mainOrder.getPostage().doubleValue(), mainOrder.getOrderId());
-            }
-            /*
-             * 设置运费商品
-             */
-            postageProduct.setOrderNo(mainOrder.getOrderNo());
-            postageProduct.setOrderId(mainOrder.getOrderId());
-            postageProduct.setShopOrderId(postageOrder.getShopOrderId());
-            postageProduct.setShopOrderNo(postageOrder.getShopOrderNo());
-            postageProduct.setNum(1);
-            postageProduct.setPresentNum(0);
-            postageProduct.setPrice(mainOrder.getPostage());
-            postageProduct.setNormalPrice(mainOrder.getPostage());
-            postageProduct.setTotalAmount(mainOrder.getPostage());
-            postageProduct.setTotalFee(mainOrder.getPostage());
-            postageProduct.setShouldPayFee(mainOrder.getPostage());
-            postageProduct.setDiscount(100d);
-            postageProduct.setDiscountPrice(mainOrder.getPostage());
-            postageProduct.setTaxRate(100d);
-            postageProduct.setAddedValueTax(0d);
-            postageProduct.setTotalAddedValueTax(0d);
-            postageProduct.setShopFee(0d);
-            postageProduct.setOtherFee(0d);
-            postageProduct.setCmFee(mainOrder.getPostage());
-            postageProduct.setSingleShopFee(0d);
-            postageProduct.setSingleOtherFee(0d);
-            postageProduct.setSingleCmFee(mainOrder.getPostage());
-            postageProduct.setNotOutStore(0);
-            postageProduct.setBuyAgainFlag(0);
-            /*
-             * 保存 订单运费商品
-             */
-            submitMapper.insertOrderProduct(postageProduct);
-            log.info("【提交订单】>>>>>>>>>>>>>>>>>>>>>>>>>>保存订单运费商品(insert[cm_order_product])OrderProductId:" + postageProduct.getOrderProductId() + ",orderId:" + mainOrder.getOrderId());
-        }
+//        if (organizeId == 998 && ( 1 == mainOrder.getPostageFlag() && 0 == mainOrder.getUserBeans() ) || ( 0 == mainOrder.getPostageFlag() && isColdChina.get() > 0.00d && 0 != organizeId ) || ( -1 == mainOrder.getPostageFlag() && isColdChina.get() > 0.00d && 0 != organizeId )) {
+//            // 获取 邮费商品    productId 999 skuId 1
+//            OrderProductPo postageProduct = submitMapper.getProductDetails(1);
+//            // 生成子订单编号
+//            StringBuilder postageOrderNo = new StringBuilder();
+//            postageOrderNo.append(mainOrder.getOrderNo());
+//            if (shopOrderIndex.get() < 10) {
+//                postageOrderNo.append("0");
+//            }
+//            postageOrderNo.append(shopOrderIndex.get());
+//            shopOrderIndex.incrementAndGet();
+//            /*
+//             * 初始化邮费订单
+//             */
+//            OrderShopPo postageOrder = new OrderShopPo();
+//            postageOrder.setShopOrderNo(postageOrderNo.toString());
+//            postageOrder.setOrderNo(mainOrder.getOrderNo());
+//            postageOrder.setOrderId(mainOrder.getOrderId());
+//            postageOrder.setUserId(mainOrder.getUserId());
+//            postageOrder.setOrderSubmitType(mainOrder.getOrderSubmitType());
+//            postageOrder.setItemCount(1);
+//            if (0 == organizeId) {
+//                postageOrder.setSplitCode(Constant.CUSTOMERNUM);
+//            } else {
+//                // 联合丽格
+//                postageOrder.setSplitCode(Constant.BCCMERCHANT);
+//            }
+//            // 冷链运输费
+//            if (isColdChina.get() >= 700) {
+//                postageOrder.setIsColdChina(1);
+//                mainOrder.setPostage(MathUtil.add(mainOrder.getPostage(), isColdChina.get()).doubleValue());
+//            } else {
+//                postageOrder.setIsColdChina(0);
+//            }
+//            postageOrder.setRealPay(mainOrder.getPostage());
+//            postageOrder.setEachDiscount(0d);
+//
+//            //运费商品供应商Id默认998
+//            postageOrder.setShopId(postageProduct.getShopId());
+//            postageOrder.setProductAmount(mainOrder.getPostage());
+//            postageOrder.setTotalAmount(mainOrder.getPostage());
+//            postageOrder.setNeedPayAmount(mainOrder.getPostage());
+//            postageOrder.setOrderTime(mainOrder.getOrderTime());
+//            postageOrder.setCanRefundAmount(0d);
+//            postageOrder.setClubId(mainOrder.getClubId());
+//            // 已付供应商金额
+//            postageOrder.setPayedShopAmount(0d);
+//            // (付款供应商)付款状态:1待付款、2部分付款、3已付款
+//            postageOrder.setPayStatus(3);
+//            if (3 == orderParamBo.getCartType()) {
+//                // 协销订单
+//                postageOrder.setSpId(orderParamBo.getBuyUserId());
+//                postageOrder.setOrderType(0);
+//            } else {
+//                // 普通订单
+//                postageOrder.setOrderType(1);
+//            }
+//            // 订单默认可拆分
+//            postageOrder.setSplitFlag(1);
+//            // 设置组织Id
+//            postageOrder.setOrganizeId(organizeId);
+//            /*
+//             * 保存运费子订单
+//             */
+//            submitMapper.insertShopOrder(postageOrder);
+//            log.info("【提交订单】>>>>>>>>>>>>>>>>>>>>>>>>>>新增子订单(运费商品)(insert[cm_shop_order])shopOrderId::" + postageOrder.getShopOrderId() + ",orderId:" + mainOrder.getOrderId());
+//            // 收集子订单Id字符串
+//            if (StringUtils.isEmpty(shopOrderIds.get())) {
+//                shopOrderIds.set(postageOrder.getShopOrderId().toString());
+//            } else {
+//                shopOrderIds.set(shopOrderIds.get() + "," + postageOrder.getShopOrderId());
+//            }
+//            // 有冷链运输费 且大于 0 修改主订单运费状态
+//            if (MathUtil.add(mainOrder.getPostage(), isColdChina.get()).doubleValue() > 0) {
+//                submitMapper.updateOrder(mainOrder.getPostage().doubleValue(), mainOrder.getOrderId());
+//            }
+//            /*
+//             * 设置运费商品
+//             */
+//            postageProduct.setOrderNo(mainOrder.getOrderNo());
+//            postageProduct.setOrderId(mainOrder.getOrderId());
+//            postageProduct.setShopOrderId(postageOrder.getShopOrderId());
+//            postageProduct.setShopOrderNo(postageOrder.getShopOrderNo());
+//            postageProduct.setNum(1);
+//            postageProduct.setPresentNum(0);
+//            postageProduct.setPrice(mainOrder.getPostage());
+//            postageProduct.setNormalPrice(mainOrder.getPostage());
+//            postageProduct.setTotalAmount(mainOrder.getPostage());
+//            postageProduct.setTotalFee(mainOrder.getPostage());
+//            postageProduct.setShouldPayFee(mainOrder.getPostage());
+//            postageProduct.setDiscount(100d);
+//            postageProduct.setDiscountPrice(mainOrder.getPostage());
+//            postageProduct.setTaxRate(100d);
+//            postageProduct.setAddedValueTax(0d);
+//            postageProduct.setTotalAddedValueTax(0d);
+//            postageProduct.setShopFee(0d);
+//            postageProduct.setOtherFee(0d);
+//            postageProduct.setCmFee(mainOrder.getPostage());
+//            postageProduct.setSingleShopFee(0d);
+//            postageProduct.setSingleOtherFee(0d);
+//            postageProduct.setSingleCmFee(mainOrder.getPostage());
+//            postageProduct.setNotOutStore(0);
+//            postageProduct.setBuyAgainFlag(0);
+//            /*
+//             * 保存 订单运费商品
+//             */
+//            submitMapper.insertOrderProduct(postageProduct);
+//            log.info("【提交订单】>>>>>>>>>>>>>>>>>>>>>>>>>>保存订单运费商品(insert[cm_order_product])OrderProductId:" + postageProduct.getOrderProductId() + ",orderId:" + mainOrder.getOrderId());
+//        }
 
         /*
          * 更新主订单的子订单Id信息,如:1000,1002
@@ -1856,7 +1834,6 @@ public class SubmitServiceImpl implements SubmitService {
                         }
                     }
                     if (!"1".equals(firstClubType) && bol) {
-//                map.put("code", -1);
                         // 设置手动回滚事务
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                         return ResponseJson.error(-6, "订单内存在械字号三类商品,需要拥有医疗执业许可证的医美机构才能购买。建议升级医美机构后再下单,否则会导致订单退款或影响发货。");
@@ -1907,13 +1884,13 @@ public class SubmitServiceImpl implements SubmitService {
                 orderClubMapper.AddUnionId(orderParamBo.getUnionId(), mainOrder.getOrderId());
                 openidList.removeIf(Objects::isNull);
                 String i = orderClubMapper.getOrderIds(mainOrder.getOrderId()).toString();
-                if (i.length() < 10) {
+                /*if (i.length() < 10) {
                     name = StringUtils.strip(i, "[]");
                 } else {
                     name = StringUtils.strip(i.substring(0, 11), "[]");
                     name += "...";
-                }
-
+                }*/
+                name = StringUtils.strip(i, "[]");
                 log.info("订单商品>>>>>" + name + "" + mainOrder.getOrderId());
                 String associateTitle = "订单已成功提交,等待付款!";
                 Double money = mainOrder.getPayTotalFee();
@@ -2064,7 +2041,7 @@ public class SubmitServiceImpl implements SubmitService {
             // 付供应商 = 商品费 + 运费 + 税费
             shopOrder.setShouldPayShopAmount(MathUtil.add(shopProductAmount.get(), shopTaxFee.get()).doubleValue());
             // 付给供应商运费
-            shopOrder.setShopPostFee(0d);
+            // shopOrder.setShopPostFee(0d);
             // 已付供应商金额
             shopOrder.setPayedShopAmount(0d);
             // (付款供应商)付款状态:1待付款、2部分付款、3已付款

+ 243 - 0
src/main/java/com/caimei365/order/utils/OSSUtils.java

@@ -0,0 +1,243 @@
+package com.caimei365.order.utils;
+
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.GetObjectRequest;
+import com.aliyun.oss.model.ObjectMetadata;
+import com.aliyun.oss.model.UploadFileRequest;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+@Slf4j
+@Component
+public class OSSUtils {
+
+
+    private static final String config = "beta";
+    private static final String endpoint = "https://oss-cn-shenzhen.aliyuncs.com";
+    private static final String accessKeyId = "LTAI4GBL3o4YkWnbKYgf2Xia";
+    private static final String accessKeySecret = "dBjAXqbYiEPP6Ukuk2ZsXQeET7FVkK";
+    private static final String privateBucket = "caimei-oss";
+
+
+    public String ossUpload(String fileName, File file, String contentType) {
+        String url = null;
+        try {
+            if ("product".equals(config)) {
+                fileName = "prod/" + fileName;
+            } else {
+                fileName = config + "/" + fileName;
+            }
+            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+            ObjectMetadata meta = new ObjectMetadata();
+            meta.setContentType(contentType);
+            UploadFileRequest uploadFileRequest = new UploadFileRequest(privateBucket, fileName);
+            // 指定上传的本地文件。
+            uploadFileRequest.setUploadFile(file.toString());
+            // 指定上传并发线程数,默认为1。
+            uploadFileRequest.setTaskNum(10);
+            // 指定上传的分片大小,范围为100KB~5GB,默认为文件大小/10000。
+            uploadFileRequest.setPartSize(1024 * 1024);
+            // 开启断点续传,默认关闭。
+            uploadFileRequest.setEnableCheckpoint(true);
+            uploadFileRequest.setCheckpointFile(file.getAbsolutePath() + "uploadFile.ucp");
+            // 文件的元数据。
+            uploadFileRequest.setObjectMetadata(meta);
+            // 设置上传成功回调,参数为Callback类型。
+            //uploadFileRequest.setCallback("<yourCallbackEvent>");
+            // 断点续传上传。
+            ossClient.uploadFile(uploadFileRequest);
+            Date expiration = new Date(new Date().getTime() + 3600L * 1000);
+            url = ossClient.generatePresignedUrl(privateBucket, fileName, expiration).toString();
+            // 关闭OSSClient。
+            ossClient.shutdown();
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+        return url;
+    }
+
+
+    /**
+     * 通过文件名判断并获取OSS服务文件上传时文件的contentType
+     */
+    public String getContentType(String fileName) {
+        String fileExtension = fileName.substring(fileName.lastIndexOf("."));
+        if (".bmp".equalsIgnoreCase(fileExtension)) {
+            return "image/bmp";
+        }
+        if (".gif".equalsIgnoreCase(fileExtension)) {
+            return "image/gif";
+        }
+        if (".jpeg".equalsIgnoreCase(fileExtension)) {
+            return "image/jpeg";
+        }
+        if (".jpg".equalsIgnoreCase(fileExtension)) {
+            return "image/jpg";
+        }
+        if (".png".equalsIgnoreCase(fileExtension)) {
+            return "image/png";
+        }
+        if (".html".equalsIgnoreCase(fileExtension)) {
+            return "text/html";
+        }
+        if (".txt".equalsIgnoreCase(fileExtension)) {
+            return "text/plain";
+        }
+        if (".vsd".equalsIgnoreCase(fileExtension)) {
+            return "application/vnd.visio";
+        }
+        if (".ppt".equalsIgnoreCase(fileExtension)) {
+            return "application/vnd.ms-powerpoint";
+        }
+        if (".pptx".equalsIgnoreCase(fileExtension)) {
+            return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
+        }
+        if (".doc".equalsIgnoreCase(fileExtension)) {
+            return "application/msword";
+        }
+        if ("docx".equalsIgnoreCase(fileExtension)) {
+            return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
+        }
+        if (".xml".equalsIgnoreCase(fileExtension)) {
+            return "text/xml";
+        }
+        if (".mp4".equalsIgnoreCase(fileExtension)) {
+            return "video/mp4";
+        }
+        if (".mp3".equalsIgnoreCase(fileExtension)) {
+            return "audio/mp3";
+        }
+        if (".pdf".equalsIgnoreCase(fileExtension)) {
+            return "application/pdf";
+        }
+        return "text/html";
+    }
+
+    public void deleteFile(File... files) {
+        for (File file : files) {
+            //logger.info("File:[{}]",file.getAbsolutePath());
+            if (file.exists()) {
+                file.delete();
+            }
+        }
+    }
+
+    public File ossUpload(MultipartFile file) throws IOException {
+        // 获取文件名
+        String fileName = file.getOriginalFilename();
+        // 获取文件后缀
+        String prefix = fileName.substring(fileName.lastIndexOf("."));
+        // 用uuid作为文件名,防止生成的临时文件重复
+        File excelFile = File.createTempFile(UUID.randomUUID().toString(), prefix);
+        // MultipartFile to File
+        file.transferTo(excelFile);
+        //程序结束时,删除临时文件
+        return excelFile;
+    }
+
+    /**
+     * 授权生成签名URL临时访问
+     *
+     * @param fileName 文件名称
+     */
+    public String getOssUrl(String fileName) {
+        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+        // 设置URL过期时间为1个小时
+        Date expiration = new Date(new Date().getTime() + 3600L * 1000);
+        if ("product".equals(config)) {
+            fileName = "prod/" + fileName;
+        } else {
+            fileName = config + "/" + fileName;
+        }
+        String url = ossClient.generatePresignedUrl(privateBucket, fileName, expiration).toString();
+        // 关闭OSSClient。
+        ossClient.shutdown();
+        return url;
+    }
+
+    /**
+     * 生成商品资料库链接
+     *
+     * @param archiveFile
+     * @return
+     */
+    public String generateProductArchiveUrl(String ossName, Date uploadTime) {
+        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+        // 设置URL过期时间为1个小时
+        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000);
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date dateOne = format.parse("2021-06-01 00:00:00");
+            Date dateTwo = format.parse("2021-09-17 18:00:00");
+            String active = "product".equals(config) ? "prod" : config;
+            if (uploadTime != null && uploadTime.compareTo(dateOne) > 0 && uploadTime.compareTo(dateTwo) < 0) {
+                ossName = active + "/" + ossName;
+            } else if (uploadTime != null && uploadTime.compareTo(dateTwo) > 0) {
+                ossName = active + "/archiveFile/" + ossName;
+            }
+        } catch (ParseException e) {
+        }
+        String url = ossClient.generatePresignedUrl(privateBucket, ossName, expiration).toString();
+        ossClient.shutdown();
+        return url;
+    }
+
+    /**
+     * oss单个文件删除
+     *
+     * @param fileName 文件名称或文件夹名称
+     */
+    public void deleteSingleFile(String fileName) {
+        // 创建OSSClient实例。
+        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+        // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。
+        // 如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
+        try {
+            //之前的文件没有放进文件夹
+            ossClient.deleteObject(privateBucket, fileName);
+        } catch (Exception e) {
+            if ("product".equals(config)) {
+                fileName = "prod/" + fileName;
+            } else {
+                fileName = config + "/" + fileName;
+            }
+            ossClient.deleteObject(privateBucket, fileName);
+        }
+        // 关闭OSSClient。
+        ossClient.shutdown();
+    }
+
+    /**
+     * oss单个文件下载
+     */
+    public void downFile(String ossName, String fileName) {
+        // 创建OSSClient实例。
+        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+        // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
+        try {
+            //之前的文件没有放进文件夹
+            ossClient.getObject(new GetObjectRequest(privateBucket, ossName), new File("./" + fileName));
+        } catch (Exception e) {
+            if ("product".equals(config)) {
+                ossName = "prod/" + ossName;
+            } else {
+                ossName = config + "/" + ossName;
+            }
+            ossClient.getObject(new GetObjectRequest(privateBucket, ossName), new File("./" + fileName));
+        }
+        // 关闭OSSClient。
+        ossClient.shutdown();
+    }
+}

+ 9 - 6
src/main/resources/mapper/BaseMapper.xml

@@ -178,7 +178,7 @@
                cs.unit      AS unit,
                cs.stock     AS stock,
                cpg.skuId    AS giftSkuId,
-               p.validFlag  AS validFlag,
+               IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 0), 999) AS validFlag,
                p.productType
         FROM cm_promotions_gift cpg
                  LEFT JOIN cm_sku cs ON cpg.skuId = cs.skuId
@@ -227,12 +227,14 @@
     <select id="getPostageFlagList" resultType="com.caimei365.order.model.vo.ProductPostageVo">
         SELECT
         p.productID AS productId,
-        freePostFlag AS postageFlag,
-        commodityType,
-        productType
+        p.freePostFlag AS postageFlag,
+        p.commodityType,
+        p.productType
         FROM product p
         left join cm_sku cs on p.productID=cs.productId
-        WHERE validFlag='2' and cs.organizeId = 0 AND cs.skuId in
+        left join cm_organize_product_info copi on copi.productId = p.productId
+        where copi.validFlag = 2 and copi.organizeId = 0 and cs.organizeId = 0
+        AND cs.skuId in
         <foreach collection="skuIds" open="(" separator="," close=")" item="skuId">
             #{skuId}
         </foreach>
@@ -245,7 +247,8 @@
         p.productType
         FROM product p
         LEFT JOIN cm_sku cs ON p.productID = cs.productId
-        WHERE p.validFlag='2' and cs.organizeId = 4 AND cs.skuId IN
+        left join cm_organize_product_info copi on copi.productId = p.productId
+        where copi.validFlag=2 and copi.organizeId = 4 and cs.organizeId = 4 AND cs.skuId IN
         <foreach collection="skuIds" open="(" separator="," close=")" item="skuId">
             #{skuId}
         </foreach>

+ 44 - 21
src/main/resources/mapper/CartClubMapper.xml

@@ -18,7 +18,6 @@
         c.shopID AS shopId,
         s.name AS shopName,
         s.logo AS shopLogo,
-        p.returnGoodsStutas,
         s.shopType as shopType
         <if test="status!=null and status == 1">
             ,p.splitCode
@@ -35,12 +34,26 @@
         ORDER BY c.cm_cartID DESC
     </select>
 
+    <select id="getProductReturnGoodsStutas" resultType="com.caimei365.order.model.vo.CartShopVo">
+        SELECT DISTINCT
+        c.shopID AS shopId,
+        p.returnGoodsStutas
+        FROM cm_cart c
+        LEFT JOIN shop s ON c.shopID = s.shopID
+        LEFT JOIN product p ON c.productID = p.productID
+        WHERE  c.skuId in
+        <foreach collection="skuIds" open="(" separator="," close=")" item="skuId">
+            #{skuId}
+        </foreach>
+        GROUP BY c.shopID, c.cm_cartID
+        ORDER BY c.cm_cartID DESC
+    </select>
+
     <select id="getShopsByProductIds" resultType="com.caimei365.order.model.vo.CartShopVo">
         SELECT DISTINCT
         s.shopID AS shopId,
         s.name AS shopName,
         s.logo AS shopLogo,
-        p.returnGoodsStutas,
         p.productType
         FROM shop s
         LEFT JOIN product p ON p.shopID = s.shopID
@@ -73,7 +86,7 @@
                p.invoiceType                 AS invoiceType,
                p.taxPoint                    AS taxRate,
                p.productCategory,
-               p.validFlag                   AS validFlag,
+               IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 0), 999) AS validFlag,
                p.visibility,
                if(csp.id is not null and csp.status = 0, 1, 0)  as svipProductFlag,
 #                csp.priceType                 as svipPriceType,
@@ -109,7 +122,7 @@
                p.invoiceType                 AS invoiceType,
                p.taxPoint                    AS taxRate,
                p.productCategory,
-               p.validFlag                   AS validFlag,
+               IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 0), 999) AS validFlag,
                p.visibility,
                p.productType
         FROM cm_cart c
@@ -142,7 +155,7 @@
         p.invoiceType AS invoiceType,
         p.taxPoint AS taxRate,
         p.productCategory,
-        p.validFlag AS validFlag,
+        IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 0), 999) AS validFlag,
         p.visibility,
         p.commodityType as commodityType,
         if(csp.id is not null and csp.status = 0,1,0) as svipProductFlag,
@@ -155,8 +168,9 @@
         LEFT JOIN product p ON c.productID = p.productID
         LEFT JOIN cm_sku cs ON c.skuId = cs.skuId
         LEFT JOIN cm_svip_product csp ON p.productID = csp.productId
-        WHERE c.userID = #{userId} and p.shopID = #{shopId} and cs.organizeId = 0
-        AND p.validFlag='2'
+        left join cm_organize_product_info copi on copi.productId = p.productId
+        WHERE c.userID = #{userId} and p.shopID = #{shopId} and cs.organizeId = 0 and copi.organizeId = 0
+        AND copi.validFlag='2'
         <if test="splitCode !=null and splitCode !=''">
             AND p.splitCode = #{splitCode}
         </if>
@@ -186,7 +200,7 @@
         p.invoiceType AS invoiceType,
         p.taxPoint AS taxRate,
         p.productCategory,
-        p.validFlag AS validFlag,
+        copi.validFlag AS validFlag,
         p.visibility,
         p.commodityType as commodityType,
         p.productType,
@@ -194,8 +208,9 @@
         FROM cm_cart c
         LEFT JOIN product p ON c.productID = p.productID
         LEFT JOIN cm_sku cs ON cs.productID = p.productID
-        WHERE c.userID = #{userId} and p.shopID = #{shopId} and cs.organizeID = #{organizeId}
-        AND p.validFlag='2'
+        left join cm_organize_product_info copi on copi.productId = p.productId
+        WHERE c.userID = #{userId} and p.shopID = #{shopId} and cs.organizeID = #{organizeId} and copi.organizeID = #{organizeId}
+        AND copi.validFlag='2'
         <if test="splitCode !=null and splitCode !=''">
             AND p.splitCode = #{splitCode}
         </if>
@@ -226,7 +241,7 @@
         p.invoiceType AS invoiceType,
         p.taxPoint AS taxRate,
         p.productCategory,
-        p.validFlag AS validFlag,
+        copi.validFlag AS validFlag,
         p.visibility,
         p.commodityType as commodityType,
         if(csp.id is not null and csp.status = 0,1,0) as svipProductFlag,
@@ -237,8 +252,9 @@
         FROM cm_sku cs
         LEFT JOIN product p on cs.productId = p.productID
         LEFT JOIN cm_svip_product csp ON p.productID = csp.productId
-        WHERE p.shopID = #{shopId} and cs.organizeId = 0
-        AND p.validFlag='2' AND cs.skuId in
+        left join cm_organize_product_info copi on copi.productId = p.productId
+        WHERE p.shopID = #{shopId} and cs.organizeId = 0 and copi.organizeId = 0
+        AND copi.validFlag='2' AND cs.skuId in
         <foreach collection="skuIdList" open="(" separator="," close=")" item="skuId">
             #{skuId}
         </foreach>
@@ -266,12 +282,14 @@
                p.taxPoint         AS taxRate,
                p.productCategory,
                p.visibility,
-               p.validFlag        AS validFlag,
+               copi.validFlag        AS validFlag,
                p.productType
         FROM cm_cart c
                  LEFT JOIN product p ON c.productID = p.productID
                  LEFT JOIN cm_sku cs ON cs.skuId = c.skuId
-        WHERE p.validFlag = '2'
+                 left join cm_organize_product_info copi on copi.productId = p.productId
+        WHERE copi.validFlag = '2'
+          and copi.organizeId = 0
           AND c.userID = #{userId}
           AND p.priceFlag != '1'
           and cs.organizeId = 0
@@ -300,13 +318,15 @@
                p.taxPoint         AS taxRate,
                p.productCategory,
                p.visibility,
-               p.validFlag        AS validFlag,
+               copi.validFlag        AS validFlag,
                p.productType
         FROM cm_cart c
                  LEFT JOIN product p ON c.productID = p.productID
                  LEFT JOIN cm_sku cs ON cs.skuId = c.skuId
+                 left join cm_organize_product_info copi on copi.productId = p.productId
         WHERE
            c.userID = #{userId}
+          AND copi.organizeId = 4
           AND p.priceFlag != '1'
           AND cs.organizeId = 4
         ORDER BY c.cm_cartID DESC
@@ -433,7 +453,7 @@
                p.invoiceType                AS invoiceType,
                p.taxPoint                   AS taxRate,
                p.productCategory,
-               p.validFlag                  AS validFlag,
+               copi.validFlag                  AS validFlag,
                p.visibility,
                p.commodityType              AS commodityType,
                if(csp.id is not null and csp.status = 0, 1, 0) as svipProductFlag,
@@ -445,7 +465,9 @@
         FROM cm_sku cs
                  LEFT JOIN product p on p.productID = cs.productId
                  LEFT JOIN cm_svip_product csp ON p.productID = csp.productId
-        WHERE p.validFlag = '2'
+                 left join cm_organize_product_info copi on copi.productId = p.productId
+        WHERE copi.validFlag = '2'
+          AND copi.organizeId = 0
           AND cs.skuId = #{skuId}
           and cs.organizeId = 0
     </select>
@@ -468,15 +490,16 @@
                p.invoiceType                AS invoiceType,
                p.taxPoint                   AS taxRate,
                p.productCategory,
-               p.validFlag                  AS validFlag,
+               copi.validFlag                  AS validFlag,
                p.visibility,
                p.commodityType              AS commodityType,
                p.productType,
                p.returnGoodsStutas
         FROM cm_sku cs
                  LEFT JOIN product p ON p.productID = cs.productId
-        WHERE p.validFlag = '2'
-          AND cs.skuId = #{skuId} and cs.organizeId = 4
+                 left join cm_organize_product_info copi on copi.productId = p.productId
+        WHERE copi.validFlag = '2'
+          AND cs.skuId = #{skuId} and cs.organizeId = 4 and copi.organizeId = 4
     </select>
 
     <select id="findVipCoupon" resultType="java.lang.Integer">

+ 4 - 4
src/main/resources/mapper/CartSellerMapper.xml

@@ -33,7 +33,7 @@
                p.invoiceType                AS invoiceType,
                p.taxPoint                   AS taxRate,
                p.productCategory,
-               p.validFlag                  AS validFlag,
+               IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 0), 999) AS validFlag,
                if(csp.id is not null and csp.status = 0, 1, 0) as svipProductFlag,
 #                csp.priceType                as svipPriceType,
 #                csp.discount                 as svipDiscount,
@@ -147,7 +147,7 @@
         p.invoiceType AS invoiceType,
         p.taxPoint AS taxRate,
         p.productCategory,
-        p.validFlag AS validFlag,
+        IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 0), 999) AS validFlag,
         p.productType,
         if(csp.id is not null and csp.status = 0,1,0) as svipProductFlag
 #         csp.priceType as svipPriceType,
@@ -180,7 +180,7 @@
                p.invoiceType      AS invoiceType,
                p.taxPoint         AS taxRate,
                p.productCategory,
-               p.validFlag        AS validFlag
+               IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 0), 999) AS validFlag,
         FROM product p
             left join cm_sku cs on p.productID=cs.productId
                  LEFT JOIN cm_second_hand_detail cshd ON p.productID = cshd.productID
@@ -207,7 +207,7 @@
                cs.minBuyNumber AS min,
                p.`name`       AS `name`,
                p.mainImage    AS image,
-               p.validFlag    AS validFlag
+               IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 0), 999) AS validFlag
         FROM cm_order_product op
             left join cm_sku cs on op.skuID=cs.skuId
                  LEFT JOIN product p ON op.productID = p.productID

+ 1 - 1
src/main/resources/mapper/MessagePushMapper.xml

@@ -27,7 +27,7 @@
         WHERE c.STATUS = 90
           AND covs.activeState != '流失用户'
           AND ( cbr.pagePath NOT LIKE '%https://www.caimei365.com/page-390.html%' OR cbr.pagePath NOT LIKE '%https://www.caimei365.com/product-6878.html%' )
-          AND ( ( cbr.pageLabel LIKE '%皮肤管理%' AND cbr.pageType = 10 ) OR cbr.productID IN ( SELECT productID FROM product WHERE bigTypeID = 1022 AND validFlag = 2 ) )
+          AND ( ( cbr.pageLabel LIKE '%皮肤管理%' AND cbr.pageType = 10 ) OR cbr.productID IN ( SELECT p.productID FROM product p left join cm_organize_product_info copi on copi.productId = p.productId WHERE p.bigTypeID = 1022 AND copi.validFlag = 2 ) )
 
           AND c.userID NOT IN (
                18578,13938,

+ 1 - 1
src/main/resources/mapper/OrderClubMapper.xml

@@ -768,7 +768,7 @@
         ORDER BY price ASC
     </select>
     <select id="getVoucher" resultType="com.caimei365.order.model.po.VoucherPo">
-        SELECT id, shopOrderId, remarks, addtime FROM cm_order_payment_voucher WHERE orderId = #{orderId}
+        SELECT id, shopOrderId, remarks, addtime FROM cm_order_payment_voucher WHERE shopOrderId = #{shopOrderId}
     </select>
     <select id="getVoucherImage" resultType="com.caimei365.order.model.dto.VoucherImageDto">
         SELECT id, voucherId, image as img FROM cm_voucher_image

+ 15 - 2
src/main/resources/mapper/OrderCommonMapper.xml

@@ -17,7 +17,7 @@
         cso.shopOrderNo,
         cso.orderID AS orderId,
         cso.organizeID AS organizeId,
-        cso.isColdChina AS isColdChina,
+        ifnull(cso.isColdChina, 0) AS isColdChina,
         cso.orderNo,
         cso.shopID AS shopId,
         cso.note,
@@ -35,6 +35,7 @@
         cso.needPayAmount,
         cso.shopProductAmount,
         cso.shopPostFee,
+        ifnull(cso.shopPostFlag, 0) as shopPostFlag,
         cso.shopTaxFee,
         cso.shouldPayShopAmount,
         cso.orderTime,
@@ -46,7 +47,7 @@
         s.shopType as shopType,
         ifnull(cso.receiptAmount,0) as receiptAmount,
         cso.eachDiscount,
-        cso.realPay,
+        ifnull(cso.realPay, cso.needPayAmount)as readPay,
         cso.receiptStatus
         FROM cm_shop_order cso
         LEFT JOIN shop s ON cso.shopID = s.shopID
@@ -56,6 +57,18 @@
             #{shopOrderId}
         </foreach>
     </select>
+    <select id="getShopOrderReceipt" resultType="com.caimei365.order.model.vo.DiscernReceiptVo">
+        SELECT c.id, c.payWay
+        FROM cm_discern_receipt c
+                 LEFT JOIN cm_receipt_order_relation r ON r.receiptID = c.id
+        WHERE r.shopOrderId = #{shopOrderId}
+          AND r.relationType = '2'
+          AND r.delFlag = '0'
+          AND c.delFlag = '0'
+          AND c.receiptStatus = '3'
+          AND c.payType != '16'
+        limit 1
+    </select>
     <select id="getOrderPromotionsById" resultType="com.caimei365.order.model.vo.PromotionsVo">
         SELECT id,
                name,

+ 69 - 0
src/main/resources/mapper/ShipMapper.xml

@@ -403,4 +403,73 @@
         SELECT userID FROM shop WHERE shopID=#{shopId}
     </select>
 
+    <select id="findList" resultType="com.caimei365.order.model.dto.OrderRemarkDto">
+        SELECT a.id           AS "id",
+               a.orderId      AS "orderId",
+               a.remarks      AS "remarks",
+               a.createBy     AS "createBy.id",
+               a.createDate   AS "createDate",
+               cu.accountName AS "createName"
+        FROM cm_order_remark a
+                 LEFT JOIN cm_mall_admin_user cu ON cu.id = a.createBy
+        where a.orderId = #{orderId}
+        ORDER BY a.createDate
+    </select>
+
+    <select id="findImages" resultType="java.lang.String">
+        select remarkImage
+        from cm_order_remark_image
+        where remarkId = #{id}
+    </select>
+
+    <select id="findFiles" resultType="com.caimei365.order.model.dto.OssFileDto">
+        select id, orderId, name, ossName, md5Hex, uploadTime
+        from cm_order_remark_file
+        where remarkId = #{id}
+    </select>
+
+    <select id="findFileByMd5" resultType="com.caimei365.order.model.dto.OssFileDto">
+        select id, orderId, remarkId, name, ossName, md5Hex, uploadTime
+        from cm_order_remark_file
+        where md5Hex = #{md5Hex}
+        limit 1
+    </select>
+
+    <select id="findRemarkById" resultType="com.caimei365.order.model.dto.OssFileDto">
+        select id, orderId, remarkId, name, ossName, md5Hex, uploadTime
+        from cm_order_remark_file
+        where id = #{fileId}
+    </select>
+
+    <insert id="insert" parameterType="com.caimei365.order.model.dto.OrderRemarkDto" keyProperty="id"
+            useGeneratedKeys="true">
+        INSERT INTO cm_order_remark(orderID,
+                                    remarks,
+                                    createBy,
+                                    createDate)
+        VALUES (#{orderId},
+                #{remarks},
+                #{createBy},
+                now())
+    </insert>
+
+    <insert id="insertImage">
+        INSERT INTO cm_order_remark_image(orderID, remarkId, remarkImage, addTime, delFlag)
+        values (#{orderId}, #{remarkId}, #{remarkImage}, now(), 0)
+    </insert>
+
+    <insert id="insertFile">
+        insert into cm_order_remark_file(orderId, remarkId, name, ossName, md5Hex, uploadTime)
+        values (#{orderId}, #{remarkId}, #{name}, #{ossName}, #{md5Hex}, now())
+    </insert>
+
+    <update id="update">
+        UPDATE cm_order_remark
+        SET orderID     = #{orderId},
+            shopOrderID = #{shopOrderId},
+            remarks     = #{remarks},
+            createBy    = #{createBy},
+            createDate  = #{createDate}
+        WHERE id = #{id}
+    </update>
 </mapper>

+ 2 - 2
src/main/resources/mapper/SubmitMapper.xml

@@ -32,14 +32,14 @@
         INSERT INTO cm_shop_order (onlinePayWays, shopOrderNo, orderID, orderNo, organizeID, isColdChina, shopID, note, userID, clubID, orderType,
                                    spID, orderPromotionsId, promotionFullReduction, svipShopReduction, brokerage,
                                    canRefundAmount, itemCount,
-                                   totalAmount, productAmount, needPayAmount, shopProductAmount, shopPostFee,
+                                   totalAmount, productAmount, needPayAmount, shopProductAmount, shopPostFee, shopPostFlag,
                                    shopTaxFee,
                                    shouldPayShopAmount, orderTime, orderSubmitType, splitFlag, payStatus,
                                    payedShopAmount, splitCode, realPay, eachDiscount, receiptStatus)
         VALUES (#{onlinePayWays}, #{shopOrderNo}, #{orderId}, #{orderNo}, #{organizeId},#{isColdChina}, #{shopId}, #{note}, #{userId}, #{clubId}, #{orderType},
                 #{spId}, #{orderPromotionsId}, #{promotionFullReduction}, #{svipShopReduction}, #{brokerage},
                 #{canRefundAmount}, #{itemCount},
-                #{totalAmount}, #{productAmount}, #{needPayAmount}, #{shopProductAmount}, #{shopPostFee}, #{shopTaxFee},
+                #{totalAmount}, #{productAmount}, #{needPayAmount}, #{shopProductAmount}, #{shopPostFee}, #{shopPostFlag}, #{shopTaxFee},
                 #{shouldPayShopAmount}, #{orderTime}, #{orderSubmitType}, #{splitFlag}, #{payStatus},
                 #{payedShopAmount}, #{splitCode}, #{realPay}, #{eachDiscount}, 1)
     </insert>