浏览代码

发布二手商品修改

plf 4 年之前
父节点
当前提交
d440c4fa51

+ 40 - 0
src/main/java/com/caimei/modules/oss/service/CmOssArchiveService.java

@@ -223,4 +223,44 @@ public class CmOssArchiveService extends CrudService<CmOssArchiveDao, CmOssArchi
             }
         }
     }
+
+    public Map<String, Object> fileUpload(MultipartFile multipartFile) {
+        Map<String, Object> map = new HashMap<>();
+        String fileAllName = multipartFile.getOriginalFilename();
+        String fileType = fileAllName.substring(fileAllName.lastIndexOf(".") + 1);
+        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);
+            logger.info("默认路径>>>" + file.getAbsolutePath());
+            //上传oss
+            String url = OSSUtils.ossUpload(filePath, file, contentType);
+            //删除本地文件
+            OSSUtils.deleteFile(file);
+            map.put("success", true);
+            map.put("msg", "操作成功");
+            map.put("url", url);
+            map.put("fileName", fileAllName);
+            map.put("ossName", filePath);
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("success", false);
+            map.put("msg", "操作失败");
+            logger.info("上传异常!!!");
+        }
+        return map;
+    }
+
+    public void fileDownload(String ossName, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        OSSUtils.downFile(ossName, fileName);
+        download(request, response, fileName);
+    }
 }

+ 22 - 0
src/main/java/com/caimei/modules/oss/web/CmOssArchiveController.java

@@ -145,4 +145,26 @@ public class CmOssArchiveController extends BaseController {
             e.printStackTrace();
         }
     }
