Parcourir la source

商品资质上传

plf il y a 4 ans
Parent
commit
04a65049e3
24 fichiers modifiés avec 1060 ajouts et 51 suppressions
  1. 1 1
      src/main/java/com/caimei/modules/cmpage/service/CmPageCentreService.java
  2. 1 4
      src/main/java/com/caimei/modules/miniprogram/utils/UploadPicUtils.java
  3. 1 1
      src/main/java/com/caimei/modules/newhome/service/NewPageCommodityTopicService.java
  4. 13 13
      src/main/java/com/caimei/modules/newhome/service/NewPageFloorService.java
  5. 3 3
      src/main/java/com/caimei/modules/newhome/service/NewPageQualitySupplierService.java
  6. 1 1
      src/main/java/com/caimei/modules/newhome/service/NewPageSmallTopicService.java
  7. 1 1
      src/main/java/com/caimei/modules/newhome/web/NewPageFirstNavigationController.java
  8. 4 0
      src/main/java/com/caimei/modules/order/dao/LogisticsRecordDao.java
  9. 48 0
      src/main/java/com/caimei/modules/order/dao/NewOrderDao.java
  10. 37 0
      src/main/java/com/caimei/modules/order/entity/CmFile.java
  11. 79 0
      src/main/java/com/caimei/modules/order/entity/LogisticsRecord.java
  12. 10 10
      src/main/java/com/caimei/modules/order/service/CmReturnedPurchaseService.java
  13. 67 1
      src/main/java/com/caimei/modules/order/service/NewOrderService.java
  14. 57 5
      src/main/java/com/caimei/modules/order/web/NewOrderController.java
  15. 5 6
      src/main/java/com/caimei/modules/oss/service/CmOssArchiveService.java
  16. 28 2
      src/main/java/com/caimei/modules/oss/utils/OSSUtils.java
  17. 9 1
      src/main/java/com/caimei/modules/oss/web/CmOssArchiveController.java
  18. 20 1
      src/main/resources/mappings/modules/order/LogisticsRecordMapper.xml
  19. 39 0
      src/main/resources/mappings/modules/order/OrderMapper.xml
  20. 3 0
      src/main/webapp/WEB-INF/views/modules/order/logisticsDetails.jsp
  21. 167 0
      src/main/webapp/WEB-INF/views/modules/order/qualification.jsp
  22. 395 0
      src/main/webapp/WEB-INF/views/modules/order/qualificationForm.jsp
  23. 70 0
      src/main/webapp/WEB-INF/views/modules/order/qualificationInfo.jsp
  24. 1 1
      src/main/webapp/WEB-INF/views/modules/order/shipLogistic.jsp

+ 1 - 1
src/main/java/com/caimei/modules/cmpage/service/CmPageCentreService.java

@@ -76,7 +76,7 @@ public class CmPageCentreService extends CrudService<CmPageCentreDao, CmPageCent
                 List<String> imageIds = new ArrayList<>();
                 for (NewPageFloorImage floorImage : floorImages) {
                     if (!floorImage.getImage().contains("http")) {
-                        floorImage.setImage(UploadPicUtils.saveImageToServer(floorImage.getImage(), null));
+                        floorImage.setImage(UploadPicUtils.saveImageToServer(floorImage.getImage()));
                     }
                     CmImage image = new CmImage();
                     BeanUtils.copyProperties(floorImage, image);

+ 1 - 4
src/main/java/com/caimei/modules/miniprogram/utils/UploadPicUtils.java

@@ -13,7 +13,6 @@ import com.thinkgem.jeesite.common.config.Global;
 import com.thinkgem.jeesite.common.utils.Encodes;
 import com.thinkgem.jeesite.common.utils.StringUtils;
 
-import javax.servlet.http.HttpServletRequest;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -23,15 +22,13 @@ import java.util.Properties;
 
 public class UploadPicUtils {
 
-    public static String saveImageToServer(String imgUrl, HttpServletRequest request) {
+    public static String saveImageToServer(String imgUrl) {
         String photoServer = Global.getConfig("photoServer");//获取文件服务器地址
         ImageUploadInfo saveImageSerivce = new ImageUploadInfo();
         String newImage = imgUrl;
         if (StringUtils.isNotBlank(newImage) && !newImage.startsWith("http:") && !newImage.startsWith("https:")) {
             newImage = Encodes.urlDecode(newImage);
-//            String realPath = request.getSession().getServletContext().getRealPath(newImage);
             String realPath = UploadImageUtils.getAbsolutePath(newImage);
-            //			realPath=Encodes.urlDecode(realPath);
             int pointerIndex = realPath.lastIndexOf(".");
             try {
                 saveImageSerivce = UploadUtils.saveImageSerivce(realPath, pointerIndex, realPath);

+ 1 - 1
src/main/java/com/caimei/modules/newhome/service/NewPageCommodityTopicService.java

@@ -38,7 +38,7 @@ public class NewPageCommodityTopicService extends CrudService<NewPageCommodityTo
 	@Transactional(readOnly = false)
 	public void save(NewPageCommodityTopic newPageCommodityTopic, HttpServletRequest request) {
 		if(null != newPageCommodityTopic.getImage() && !"".equals(newPageCommodityTopic.getImage())){
-			String img = UploadPicUtils.saveImageToServer(newPageCommodityTopic.getImage(),request);
+			String img = UploadPicUtils.saveImageToServer(newPageCommodityTopic.getImage());
 			newPageCommodityTopic.setImage(img);
 		}
 		super.save(newPageCommodityTopic);

+ 13 - 13
src/main/java/com/caimei/modules/newhome/service/NewPageFloorService.java

@@ -72,16 +72,16 @@ public class NewPageFloorService extends CrudService<NewPageFloorDao, NewPageFlo
 
     @Transactional(readOnly = false)
     public void saveFloorContent(NewPageFloorContent floorContent) {
-        floorContent.setPcAdsImage1(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage1(), null));
-        floorContent.setPcAdsImage2(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage2(), null));
-        floorContent.setPcAdsImage3(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage3(), null));
-        floorContent.setPcAdsImage4(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage4(), null));
-        floorContent.setPcAdsImage5(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage5(), null));
-        floorContent.setAppletsAdsImage1(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage1(), null));
-        floorContent.setAppletsAdsImage2(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage2(), null));
-        floorContent.setAppletsAdsImage3(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage3(), null));
-        floorContent.setAppletsAdsImage4(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage4(), null));
-        floorContent.setAppletsAdsImage5(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage5(), null));
+        floorContent.setPcAdsImage1(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage1()));
+        floorContent.setPcAdsImage2(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage2()));
+        floorContent.setPcAdsImage3(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage3()));
+        floorContent.setPcAdsImage4(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage4()));
+        floorContent.setPcAdsImage5(UploadPicUtils.saveImageToServer(floorContent.getPcAdsImage5()));
+        floorContent.setAppletsAdsImage1(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage1()));
+        floorContent.setAppletsAdsImage2(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage2()));
+        floorContent.setAppletsAdsImage3(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage3()));
+        floorContent.setAppletsAdsImage4(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage4()));
+        floorContent.setAppletsAdsImage5(UploadPicUtils.saveImageToServer(floorContent.getAppletsAdsImage5()));
         if (StringUtils.isNotBlank(floorContent.getTemplateType()) && Integer.parseInt(floorContent.getTemplateType()) > 50) {
             floorContent.setTemplateType((Integer.parseInt(floorContent.getTemplateType())-50)+"");
         }