+
+    /**
+     * 文件上传
+     */
+    @ResponseBody
+    @RequestMapping(value = "fileUpload")
+    public Map<String, Object> fileUpload(@RequestParam("file") MultipartFile file) {
+        return cmOssArchiveService.fileUpload(file);
+    }
+
+
+    /**
+     * 下载pdf文件
+     */
+    @RequestMapping("/fileDownload")
+    public void fileDownload(String ossName, String fileName, HttpServletRequest request, HttpServletResponse response) {
+        try {
+            cmOssArchiveService.fileDownload(ossName, fileName, request, response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
 }

+ 52 - 7
src/main/java/com/caimei/modules/product/entity/CmSecondHandDetail.java

@@ -44,6 +44,11 @@ public class CmSecondHandDetail extends DataEntity<CmSecondHandDetail> {
     private Integer viewingNum;// 商品浏览量
     private String productDetails;//商品详情
     private String publisher;//后台二手商品发布人员名称
+    private String authenticationImage;//身份验证照片
+    private String fileName;//出让承诺函文件名称
+    private String ossName;//对应oss存储名
+    private String commitmentImage;//出让承诺函图片
+    private String url; //文件预览url
 
     private String validFlag;//商品状态,见表c_productstatus或枚举ProductStatus,0逻辑删除 1待审核 2已上架 3已下架 8审核未通过 9已冻结
     private String productCategory;// 商品的类别:1正常商品(默认),2二手商品
@@ -418,15 +423,15 @@ public class CmSecondHandDetail extends DataEntity<CmSecondHandDetail> {
         this.bigTypeList = bigTypeList;
     }
 
-	public String getCostCheckFlag() {
-		return costCheckFlag;
-	}
+    public String getCostCheckFlag() {
+        return costCheckFlag;
+    }
 
-	public void setCostCheckFlag(String costCheckFlag) {
-		this.costCheckFlag = costCheckFlag;
-	}
+    public void setCostCheckFlag(String costCheckFlag) {
+        this.costCheckFlag = costCheckFlag;
+    }
 
-	public Double getCostPrice() {
+    public Double getCostPrice() {
         return costPrice;
     }
 
@@ -617,4 +622,44 @@ public class CmSecondHandDetail extends DataEntity<CmSecondHandDetail> {
     public void setPublisher(String publisher) {
         this.publisher = publisher;
     }
+
+    public String getAuthenticationImage() {
+        return authenticationImage;
+    }
+
+    public void setAuthenticationImage(String authenticationImage) {
+        this.authenticationImage = authenticationImage;
+    }
+
+    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;
+    }
+
+    public String getCommitmentImage() {
+        return commitmentImage;
+    }
+
+    public void setCommitmentImage(String commitmentImage) {
+        this.commitmentImage = commitmentImage;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }

+ 17 - 2
src/main/java/com/caimei/modules/product/web/CmSecondHandDetailController.java

@@ -6,6 +6,7 @@ import com.caimei.modules.brand.entity.CmBrand;
 import com.caimei.modules.brand.service.CmBrandService;
 import com.caimei.modules.common.utils.UploadUtils;
 import com.caimei.modules.opensearch.GenerateUtils;
+import com.caimei.modules.oss.utils.OSSUtils;
 import com.caimei.modules.product.dao.ProductNewDao;
 import com.caimei.modules.product.entity.BigType;
 import com.caimei.modules.product.entity.CmSecondHandDetail;
@@ -21,8 +22,6 @@ import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.utils.Encodes;
 import com.thinkgem.jeesite.common.utils.StringUtils;
 import com.thinkgem.jeesite.common.web.BaseController;
-import com.thinkgem.jeesite.modules.sys.entity.User;
-import com.thinkgem.jeesite.modules.sys.utils.UserUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -67,6 +66,7 @@ public class CmSecondHandDetailController extends BaseController {
     private RedisService redisService;
     @Resource
     private GenerateUtils generateUtils;
+
     @ModelAttribute
     public CmSecondHandDetail get(@RequestParam(required = false) String id) {
         CmSecondHandDetail entity = null;
@@ -183,6 +183,11 @@ public class CmSecondHandDetailController extends BaseController {
         }
         cmSecondHandDetail.setImageList(imaglist);
 
+        if (StringUtils.isNotBlank(cmSecondHandDetail.getOssName()) && StringUtils.isNotBlank(cmSecondHandDetail.getFileName())) {
+            String ossUrl = OSSUtils.getOssUrl(cmSecondHandDetail.getOssName());
+            cmSecondHandDetail.setUrl(ossUrl);
+        }
+
 
         model.addAttribute("cmSecondHandDetail", cmSecondHandDetail);
         return "modules/product/cmSecondHandDetailForm";
@@ -313,6 +318,16 @@ public class CmSecondHandDetailController extends BaseController {
         //发布人员名称
         /*User user = UserUtils.getUser();
         cmSecondHandDetail.setPublisher(user.getName());*/
+        String authenticationImage = cmSecondHandDetail.getAuthenticationImage();
+        if (StringUtils.isNotEmpty(authenticationImage)) {
+            String imageUrl = getImageUrl(authenticationImage);
+            cmSecondHandDetail.setAuthenticationImage(imageUrl);
+        }
+        String commitmentImage = cmSecondHandDetail.getCommitmentImage();
+        if (StringUtils.isNotEmpty(commitmentImage)) {
+            String imageUrl = getImageUrl(commitmentImage);
+            cmSecondHandDetail.setCommitmentImage(imageUrl);
+        }
 
         // 保存二手详细信息
         cmSecondHandDetailService.save(cmSecondHandDetail);

+ 19 - 3
src/main/resources/mappings/modules/product/CmSecondHandDetailMapper.xml

@@ -36,6 +36,10 @@
 		a.source AS "source",
 		a.showContactFlag AS "showContactFlag",
 		a.publisher AS "publisher",
+		a.authenticationImage AS "authenticationImage",
+		a.fileName AS "fileName",
+		a.ossName AS "ossName",
+		a.commitmentImage AS "commitmentImage",
 		p.validFlag AS "validFlag",
 		p.productCategory AS "productCategory",
 		p.name AS "name",
@@ -130,7 +134,11 @@
 			onLineDate,
 			source,
 			showContactFlag,
-			publisher
+			publisher,
+			authenticationImage,
+			fileName,
+			ossName,
+			commitmentImage
 		) VALUES (
 			#{productID},
 			#{sold},
@@ -163,7 +171,11 @@
 			#{onLineDate},
 			#{source},
 			#{showContactFlag},
-			#{publisher}
+			#{publisher},
+			#{authenticationImage},
+			#{fileName},
+			#{ossName},
+			#{commitmentImage}
 		)
 	</insert>
 
@@ -200,7 +212,11 @@
 			onLineDate = #{onLineDate},
 			source = #{source},
 			showContactFlag = #{showContactFlag},
-			publisher = #{publisher}
+			publisher = #{publisher},
+			authenticationImage = #{authenticationImage},
+			fileName = #{fileName},
+			ossName = #{ossName},
+			commitmentImage = #{commitmentImage}
 		WHERE productID = #{productID}
 	</update>
 

+ 184 - 26
src/main/webapp/WEB-INF/views/modules/product/cmSecondHandDetailForm.jsp

@@ -149,9 +149,9 @@
             text-align: center;
             white-space: nowrap;
         }
-        /*.controls{*/
-        /*    font-size: 0;*/
-        /*}*/
+		.iconBox {
+			font-size: 0;
+		}
         .controls .conList{
             display: inline-block;
             margin-right: 15px;
@@ -205,9 +205,58 @@
             top: 120px;
             margin-left: 2px;
         }
+		.upload-content-image {
+			margin-top: -70px;
+		}
+
+		.upload-content-image .conList .btn:nth-of-type(1) {
+			width: 90px;
+			height: 100px;
+			border: 2px solid #eee;
+			background: #fff;
+			position: relative;
+		}
+
+		.upload-content-image .conList .btn:nth-of-type(1) > div {
+			position: absolute;
+			top: 50%;
+			left: 50%;
+			transform: translate(-50%, -50%);
+			color: #666;
+		}
+
+		.upload-content-image .conList .btn:nth-of-type(1) span {
+			font-size: 35px;
+		}
+
+		.upload-content-image .conList .btn:nth-of-type(1) h5 {
+			color: #666;
+		}
+		.upload-content-image .conList ol li {
+			width: 114px;
+			min-height: 80px;
+			text-align: center;
+			background: #fff;
+			position: relative;
+			top: 120px;
+			margin-left: 2px;
+		}
+		.cancel-upload-image {
+			background: transparent;
+			border: none;
+			box-shadow: none;
+			position: relative;
+			top: -38px;
+			left: -25px;
+			cursor: pointer;
+			z-index: 100;
+		}
         .hide-pic {
             display: none !important;
         }
+		.hide-pic-image {
+			display: none !important;
+		}
         .upload-tips {
             margin: 10px 0;
         }
@@ -403,8 +452,19 @@
 	<div class="control-group">
 		<label class="control-label"><font color="red">*</font>是否显示联系人和联系方式:</label>
 		<div class="controls" style="margin-top: 5px">
-			<form:radiobutton path="showContactFlag" value="1" checked="true"  label="不显示"/>
-			<form:radiobutton path="showContactFlag" value="2" label="显示"/>
+			<form:radiobutton  cssStyle="position: relative" path="showContactFlag" value="1" checked="true"  label="不显示"/>
+			<form:radiobutton  cssStyle="position: relative" path="showContactFlag" value="2" label="显示"/>
+		</div>
+	</div>
+	<div class="control-group">
+		<label class="control-label">身份验证照片:</label>
+		<div class="controls upload-content-image iconBox">
+			<div class="conList">
+				<form:hidden id="authenticationImage" path="authenticationImage" value="${cmSecondHandDetail.authenticationImage}" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+				<sys:ckfinder input="authenticationImage" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100"
+							  maxHeight="100"/>
+				<br>
+			</div>
 		</div>
 	</div>
 	<div class="control-group">
@@ -447,8 +507,6 @@
 			<form:input path="address" htmlEscape="false" maxlength="100" class="input-xlarge required"/>
 		</div>
 	</div>
-
-	<%--<c:if test="${empty cmSecondHandDetail.id}">--%>
 	<div class="control-group">
 			<label class="control-label" style="margin-top: 17px">图片:</label>
 			<div class="controls upload-content" id="secondHandImage">
@@ -477,31 +535,38 @@
                     <font color="red">最多上传5张二手商品图片,请尽量全部上传,单张图片不能超过5M</font>
                 </div>
 		</div>
-<%--		</c:if>
-
-		<c:if test="${not empty cmSecondHandDetail.id}">
-			<div class="control-group">
-				<label class="control-label" style="margin-top: 17px">图片:</label>
-				<div class="controls upload-content">
-					<img src="${cmSecondHandDetail.image1}" width="150" height="150" style="margin-left: 20px;margin-top: 100px">
-					<img src="${cmSecondHandDetail.image2}" width="150" height="150" style="margin-left: 20px;margin-top: 100px">
-					<img src="${cmSecondHandDetail.image3}" width="150" height="150" style="margin-left: 20px;margin-top: 100px">
-					<img src="${cmSecondHandDetail.image4}" width="150" height="150" style="margin-left: 20px;margin-top: 100px">
-					<img src="${cmSecondHandDetail.image5}" width="150" height="150" style="margin-left: 20px;margin-top: 100px">
-				</div>
-
-                <div class="conList upload-tips" style="margin-left: 205px">
-                    <font color="red">最多上传5张二手商品图片,请尽量全部上传,单张图片不能超过5M</font>
-                </div>
-			</div>
-		</c:if>--%>
-
 	<div class="control-group">
 		<label class="control-label">商品详细信息:</label>
 		<div class="controls">
 			<form:textarea path="productDetails" style="width: 500px;height: 180px;" placeholder="请填写商品详细信息,对商品进行更详细的描述,不超过200字" htmlEscape="false" maxlength="250" class="input-xlarge "/>
 		</div>
 	</div>
+	<div class="control-group">
+		<label class="control-label">二手出让承诺函文件:</label>
+		<form:hidden path="ossName" id="ossName"/>
+		<form:hidden path="fileName" id="fileName"/>
+		<div id='file-list-display' style="box-sizing: border-box;padding-left: 140px;">
+			<c:if test="${not empty cmSecondHandDetail.fileName}">
+				<span>${cmSecondHandDetail.fileName}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+				<a href="${cmSecondHandDetail.url}" target="_blank" style="position: relative">预览</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+				<a href="${ctx}/oss/cmOssArchive/fileDownload?ossName=${cmSecondHandDetail.ossName}&fileName=${cmSecondHandDetail.fileName}" style="position: relative">下载</a></span>
+			</c:if>
+		</div>
+		<div class="upload" style="box-sizing: border-box;padding-left: 120px;" >
+			<input type="file" name="file" id="controlsFiles" style="position: relative" accept=".pdf">
+		</div>
+	</div>
+	<div class="control-group">
+		<label class="control-label">二手出让承诺函图片:</label>
+		<div class="controls upload-content-image iconBox">
+			<div class="conList">
+				<form:hidden id="commitmentImage" path="commitmentImage" htmlEscape="false" maxlength="255" class="input-xlarge"/>
+				<sys:ckfinder input="commitmentImage" type="images" uploadPath="/photo" selectMultiple="false" maxWidth="100"
+							  maxHeight="100"/>
+				<br>
+			</div>
+		</div>
+	</div>
 
 	<c:if test="${not empty cmSecondHandDetail.productID}">
 		<div class="control-group">
@@ -600,6 +665,99 @@
 				})
 			},500);
 		});
+
+
+	  $('.upload-content-image .conList .btn:nth-of-type(1)').html('<div><span>+</span><h5>选择图片</h5></div>');
+	  $('.upload-content-image .conList .btn:nth-of-type(2)').after('<img class="cancel-upload-image" src="/static/images/close-btn1.png">').remove();
+	  $('.upload-content-image .conList').find('.cancel-upload-image').hide();
+	  var observeEleImage = document.getElementsByClassName('upload-content-image')[0];
+	  var observeEleImage1 = document.getElementsByClassName('upload-content-image')[1];
+	  var MutationObserverImage = window.MutationObserver || window.WebKitMutationObserver;
+	  var MutationObserverConfigImage = {
+		  childList: true,
+		  subtree: true,
+		  characterData: true
+	  };
+	  var observerImage = new MutationObserverImage(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-image').show();
+				  if (nextEle.hasClass('hide-pic-image')) {
+					  nextEle.removeClass('hide-pic-image');
+				  }
+			  }
+		  })
+	  });
+	  observerImage.observe(observeEleImage, MutationObserverConfigImage);
+	  observerImage.observe(observeEleImage1, MutationObserverConfigImage);
+
+	  $('body').on('click', '.upload-content-image li', function () {
+		  var index = $(this).closest('.conList').index() + 1,
+				  str = 'remarkImage' + index + 'FinderOpen';
+		  eval(str + '()');
+	  });
+	  $('body').on('click', '.cancel-upload-image', function () {
+		  var wrapper = $(this).closest('.conList');
+		  wrapper.find('li').css('z-index', '-1');
+		  wrapper.find('input').val('');
+		  $(this).hide();
+		  wrapper.removeClass("hide-pic-image");
+		  wrapper.parent().append(wrapper.clone());
+		  wrapper.remove();
+		  $(".conList").each(function (i, ele) {
+			  if ($(ele).find("input.input-xlarge").val()) {
+				  $(ele).next().removeClass("hide-pic-image")
+			  }
+		  })
+	  });
+	  $(window).on("load", function () {
+		  setTimeout(function () {
+			  var input = $("#authenticationImage");
+			  if (input.val()) {
+				  input.next().find("li").css("z-index", "99");
+				  input.parents(".conList").find(".cancel-upload-image").show();
+				  input.parents(".conList").next().removeClass("hide-pic-image")
+			  }
+			  input = $("#commitmentImage");
+			  if (input.val()) {
+				  input.next().find("li").css("z-index", "99");
+				  input.parents(".conList").find(".cancel-upload-image").show();
+				  input.parents(".conList").next().removeClass("hide-pic-image")
+			  }
+		  }, 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="<span>"+res.fileName+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="+res.url+" style='position: relative' target='_blank'>预览</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='${ctx}/oss/cmOssArchive/fileDownload?ossName="+res.ossName+"&fileName="+res.fileName+"' style='position: relative'>下载</a></span>";
+				  $("#file-list-display").html(html);
+				  $("#controlsFiles").val("");
+				  $("#ossName").val(res.ossName);
+				  $("#fileName").val(res.fileName);
+			  },
+			  error: function (error) {
+				  alertx(error);
+			  }
+		  });
+	  })
     });