@@ -100,14 +100,14 @@ public class NewPageFloorService extends CrudService<NewPageFloorDao, NewPageFlo
             List<NewPageFloorImage> floorImageList = JSON.parseArray(floorContent.getImages(), NewPageFloorImage.class);
             for (NewPageFloorImage floorImage : floorImageList) {
                 //图片处理
-                floorImage.setImage(UploadPicUtils.saveImageToServer(floorImage.getImage(), null));
-                floorImage.setAppletsImage(UploadPicUtils.saveImageToServer(floorImage.getAppletsImage(), null));
+                floorImage.setImage(UploadPicUtils.saveImageToServer(floorImage.getImage()));
+                floorImage.setAppletsImage(UploadPicUtils.saveImageToServer(floorImage.getAppletsImage()));
                 //换行符处理
                 if (StringUtils.isNotBlank(floorImage.getContent())) {
                     floorImage.setContent(floorImage.getContent().replace("\n", ""));
                 }
                 if (StringUtils.isNotBlank(floorImage.getAdsImage())) {
-                    floorImage.setAdsImage(UploadPicUtils.saveImageToServer(floorImage.getAdsImage(), null));
+                    floorImage.setAdsImage(UploadPicUtils.saveImageToServer(floorImage.getAdsImage()));
                 }
                 if (floorContent.getFloorId() != null) {
                     floorImage.setFloorId(floorContent.getFloorId());

+ 3 - 3
src/main/java/com/caimei/modules/newhome/service/NewPageQualitySupplierService.java

@@ -49,7 +49,7 @@ public class NewPageQualitySupplierService extends CrudService<NewPageQualitySup
 	@Transactional(readOnly = false)
 	public void save(NewPageQualitySupplier newPageQualitySupplier, HttpServletRequest request) {
 		if(null != newPageQualitySupplier.getImage() && !"".equals(newPageQualitySupplier.getImage())){
-			String img = UploadPicUtils.saveImageToServer(newPageQualitySupplier.getImage(),request);
+			String img = UploadPicUtils.saveImageToServer(newPageQualitySupplier.getImage());
 			newPageQualitySupplier.setImage(img);
 		}
 		super.save(newPageQualitySupplier);
@@ -64,11 +64,11 @@ public class NewPageQualitySupplierService extends CrudService<NewPageQualitySup
 	@Transactional(readOnly = false)
 	public void saveImage(NewPageQualitySupplierImage newPageQualitySupplierImage, HttpServletRequest request) {
 		if(null != newPageQualitySupplierImage.getCrmImage() && !"".equals(newPageQualitySupplierImage.getCrmImage())){
-			String img = UploadPicUtils.saveImageToServer(newPageQualitySupplierImage.getCrmImage(),request);
+			String img = UploadPicUtils.saveImageToServer(newPageQualitySupplierImage.getCrmImage());
 			newPageQualitySupplierImage.setCrmImage(img);
 		}
 		if(null != newPageQualitySupplierImage.getWwwImage() && !"".equals(newPageQualitySupplierImage.getWwwImage())){
-			String img = UploadPicUtils.saveImageToServer(newPageQualitySupplierImage.getWwwImage(),request);
+			String img = UploadPicUtils.saveImageToServer(newPageQualitySupplierImage.getWwwImage());
 			newPageQualitySupplierImage.setWwwImage(img);
 		}
 		String id = newPageQualitySupplierImage.getId();

+ 1 - 1
src/main/java/com/caimei/modules/newhome/service/NewPageSmallTopicService.java

@@ -38,7 +38,7 @@ public class NewPageSmallTopicService extends CrudService<NewPageSmallTopicDao,
 	@Transactional(readOnly = false)
 	public void save(NewPageSmallTopic newPageSmallTopic, HttpServletRequest request) {
 		if(null != newPageSmallTopic.getImage() && !"".equals(newPageSmallTopic.getImage())){
-			String img = UploadPicUtils.saveImageToServer(newPageSmallTopic.getImage(),request);
+			String img = UploadPicUtils.saveImageToServer(newPageSmallTopic.getImage());
 					newPageSmallTopic.setImage(img);
 		}
 		super.save(newPageSmallTopic);

+ 1 - 1
src/main/java/com/caimei/modules/newhome/web/NewPageFirstNavigationController.java

@@ -92,7 +92,7 @@ public class NewPageFirstNavigationController extends BaseController {
         }
         //上传图片
         String image = newPageFirstNavigation.getIcon();
-        image = UploadPicUtils.saveImageToServer(image, null);
+        image = UploadPicUtils.saveImageToServer(image);
         newPageFirstNavigation.setIcon(image);
         if (StringUtils.isEmpty(newPageFirstNavigation.getId())) {
             newPageFirstNavigation.setCreateDate(new Date());

+ 4 - 0
src/main/java/com/caimei/modules/order/dao/LogisticsRecordDao.java

@@ -12,4 +12,8 @@ import java.util.List;
 public interface LogisticsRecordDao extends CrudDao<LogisticsRecord> {
 
     public List<LogisticsRecord> findByLogisticsBatchID(@Param("logisticsBatchID") Integer logisticsBatchID);
+
+    LogisticsRecord findByRecordId(Integer recordId);
+
+    void updateLogisticsRecord(LogisticsRecord logisticsRecord);
 }

+ 48 - 0
src/main/java/com/caimei/modules/order/dao/NewOrderDao.java

@@ -1,5 +1,6 @@
 package com.caimei.modules.order.dao;
 
+import com.caimei.modules.order.entity.CmFile;
 import com.caimei.modules.order.entity.NewOrder;
 import com.caimei.modules.product.entity.CmPromotion;
 import com.caimei.modules.user.entity.NewCmSp;
@@ -64,4 +65,51 @@ public interface NewOrderDao extends CrudDao<NewOrder> {
      * @param orderId
      */
     void updateByRebateFlag(Integer orderId);
+
+    /**
+     * 查询商品资质文件
+     *
+     * @param recordId
+     * @return
+     */
+    List<CmFile> findQualificationFile(String recordId);
+
+    /**
+     * 查询资质图片
+     *
+     * @param recordId
+     * @return
+     */
+    List<String> findQualificationImage(Integer recordId);
+
+    /**
+     * 删除所有的资质图片
+     *
+     * @param recordId
+     */
+    void deleteQualificationImage(String recordId);
+
+    /**
+     * 保存资质图片
+     *
+     * @param recordId
+     * @param image
+     */
+    void insertQualificationImage(@Param("recordId") String recordId, @Param("image") String image);
+
+    /**
+     * 删除商品资质文件
+     *
+     * @param recordId
+     */
+    void deleteQualificationFile(String recordId);
+
+    /**
+     * 保存商品资质文件
+     *
+     * @param recordId
+     * @param fileName
+     * @param ossName
+     */
+    void insertQualificationFile(@Param("recordId") String recordId, @Param("fileName") String fileName, @Param("ossName") String ossName);
 }

+ 37 - 0
src/main/java/com/caimei/modules/order/entity/CmFile.java

@@ -0,0 +1,37 @@
+package com.caimei.modules.order.entity;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : plf
+ * @date : 2021/5/24
+ */
+public class CmFile implements Serializable {
+    /**
+     * 资质文件名称
+     */
+    private String fileName;
+
+    /**
+     * oss服务器文件名称
+     */
+    private String ossName;
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public String getOssName() {
+        return ossName;
+    }
+
+    public void setOssName(String ossName) {
+        this.ossName = ossName;
+    }
+}

+ 79 - 0
src/main/java/com/caimei/modules/order/entity/LogisticsRecord.java

@@ -1,8 +1,12 @@
 package com.caimei.modules.order.entity;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.thinkgem.jeesite.common.persistence.DataEntity;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * @author lwt
  * @date 2018-07-24
@@ -20,6 +24,15 @@ public class LogisticsRecord extends DataEntity<LogisticsRecord> {
     private Integer productID; //商品ID
     private String productName; //商品名称
     private String image; //商品图片
+    private String sn;     //SN码
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date uploadTime;    //上传商品资质时间
+    private String shopName; //供应商名称
+    private Boolean isFile = false; //是否上传资质文件
+    private List<CmFile> fileList;  //资质文件
+    private List<String> imageList;  //资质图片
+    private String[] images;
+    private String[] files;
 
 
     public Integer getLogisticsBatchID() {
@@ -61,6 +74,7 @@ public class LogisticsRecord extends DataEntity<LogisticsRecord> {
     public void setBuyNum(Integer buyNum) {
         this.buyNum = buyNum;
     }
+
     public Integer getPresentNum() {
         return presentNum;
     }
@@ -68,6 +82,7 @@ public class LogisticsRecord extends DataEntity<LogisticsRecord> {
     public void setPresentNum(Integer presentNum) {
         this.presentNum = presentNum;
     }
+
     public Integer getNum() {
         return num;
     }
@@ -99,4 +114,68 @@ public class LogisticsRecord extends DataEntity<LogisticsRecord> {
     public void setImage(String image) {
         this.image = image;
     }
+
+    public String getShopName() {
+        return shopName;
+    }
+
+    public void setShopName(String shopName) {
+        this.shopName = shopName;
+    }
+
+    public String getSn() {
+        return sn;
+    }
+
+    public void setSn(String sn) {
+        this.sn = sn;
+    }
+
+    public Boolean getIsFile() {
+        return isFile;
+    }
+
+    public void setIsFile(Boolean isFile) {
+        this.isFile = isFile;
+    }
+
+    public List<CmFile> getFileList() {
+        return fileList;
+    }
+
+    public void setFileList(List<CmFile> fileList) {
+        this.fileList = fileList;
+    }
+
+    public List<String> getImageList() {
+        return imageList;
+    }
+
+    public void setImageList(List<String> imageList) {
+        this.imageList = imageList;
+    }
+
+    public String[] getImages() {
+        return images;
+    }
+
+    public void setImages(String[] images) {
+        this.images = images;
+    }
+
+    public String[] getFiles() {
+        return files;
+    }
+
+    public void setFiles(String[] files) {
+        this.files = files;
+    }
+
+    public Date getUploadTime() {
+        return uploadTime;
+    }
+
+    public void setUploadTime(Date uploadTime) {
+        this.uploadTime = uploadTime;
+    }
 }

+ 10 - 10
src/main/java/com/caimei/modules/order/service/CmReturnedPurchaseService.java

@@ -113,23 +113,23 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
         cmReturnedPurchase.setStatus("1");
 
         if (null != cmReturnedPurchase.getImage1() && !"".equals(cmReturnedPurchase.getImage1())) {
-            String img = saveImageToServer(cmReturnedPurchase.getImage1(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getImage1());
             cmReturnedPurchase.setImage1(img);
         }
         if (null != cmReturnedPurchase.getImage2() && !"".equals(cmReturnedPurchase.getImage2())) {
-            String img = saveImageToServer(cmReturnedPurchase.getImage2(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getImage2());
             cmReturnedPurchase.setImage2(img);
         }
         if (null != cmReturnedPurchase.getImage3() && !"".equals(cmReturnedPurchase.getImage3())) {
-            String img = saveImageToServer(cmReturnedPurchase.getImage3(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getImage3());
             cmReturnedPurchase.setImage3(img);
         }
         if (null != cmReturnedPurchase.getImage4() && !"".equals(cmReturnedPurchase.getImage4())) {
-            String img = saveImageToServer(cmReturnedPurchase.getImage4(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getImage4());
             cmReturnedPurchase.setImage4(img);
         }
         if (null != cmReturnedPurchase.getImage5() && !"".equals(cmReturnedPurchase.getImage5())) {
-            String img = saveImageToServer(cmReturnedPurchase.getImage5(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getImage5());
             cmReturnedPurchase.setImage5(img);
         }
         int num = 0;
@@ -447,23 +447,23 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
         cmReturnedPurchase.setConfirmReturnTime(confirmReturnTime);
 
         if (null != cmReturnedPurchase.getReviewImage1() && !"".equals(cmReturnedPurchase.getReviewImage1())) {
-            String img = saveImageToServer(cmReturnedPurchase.getReviewImage1(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getReviewImage1());
             cmReturnedPurchase.setReviewImage1(img);
         }
         if (null != cmReturnedPurchase.getReviewImage2() && !"".equals(cmReturnedPurchase.getReviewImage2())) {
-            String img = saveImageToServer(cmReturnedPurchase.getReviewImage2(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getReviewImage2());
             cmReturnedPurchase.setReviewImage2(img);
         }
         if (null != cmReturnedPurchase.getReviewImage3() && !"".equals(cmReturnedPurchase.getReviewImage3())) {
-            String img = saveImageToServer(cmReturnedPurchase.getReviewImage3(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getReviewImage3());
             cmReturnedPurchase.setReviewImage3(img);
         }
         if (null != cmReturnedPurchase.getReviewImage4() && !"".equals(cmReturnedPurchase.getReviewImage4())) {
-            String img = saveImageToServer(cmReturnedPurchase.getReviewImage4(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getReviewImage4());
             cmReturnedPurchase.setReviewImage4(img);
         }
         if (null != cmReturnedPurchase.getReviewImage5() && !"".equals(cmReturnedPurchase.getReviewImage5())) {
-            String img = saveImageToServer(cmReturnedPurchase.getReviewImage5(), request);
+            String img = saveImageToServer(cmReturnedPurchase.getReviewImage5());
             cmReturnedPurchase.setReviewImage5(img);
         }
 

+ 67 - 1
src/main/java/com/caimei/modules/order/service/NewOrderService.java

@@ -7,6 +7,7 @@ import com.caimei.exception.BusinessException;
 import com.caimei.modules.bulkpurchase.dao.OrderInvoiceDao;
 import com.caimei.modules.bulkpurchase.entity.OrderInvoice;
 import com.caimei.modules.bulkpurchase.service.OrderInvoiceService;
+import com.caimei.modules.miniprogram.utils.UploadPicUtils;
 import com.caimei.modules.order.dao.*;
 import com.caimei.modules.order.entity.*;
 import com.caimei.modules.order.utils.HttpClientUtils;
@@ -1194,7 +1195,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
      * @param remarks         备注
      */
     @Transactional(readOnly = false)
-    public void delivery
+    public String delivery
     (Map<Integer, List<NewOrderProduct>> deliveryData, List<NewOrderProduct> orderProducts, Map<Integer, Integer> orderProductMap, Map<String, List<String>> logisticsInfo, String
             remarks, String remarkImage) throws Exception {
         //更新这一次发货的子订单信息
@@ -1307,6 +1308,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
                 logisticsInformationDao.insert(l);
             }
         }
+        return lb.getId();
     }
 
     /**
@@ -1953,5 +1955,69 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
     public void modifyRebate(Integer orderId) {
         newOrderDao.updateByRebateFlag(orderId);
     }
+
+    public List<LogisticsRecord> qualificationList(Integer logisticsBatchId) {
+        List<LogisticsRecord> logisticsRecords = logisticsRecordDao.findByLogisticsBatchID(logisticsBatchId);
+        String wwwServer = Global.getConfig("wwwServer");
+        logisticsRecords.forEach(item -> {
+            item.setImage(AppUtils.getImageURL("product", item.getImage(), 0, wwwServer));
+            List<CmFile> fileList = newOrderDao.findQualificationFile(item.getId());
+            if (fileList != null && fileList.size() > 0) {
+                item.setIsFile(true);
+            }
+        });
+        return logisticsRecords;
+    }
+
+    public LogisticsRecord qualificationForm(Integer recordId) {
+        LogisticsRecord logisticsRecord = logisticsRecordDao.findByRecordId(recordId);
+        List<CmFile> fileList = newOrderDao.findQualificationFile(String.valueOf(recordId));
+        logisticsRecord.setFileList(fileList);
+        List<String> images = newOrderDao.findQualificationImage(recordId);
+        logisticsRecord.setImageList(images);
+        return logisticsRecord;
+    }
+
+    @Transactional(readOnly = false)
+    public void saveQualification(LogisticsRecord logisticsRecord) {
+        logisticsRecordDao.updateLogisticsRecord(logisticsRecord);
+        //商品资质图片
+        String[] images = logisticsRecord.getImages();
+        newOrderDao.deleteQualificationImage(logisticsRecord.getId());
+        if (images != null && images.length > 0) {
+            for (String image : images) {
+                if (StringUtils.isNotBlank(image)) {
+                    image = UploadPicUtils.saveImageToServer(image);
+                    newOrderDao.insertQualificationImage(logisticsRecord.getId(), image);
+                }
+            }
+        }
+        //商品资质文件
+        String[] files = logisticsRecord.getFiles();
+        newOrderDao.deleteQualificationFile(logisticsRecord.getId());
+        if (files != null && files.length > 0) {
+            for (String file : files) {
+                if (StringUtils.isNotBlank(file)) {
+                    String[] split = file.split("---");
+                    String fileName = split[0];
+                    String ossName = split[1];
+                    newOrderDao.insertQualificationFile(logisticsRecord.getId(), fileName, ossName);
+                }
+            }
+        }
+    }
+
+    public List<LogisticsRecord> qualificationInfo(Integer logisticsBatchId) {
+        List<LogisticsRecord> logisticsRecords = logisticsRecordDao.findByLogisticsBatchID(logisticsBatchId);
+        String wwwServer = Global.getConfig("wwwServer");
+        logisticsRecords.forEach(item -> {
+            item.setImage(AppUtils.getImageURL("product", item.getImage(), 0, wwwServer));
+            List<CmFile> fileList = newOrderDao.findQualificationFile(item.getId());
+            item.setFileList(fileList);
+            List<String> images = newOrderDao.findQualificationImage(Integer.valueOf(item.getId()));
+            item.setImageList(images);
+        });
+        return logisticsRecords;
+    }
 }
 

+ 57 - 5
src/main/java/com/caimei/modules/order/web/NewOrderController.java

@@ -10,10 +10,7 @@ import com.caimei.modules.bulkpurchase.service.CmFinanceChargeService;
 import com.caimei.modules.bulkpurchase.service.PurchaseProductService;
 import com.caimei.modules.common.utils.ExcelUtil;
 import com.caimei.modules.common.utils.UploadUtils;
-import com.caimei.modules.order.dao.CmDiscernReceiptDao;
-import com.caimei.modules.order.dao.CmReceiptOrderRelationDao;
-import com.caimei.modules.order.dao.CmReturnedPurchaseDao;
-import com.caimei.modules.order.dao.NewOrderProductDao;
+import com.caimei.modules.order.dao.*;
 import com.caimei.modules.order.entity.*;
 import com.caimei.modules.order.service.*;
 import com.caimei.modules.order.utils.OrderUtil;
@@ -134,6 +131,8 @@ public class NewOrderController extends BaseController {
     private CmPromotionDao cmPromotionDao;
     @Autowired
     private PurchaseProductService purchaseProductService;
+    @Autowired
+    private LogisticsRecordDao logisticsRecordDao;
 
     @ModelAttribute
     public NewOrder get(@RequestParam(required = false) String id) {
@@ -847,8 +846,10 @@ public class NewOrderController extends BaseController {
                 ops.add(o);
             }
         }
+        //物流批次id
+        String logisticsBatchId;
         try {
-            newOrderService.delivery(deliveryData, orderProducts, orderProductMap, logisticsInfo, remarks, remarkImage);
+            logisticsBatchId = newOrderService.delivery(deliveryData, orderProducts, orderProductMap, logisticsInfo, remarks, remarkImage);
         } catch (Exception e) {
             logger.info(e.toString(), e);
             result.put("success", false);
@@ -856,6 +857,7 @@ public class NewOrderController extends BaseController {
             return result;
         }
         result.put("success", true);
+        result.put("logisticsBatchId", logisticsBatchId);
         return result;
     }
 
@@ -2054,4 +2056,54 @@ public class NewOrderController extends BaseController {
         newOrderService.modifyRebate(orderId);
         return "redirect:" + Global.getAdminPath() + "/order/orderList";
     }
+
+    /**
+     * 商品资质列表
+     */
+    @RequestMapping("qualificationList")
+    public String qualificationList(Integer logisticsBatchId, Model model) {
+        List<LogisticsRecord> logisticsRecords = newOrderService.qualificationList(logisticsBatchId);
+        model.addAttribute("logisticsRecords", logisticsRecords);
+        Integer orderId = 0;
+        if (logisticsRecords != null && logisticsRecords.size() > 0) {
+            orderId = logisticsRecords.get(0).getOrderID();
+        }
+        model.addAttribute("orderId", orderId);
+        return "modules/order/qualification";
+    }
+
+    /**
+     * 商品资质编辑页面
+     */
+    @RequestMapping("qualificationForm")
+    public String qualificationForm(Integer recordId, Model model) {
+        LogisticsRecord logisticsRecord = newOrderService.qualificationForm(recordId);
+        model.addAttribute("logisticsRecord", logisticsRecord);
+        return "modules/order/qualificationForm";
+    }
+
+    /**
+     * 商品资质保存
+     */
+    @RequestMapping("saveQualification")
+    public String saveQualification(LogisticsRecord logisticsRecord, RedirectAttributes redirectAttributes) {
+        newOrderService.saveQualification(logisticsRecord);
+        addMessage(redirectAttributes, "上传商品资质成功");
+        return "redirect:" + Global.getAdminPath() + "/order/qualificationList?logisticsBatchId=" + logisticsRecord.getLogisticsBatchID();
+    }
+
+    /**
+     * 查看商品资质
+     */
+    @RequestMapping("qualificationInfo")
+    public String qualificationInfo(Integer logisticsBatchId, Model model) {
+        List<LogisticsRecord> recordList = newOrderService.qualificationInfo(logisticsBatchId);
+        model.addAttribute("recordList", recordList);
+        model.addAttribute("shopName", recordList.get(0).getShopName());
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String uploadTime = format.format(recordList.get(0).getUploadTime());
+        model.addAttribute("uploadTime", uploadTime);
+        model.addAttribute("logisticsBatchId", logisticsBatchId);
+        return "modules/order/qualificationInfo";
+    }
 }

+ 5 - 6
src/main/java/com/caimei/modules/oss/service/CmOssArchiveService.java

@@ -231,12 +231,6 @@ public class CmOssArchiveService extends CrudService<CmOssArchiveDao, CmOssArchi
         String uuid = UUID.randomUUID().toString().replaceAll("-", "");
         String filePath = uuid + "." + fileType;
         String contentType = OSSUtils.getContentType(fileAllName);
-        String config = Global.getConfig("cm.config");
-        if ("product".equals(config)) {
-            filePath = "prod/" + filePath;
-        } else {
-            filePath = config + "/" + filePath;
-        }
         try {
             //保存本地
             File file = OSSUtils.ossUpload(multipartFile);
@@ -263,4 +257,9 @@ public class CmOssArchiveService extends CrudService<CmOssArchiveDao, CmOssArchi
         OSSUtils.downFile(ossName, fileName);
         download(request, response, fileName);
     }
+
+    public void deleteOssFile(String ossName) {
+        //删除oss服务器上的文件
+        OSSUtils.deleteSingleFile(ossName);
+    }
 }

+ 28 - 2
src/main/java/com/caimei/modules/oss/utils/OSSUtils.java

@@ -18,10 +18,16 @@ public class OSSUtils {
     private static String accessKeyId = Global.getConfig("aliyun.accessKeyId");
     private static String accessKeySecret = Global.getConfig("aliyun.accessKeySecret");
     private static String privateBucket = Global.getConfig("aliyun.bucketName");
+    private static String config = Global.getConfig("cm.config");
 
     public static 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);
@@ -149,7 +155,17 @@ public class OSSUtils {
         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
         // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。
         // 如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
-        ossClient.deleteObject(privateBucket, fileName);
+        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();
     }
@@ -161,7 +177,17 @@ public class OSSUtils {
         // 创建OSSClient实例。
         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
         // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
-        ossClient.getObject(new GetObjectRequest(privateBucket, ossName), new File("./" + fileName));
+        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 - 1
src/main/java/com/caimei/modules/oss/web/CmOssArchiveController.java

@@ -157,7 +157,7 @@ public class CmOssArchiveController extends BaseController {
 
 
     /**
-     * 下载pdf文件
+     * 下载文件
      */
     @RequestMapping("/fileDownload")
     public void fileDownload(String ossName, String fileName, HttpServletRequest request, HttpServletResponse response) {
@@ -167,4 +167,12 @@ public class CmOssArchiveController extends BaseController {
             e.printStackTrace();
         }
     }
+
+    /**
+     * oss文件删除
+     */
+    @RequestMapping(value = "deleteOssFile")
+    public void deleteOssFile(String ossName) {
+        cmOssArchiveService.deleteOssFile(ossName);
+    }
 }

+ 20 - 1
src/main/resources/mappings/modules/order/LogisticsRecordMapper.xml

@@ -47,13 +47,32 @@
 			a.orderID AS orderID,
 			a.orderProductID AS orderProductID,
 			a.num AS num,
+			a.sn AS sn,
+			a.uploadTime AS uploadTime,
 			p.productID AS productID,
 			p.name AS productName,
 			p.productImage AS image,
 			p.num AS buyNum,
-			p.presentNum AS presentNum
+			p.presentNum AS presentNum,
+			s.name AS shopName
 		from cm_logistics_record a
 		left join cm_order_product p on a.orderProductID = p.orderProductID
+		LEFT JOIN shop s ON s.shopID = p.shopID
 		where a.logisticsBatchID = #{logisticsBatchID}
 	</select>
+
+	<select id="findByRecordId" resultType="com.caimei.modules.order.entity.LogisticsRecord">
+		SELECT
+		  id,
+		  sn,
+		  logisticsBatchID
+		FROM
+		  cm_logistics_record
+		WHERE
+		  id = #{recordId}
+	</select>
+	
+	<update id="updateLogisticsRecord">
+		UPDATE cm_logistics_record SET sn = #{sn}, uploadTime = NOW() WHERE id = #{id}
+	</update>
 </mapper>

+ 39 - 0
src/main/resources/mappings/modules/order/OrderMapper.xml

@@ -798,4 +798,43 @@
 	<update id="updateByRebateFlag">
 		UPDATE cm_order SET rebateFlag = 1 WHERE orderID = #{orderId}
 	</update>
+
+	<select id="findQualificationFile" resultType="com.caimei.modules.order.entity.CmFile">
+		SELECT
+		  fileName,
+		  ossName
+		FROM
+		  cm_qualification_file
+		WHERE
+		  recordId = #{recordId}
+	</select>
+
+	<select id="findQualificationImage" resultType="string">
+		SELECT image FROM cm_qualification_image WHERE recordId = #{recordId}  ORDER BY id
+	</select>
+
+	<delete id="deleteQualificationImage">
+        DELETE FROM cm_qualification_image WHERE recordId = #{recordId}
+    </delete>
+
+	<insert id="insertQualificationImage">
+        INSERT INTO `cm_qualification_image` (
+            `recordId`, `image`)
+        VALUES
+          (#{recordId}, #{image});
+    </insert>
+
+	<delete id="deleteQualificationFile">
+        DELETE FROM cm_qualification_file WHERE recordId = #{recordId}
+    </delete>
+
+	<insert id="insertQualificationFile">
+        INSERT INTO `cm_qualification_file` (
+          `recordId`, `fileName`, `ossName`
+        )
+        VALUES
+          (
+            #{recordId}, #{fileName}, #{ossName}
+          )
+    </insert>
 </mapper>

+ 3 - 0
src/main/webapp/WEB-INF/views/modules/order/logisticsDetails.jsp

@@ -74,6 +74,9 @@
                     </tr>
                 </table>
             </c:forEach>
+            <div class="select-ship" style="float:right">
+                <input class="btn btn-primary" type="button" value="查看商品资质" onclick="window.location.href='${ctx}/order/qualificationInfo?logisticsBatchId=${liv.logisticsBatch.id}'" style="margin-right: 100px"/>
+            </div>
             <c:forEach items="${liv.logisticsInformationList}" var="lis">
                 <div class="more-order">
                     <div class="lg-company">

+ 167 - 0
src/main/webapp/WEB-INF/views/modules/order/qualification.jsp

@@ -0,0 +1,167 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>订单列表</title>
+    <meta name="decorator" content="default"/>
+    <%--<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>--%>
+    <style type="text/css">
+        * {
+            margin: 0;
+            padding: 0
+        }
+
+        a {
+            list-style: none;
+            text-decoration: none
+        }
+
+        i {
+            font-style: normal
+        }
+
+        body {
+            background-color: rgb(228, 228, 228);
+        }
+
+        h3 {
+            line-height: 20px;
+            padding: 20px 0 20px 15px;
+            border-bottom: 1px solid #CCCCCC;
+            font-weight: normal
+        }
+
+        .body-margin {
+            margin: 0 26px;
+        }
+
+        .left-span {
+            width: 3px;
+            height: 20px;
+            margin-right: 10px;
+            background-color: #00A6C7;
+            display: inline-block;
+            vertical-align: bottom
+        }
+
+        .list-div label {
+            display: inline-block;
+            width: 70px;
+        }
+
+        .ship-shop {
+            background-color: #fff;
+            margin-top: 20px;
+            min-height: 500px;
+        }
+
+        .table {
+            width: 100%;
+            border-collapse: collapse;
+        }
+
+        .table th {
+            color: #000;
+            font-weight: normal
+        }
+
+        .table th, .table td {
+            height: 35px;
+            border: 1px solid #CCCCCC;
+            text-align: center;
+            padding: 5px 0;
+        }
+
+        .select-all td {
+            border: 0
+        }
+
+        .select-all label {
+            display: inline-block;
+            padding-left: 5px;
+            vertical-align: 1px;
+        }
+
+        .select-ship span {
+            cursor: pointer;
+            display: inline-block;
+            width: 100px;
+            line-height: 35px;
+            text-align: center;
+            border-radius: 5px;
+            background-color: #00A6C7;
+            color: #fff;
+        }
+
+        .select-ship span:last-child {
+            margin-left: 20px;
+        }
+
+        .status-span span {
+            display: inline-block;
+            background-color: #00A6C7;
+            padding: 7px 20px;
+            color: #fff;
+            cursor: pointer
+        }
+
+        .status-span span:nth-child(1) {
+            margin-right: 10px;
+        }
+
+        .status-span span:nth-child(2) {
+            margin-left: 10px;
+        }
+        .select-ship {
+            text-align: center;
+        }
+
+        .select-ship span {
+            cursor: pointer;
+            display: inline-block;
+            width: 100px;
+            line-height: 35px;
+            text-align: center;
+            border-radius: 5px;
+            background-color: #00A6C7;
+            color: #fff;
+        }
+
+        .select-ship span:last-child {
+            margin-left: 20px;
+        }
+    </style>
+</head>
+<body>
+<div class="body-margin">
+    <h3><span class="left-span"></span>订单列表--商品资质</h3>
+    <div class="ship-shop">
+        <form id="shipForm" method="post">
+            <table class="table">
+                <tr>
+                    <th>供应商</th>
+                    <th>商品图片</th>
+                    <th>商品名称</th>
+                    <th>本次发货</th>
+                    <th>SN码</th>
+                    <th>资质文件</th>
+                    <th>操作</th>
+                </tr>
+                <c:forEach items="${logisticsRecords}" var="logistics" varStatus="index">
+                    <td>${logistics.shopName}</td>
+                    <td><img src="${logistics.image}" alt="" width="80px;height:auto;"></td>
+                    <td>${logistics.shopName}</td>
+                    <td>${logistics.num}</td>
+                    <td>${empty logistics.sn ? "无":logistics.sn}</td>
+                    <td>${logistics.isFile ? "已上传":"未上传"}</td>
+                    <td><a href="${ctx}/order/qualificationForm?recordId=${logistics.id}">上传资质</a></td>
+                </c:forEach>
+            </table><br><br><br><br>
+            <div class="select-ship">
+                <input class="btn btn-primary" type="button" value="确认" onclick="window.location.href='${ctx}/order/logisticsDetails?orderID=${orderId}'" style="margin-left: 15px"/>
+            </div>
+        </form>
+    </div>
+</div>
+</body>
+</html>

+ 395 - 0
src/main/webapp/WEB-INF/views/modules/order/qualificationForm.jsp

@@ -0,0 +1,395 @@
+<%@ taglib prefix="from" uri="/struts-tags" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>订单列表</title>
+    <meta name="decorator" content="default"/>
+    <%--<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>--%>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            $("#inputForm").validate({
+                submitHandler: function (form) {
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function (error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox") || element.is(":radio") || element.parent().is(".input-append")) {
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+        });
+    </script>
+    <style type="text/css">
+        * {
+            margin: 0;
+            padding: 0
+        }
+
+        a {
+            list-style: none;
+            text-decoration: none
+        }
+
+        i {
+            font-style: normal
+        }
+
+        body {
+            background-color: rgb(228, 228, 228);
+        }
+
+        h3 {
+            line-height: 20px;
+            padding: 20px 0 20px 15px;
+            border-bottom: 1px solid #CCCCCC;
+            font-weight: normal
+        }
+
+        .body-margin {
+            margin: 0 26px;
+        }
+
+        .left-span {
+            width: 3px;
+            height: 20px;
+            margin-right: 10px;
+            background-color: #00A6C7;
+            display: inline-block;
+            vertical-align: bottom
+        }
+
+        .list-div label {
+            display: inline-block;
+            width: 70px;
+        }
+
+        .ship-shop {
+            background-color: #fff;
+            margin-top: 20px;
+            min-height: 500px;
+        }
+
+        .table th {
+            color: #000;
+            font-weight: normal
+        }
+
+        .table th, .table td {
+            height: 35px;
+            border: 1px solid #CCCCCC;
+            text-align: center;
+            padding: 5px 0;
+        }
+
+        .select-all td {
+            border: 0
+        }
+
+        .select-all label {
+            display: inline-block;
+            padding-left: 5px;
+            vertical-align: 1px;
+        }
+
+        .select-ship span {
+            cursor: pointer;
+            display: inline-block;
+            width: 100px;
+            line-height: 35px;
+            text-align: center;
+            border-radius: 5px;
+            background-color: #00A6C7;
+            color: #fff;
+        }
+
+        .select-ship span:last-child {
+            margin-left: 20px;
+        }
+
+        .status-span span {
+            display: inline-block;
+            background-color: #00A6C7;
+            padding: 7px 20px;
+            color: #fff;
+            cursor: pointer
+        }
+
+        .status-span span:nth-child(1) {
+            margin-right: 10px;
+        }
+
+        .status-span span:nth-child(2) {
+            margin-left: 10px;
+        }
+
+        .select-ship span {
+            cursor: pointer;
+            display: inline-block;
+            width: 100px;
+            line-height: 35px;
+            text-align: center;
+            border-radius: 5px;
+            background-color: #00A6C7;
+            color: #fff;
+        }
+
+        .select-ship span:last-child {
+            margin-left: 20px;
+        }
+
+        .upload-content .conList ol li {
+            width: 114px;
+            min-height: 80px;
+            text-align: center;
+            background: #fff;
+            position: relative;
+            top: 120px;
+            margin-left: 2px;
+        }
+
+        .upload-content {
+            margin-top: -70px;
+            display: inline-block;
+        }
+        .upload-content .conList .btn:nth-of-type(1) {
+            width: 90px;
+            height: 100px;
+            border: 2px solid #eee;
+            background: #fff;
+            position: relative;
+        }
+        .upload-content .conList .btn:nth-of-type(1)>div {
+            position: absolute;
+            top: 50%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+            color: #666;
+        }
+        .upload-content .conList .btn:nth-of-type(1) span {
+            font-size: 35px;
+        }
+        .upload-content .conList .btn:nth-of-type(1) h5 {
+            color: #666;
+        }
+        .cancel-upload {
+            background: transparent;
+            border: none;
+            box-shadow: none;
+            position: relative;
+            top: -38px;
+            left: -25px;
+            cursor: pointer;
+            z-index: 100;
+        }
+        .hide-pic {
+            display: none !important;
+        }
+        .controls .conList{
+            display: inline-block;
+            margin-right: 15px;
+        }
+        .conList .btn:nth-of-type(1){
+            margin-left: 25px;
+        }
+    </style>
+</head>
+<body>
+<div class="body-margin">
+    <h3><span class="left-span"></span>订单列表--上传资质</h3>
+    <div class="ship-shop">
+        <br><br>
+        <form:form id="inputForm" modelAttribute="logisticsRecord" action="${ctx}/order/saveQualification" method="post" class="form-horizontal">
+            <sys:message content="${message}"/>
+            <form:hidden path="id"/>
+            <form:hidden path="logisticsBatchID"/>
+            <div class="control-group">
+                <label class="control-label">SN码:</label>
+                <div class="controls">
+                    <form:textarea path="sn" style="width: 350px;height: 90px;" placeholder="若有多个,可用逗号隔开" htmlEscape="false" maxlength="250" class="input-xlarge "/>
+                </div>
+            </div>
+            <div class="control-group">
+                <label class="control-label">资质文件:</label>
+                <div class="controls">
+                    <div id='file-list-display'>
+                        <c:if test="${not empty logisticsRecord.fileList}">
+                            <c:forEach items="${logisticsRecord.fileList}" var="file" varStatus="statusIndex">
+                                <p>
+                                        ${file.fileName}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" class="delBtn" data-id="${file.ossName}">删除</a>
+                                            <input type="hidden" name="files" value="${file.fileName}---${file.ossName}"/>
+                                </p>
+
+                            </c:forEach>
+                        </c:if>
+                    </div>
+                    <div class="upload" style="box-sizing: border-box;padding-left: 120px;" >
+                        <input type="file" id="controlsFiles" style="position: relative"/>
+                    </div>
+                </div>
+            </div>
+            <div class="control-group">
+                <label class="control-label">图片:</label><font color="#a9a9a9">(若不方便上传文件,可用图片代替)</font><br>
+                <div class="controls upload-content" id="secondHandImage">
+                    <div class="conList">
+                        <form:hidden value="${logisticsRecord.imageList.size()>0?logisticsRecord.imageList.get(0):''}" id="image1" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image1" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>1?logisticsRecord.imageList.get(1):''}" id="image2" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image2" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>2?logisticsRecord.imageList.get(2):''}" id="image3" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image3" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>3?logisticsRecord.imageList.get(3):''}" id="image4" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image4" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>4?logisticsRecord.imageList.get(4):''}" id="image5" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image5" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>5?logisticsRecord.imageList.get(5):''}" id="image6" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image6" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>6?logisticsRecord.imageList.get(6):''}" id="image7" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image7" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>7?logisticsRecord.imageList.get(7):''}" id="image8" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image8" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>8?logisticsRecord.imageList.get(8):''}" id="image9" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image9" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                    <div class="conList hide-pic">
+                        <form:hidden value="${logisticsRecord.imageList.size()>9?logisticsRecord.imageList.get(9):''}" id="image10" path="images" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+                        <sys:ckfinder input="image10" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100" maxHeight="100"/>
+                    </div>
+                </div>
+            </div>
+            <div class="form-actions">
+                <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
+                <input id="btnCancel" class="btn" type="button" value="取 消" onclick="history.go(-1)"/>
+            </div>
+        </form:form>
+    </div>
+</div>
+        <script>
+            //图片初始化
+            $(function () {
+                $('.upload-content .conList .btn:nth-of-type(1)').html('<div><span>+</span><h5>选择图片</h5></div>');
+                $('.upload-content .conList .btn:nth-of-type(2)').after('<img class="cancel-upload" src="/static/images/close-btn1.png">').remove();
+                $('.upload-content .conList').find('.cancel-upload').hide();
+                var observeEle = document.getElementsByClassName('upload-content')[0];
+                var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
+                var MutationObserverConfig={
+                    childList: true,
+                    subtree: true,
+                    characterData: true
+                };
+                var observer = new MutationObserver(function(mutations){
+                    $.each(mutations, function(index,item) {
+                        if (item.type === 'childList') {
+                            // 在创建新的 element 时调用
+                            var target = $(item.target),
+                                thisWrapper = target.closest('.conList'),
+                                nextEle = thisWrapper.next();
+                            thisWrapper.find('li').css('z-index',99);
+                            thisWrapper.find('.cancel-upload').show();
+                            if(nextEle.hasClass('hide-pic')) {
+                                nextEle.removeClass('hide-pic');
+                            }
+                        }
+                    })
+                });
+                observer.observe(observeEle,MutationObserverConfig);
+
+                $('body').on('click','.upload-content li',function() {
+                    var index = $(this).closest('.conList').index() + 1,
+                        str = 'image'+index+'FinderOpen';
+                    eval(str+'()');
+                });
+                $('body').on('click', '.cancel-upload',function() {
+                    var wrapper = $(this).closest('.conList');
+                    wrapper.find('li').css('z-index','-1');
+                    wrapper.find('input').val('');
+                    $(this).hide();
+                    if ($('.cancel-upload:visible').length < 9) {
+                        wrapper.addClass("hide-pic");
+                    }else{
+                        wrapper.removeClass("hide-pic");
+                    }
+                    wrapper.parent().append(wrapper.clone());
+                    wrapper.remove();
+                    $(".conList").each(function(i,ele){
+                        if($(ele).find("input.input-xlarge").val()){
+                            $(ele).next().removeClass("hide-pic")
+                        }
+                    })
+                });
+                $(window).on("load", function(){
+                    setTimeout(function(){
+                        $("#secondHandImage").find("input.input-xlarge").each(function(i,ele){
+                            if($(ele).val()){
+                                $(ele).next().find("li").css("z-index","99");
+                                $(ele).parents(".conList").find(".cancel-upload").show();
+                                $(ele).parents(".conList").next().removeClass("hide-pic")
+                            }
+                        })
+                    },500);
+                });
+
+                var controlsFiles = document.getElementById("controlsFiles");
+                controlsFiles.addEventListener("change", function () {
+                    $('#uploadFileName').val(name.substring(0, name.indexOf('.')));
+                    var files = $('#controlsFiles').prop('files');
+                    var data = new FormData();
+                    var url = "${ctx}/oss/cmOssArchive/fileUpload";
+                    data.append('file', files[0]);
+                    $.ajax({
+                        url: url,
+                        data: data,
+                        type: "POST",
+                        processData: false,
+                        contentType: false,
+                        dataType: "json",
+                        success: function (res) {
+                            var html="<p>"+res.fileName+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a class='delBtn' href='javascript:void(0);' data-id='"+res.ossName+"'>删除</a>" +
+                                "<input type='hidden' name='files' value='"+res.fileName+"---"+res.ossName+"'/></p>";
+                            $("#file-list-display").append(html);
+                            $("#controlsFiles").val("");
+                        },
+                        error: function (error) {
+                            alertx(error);
+                        }
+                    });
+                });
+
+                //删除文件
+                $("body").on("click", ".delBtn", function(){
+                    var ossName = $(this).attr("data-id");
+                    console.log(ossName);
+                    $(this).parent().remove();
+                    $.ajax({
+                        url: "${ctx}/oss/cmOssArchive/deleteOssFile",
+                        data: {"ossName": ossName},
+                        async: false,
+                        type: "POST"
+                    });
+
+                })
+            });
+        </script>
+</body>
+</html>

+ 70 - 0
src/main/webapp/WEB-INF/views/modules/order/qualificationInfo.jsp

@@ -0,0 +1,70 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<html>
+<head>
+    <title>商品资质管理</title>
+    <meta name="decorator" content="default"/>
+    <style>
+        .form-horizontal .controls {
+            margin-left: 0;
+        }
+        .form-horizontal .control-label {
+            float: left;
+            width: 181px;
+            padding-top: 5px;
+            text-align: right;
+        }
+
+        .dateInput input {
+            width: 150px;
+        }
+
+        .clause span {
+            margin-left: 30px;
+        }
+
+        #productTable th {
+            text-align: center;
+            white-space: nowrap;
+        }
+
+        #productTable td {
+            text-align: center;
+            white-space: nowrap;
+        }
+    </style>
+</head>
+<body>
+<ul class="nav nav-tabs">
+    <li><a href="${ctx}/order/logisticsDetails?orderID=">发货记录</a></li>
+    <li class="active"><a href="${ctx}/order/qualificationInfo?logisticsBatchId=${logisticsBatchId}">商品资质</a></li>
+</ul><br/>
+<div style="margin-left: 75px">
+    <font style="font-size: 20px;font-weight: bold">${shopName}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${uploadTime}</font>
+    <br><br>
+    <c:forEach items="${recordList}" var="record" varStatus="status">
+        <label><font style="font-weight: bold">商品${status.index+1}:</font>${record.productName}</label><br><br>
+        <label><font style="font-weight: bold">SN码:</font>${record.sn}</label><br><br>
+        <label>
+            <font style="font-weight: bold">资质文件:</font>
+        <c:forEach items="${record.fileList}" var="file">
+            <p style="margin-left: 55px">${file.fileName}&nbsp;&nbsp;&nbsp;&nbsp;<a href="${ctx}/oss/cmOssArchive/fileDownload?ossName=${file.ossName}&fileName=${file.fileName}">下载</a></p>
+        </c:forEach>
+        </label><br><br>
+        <label><font style="font-weight: bold">图片:</font>
+        <c:forEach items="${record.imageList}" var="image">
+                <img src="${image}" width="100" height="100">&nbsp;&nbsp;
+        </c:forEach>
+        </label><br>
+       <hr style="border:1px dashed #000">
+    </c:forEach>
+    <br><br>
+    <div class="select-ship">
+        <input class="btn btn-primary" type="button" value="编辑" onclick="window.location.href='${ctx}/order/qualificationList?logisticsBatchId=${logisticsBatchId}'"/>
+    </div>
+</div>
+</body>
+</html>
+

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/order/shipLogistic.jsp

@@ -218,7 +218,7 @@
                     type : 'post',
                     success : function(data){
                         if (data.success) {
-                            window.location.href = "${ctx}/order/logisticsDetails?orderID=${orderID}";
+                            window.location.href = "${ctx}/order/qualificationList?logisticsBatchId="+data.logisticsBatchId;
                         } else {
                             alert(data.msg);
                         }