浏览代码

商家+用户

licailing 5 年之前
父节点
当前提交
f353dbdfae
共有 30 个文件被更改,包括 850 次插入63 次删除
  1. 45 0
      src/main/java/com/izouma/dingdong/domain/Verified.java
  2. 4 2
      src/main/java/com/izouma/dingdong/domain/backstage/Category.java
  3. 69 0
      src/main/java/com/izouma/dingdong/domain/backstage/CooperateApply.java
  4. 0 29
      src/main/java/com/izouma/dingdong/domain/backstage/RiderApply.java
  5. 8 0
      src/main/java/com/izouma/dingdong/domain/merchant/Merchant.java
  6. 8 3
      src/main/java/com/izouma/dingdong/domain/merchant/MerchantSettings.java
  7. 4 0
      src/main/java/com/izouma/dingdong/dto/MerchantDTO.java
  8. 16 0
      src/main/java/com/izouma/dingdong/enums/CooperateType.java
  9. 18 0
      src/main/java/com/izouma/dingdong/repo/VerifiedRepo.java
  10. 16 0
      src/main/java/com/izouma/dingdong/repo/backstage/CooperateApplyRepo.java
  11. 7 5
      src/main/java/com/izouma/dingdong/service/UserService.java
  12. 14 0
      src/main/java/com/izouma/dingdong/service/VerifiedService.java
  13. 14 0
      src/main/java/com/izouma/dingdong/service/backstage/CooperateApplyService.java
  14. 10 4
      src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java
  15. 2 2
      src/main/java/com/izouma/dingdong/web/BaseController.java
  16. 74 0
      src/main/java/com/izouma/dingdong/web/VerifiedController.java
  17. 63 0
      src/main/java/com/izouma/dingdong/web/backstage/CooperateApplyController.java
  18. 1 0
      src/main/resources/genjson/CooperateApply.json
  19. 1 0
      src/main/resources/genjson/Verified.json
  20. 2 2
      src/main/resources/templates/ListViewTemplate.ftl
  21. 16 0
      src/main/vue/src/router.js
  22. 2 0
      src/main/vue/src/views/VoiceEdit.vue
  23. 118 0
      src/main/vue/src/views/backstage/CooperateApplyEdit.vue
  24. 231 0
      src/main/vue/src/views/backstage/CooperateApplyList.vue
  25. 2 2
      src/main/vue/src/views/merchant/GoodsList.vue
  26. 38 8
      src/main/vue/src/views/merchant/MerchantList.vue
  27. 3 1
      src/test/java/com/izouma/dingdong/contorller/MoneyRecordTest.java
  28. 18 5
      src/test/java/com/izouma/dingdong/contorller/OrderInfoControllerTest.java
  29. 31 0
      src/test/java/com/izouma/dingdong/contorller/VerifiedControllerTest.java
  30. 15 0
      src/test/java/com/izouma/dingdong/service/MerchantServiceTest.java

+ 45 - 0
src/main/java/com/izouma/dingdong/domain/Verified.java

@@ -0,0 +1,45 @@
+package com.izouma.dingdong.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@Builder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Where(clause = "enabled = 1")
+@ApiModel(value = "实名认证", description = "实名认证")
+public class Verified extends BaseEntity {
+
+    @ApiModelProperty(value = "用户ID", name = "userId")
+    private Long userId;
+
+    @ApiModelProperty(value = "真实姓名", name = "realName")
+    private String realName;
+
+    @ApiModelProperty(value = "身份证号", name = "idNo")
+    private String idNo;
+
+    @ApiModelProperty(value = "身份证照片", name = "idNoImg")
+    private String idNoImg;
+
+    @ApiModelProperty(value = "手持身份证照片", name = "handheldIdNo")
+    private String handheldIdNo;
+
+    @Column(nullable = false)
+    @ApiModelProperty(value = "可修改", name = "canEdit")
+    private Boolean canEdit = true;
+
+    @Builder.Default
+    @Column(nullable = false)
+    private Boolean enabled = true;
+}

+ 4 - 2
src/main/java/com/izouma/dingdong/domain/backstage/Category.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import org.hibernate.annotations.NotFound;
 import org.hibernate.annotations.NotFoundAction;
+import org.hibernate.annotations.Where;
 
 import javax.persistence.*;
 import javax.validation.constraints.Size;
@@ -18,6 +19,7 @@ import java.util.List;
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
+@Where(clause = "active = 1")
 @ApiModel(value = "商户类别", description = "商户类别")
 public class Category extends BaseEntity implements Serializable {
     @Size(max = 30)
@@ -27,11 +29,11 @@ public class Category extends BaseEntity implements Serializable {
 
     private Long parent;
 
-    private Boolean active;
+    private Boolean active = true;
 
     @OneToMany
     @JoinColumn(name = "parent", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
     @NotFound(action = NotFoundAction.IGNORE)
-    @ApiModelProperty(value = "子分类",name = "children")
+    @ApiModelProperty(value = "子分类", name = "children")
     private List<Category> children;
 }

+ 69 - 0
src/main/java/com/izouma/dingdong/domain/backstage/CooperateApply.java

@@ -0,0 +1,69 @@
+package com.izouma.dingdong.domain.backstage;
+
+import com.izouma.dingdong.domain.BaseEntity;
+import com.izouma.dingdong.enums.CooperateType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Where;
+
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "合作申请", description = "合作申请")
+@Where(clause = "enabled = 1")
+public class CooperateApply extends BaseEntity {
+    @ApiModelProperty(value = "用户ID", name = "userId")
+    private Long userId;
+
+    /**
+     * 商家/骑手/商务
+     */
+    @Enumerated(EnumType.STRING)
+    @ApiModelProperty(value = "类型", name = "type")
+    private CooperateType type;
+
+    @ApiModelProperty(value = "名称", name = "name")
+    private String name;
+
+    @ApiModelProperty(value = "联系电话", name = "phone")
+    private String phone;
+
+    /**
+     * 商家合作/骑手合作 填写的地址
+     */
+    @ApiModelProperty(value = "地址", name = "address")
+    private String address;
+
+    /**
+     * 商家合作时,填写商家名称
+     */
+    @ApiModelProperty(value = "商家名称", name = "merName")
+    private String merName;
+
+    /**
+     * 商家合作时,填写商家经营类型
+     */
+    @ApiModelProperty(value = "商家类型", name = "category")
+    private String category;
+
+    /**
+     * 商务合作时,填写期望合作内容
+     */
+    @ApiModelProperty(value = "合作内容",name = "remark")
+    private String remark;
+
+    @ApiModelProperty(value = "是否联系", name = "isPass")
+    private Boolean isPass;
+
+    private Boolean enabled = true;
+}

+ 0 - 29
src/main/java/com/izouma/dingdong/domain/backstage/RiderApply.java

@@ -1,29 +0,0 @@
-package com.izouma.dingdong.domain.backstage;
-
-import com.izouma.dingdong.domain.BaseEntity;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-//@Entity
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@ApiModel(value = "骑手申请", description = "骑手申请")
-public class RiderApply extends BaseEntity {
-    @ApiModelProperty(value = "用户ID", name = "userId")
-    private Long userId;
-
-    @ApiModelProperty(value = "区域",name = "area")
-    private String area;
-
-/*    @ApiModelProperty(value = "性别")
-    private String sex;*/
-
-    @ApiModelProperty(value = "是否通过", name = "isPass")
-    private Boolean isPass;
-}

+ 8 - 0
src/main/java/com/izouma/dingdong/domain/merchant/Merchant.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.izouma.dingdong.annotations.Searchable;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.domain.User;
+import com.izouma.dingdong.domain.Verified;
 import com.izouma.dingdong.enums.ApplyStatus;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -93,4 +94,11 @@ public class Merchant extends BaseEntity implements Serializable {
     @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.DETACH)
     @JoinColumn(name = "userId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
     private User user;
+
+/*    @ApiModelProperty(value = "实名信息ID",name = "verifiedId")
+    private Long verifiedId;
+
+    @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.DETACH)
+    @JoinColumn(name = "verifiedId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+    private Verified verified;*/
 }

+ 8 - 3
src/main/java/com/izouma/dingdong/domain/merchant/MerchantSettings.java

@@ -87,7 +87,7 @@ public class MerchantSettings extends BaseEntity {
     @ApiModelProperty(value = "营业时间", name = "endTime")
     private LocalTime endTime;
 
-    @ApiModelProperty(value = "营业资质", name = "qualification")
+    @ApiModelProperty(value = "营业资质图片", name = "qualification")
     private String qualification;
 
     @ApiModelProperty(value = "商家性质", name = "merchantNatureId")
@@ -108,13 +108,18 @@ public class MerchantSettings extends BaseEntity {
     private MerchantNature merchantNature;
 
     @Column(precision = 10, scale = 2)
-    @ApiModelProperty(value = "起送金额")
+    @ApiModelProperty(value = "起送金额",name = "startingAmount")
     private BigDecimal startingAmount;
 
     /**
      * 每餐准备时间
      */
-    @ApiModelProperty(value = "每餐准备时间")
+    @ApiModelProperty(value = "每餐准备时间",name = "preparationTime")
     private Long preparationTime;
 
+    @ApiModelProperty(value = "门头图片",name = "doorHeadImg")
+    private String doorHeadImg;
+
+
+
 }

+ 4 - 0
src/main/java/com/izouma/dingdong/dto/MerchantDTO.java

@@ -1,6 +1,7 @@
 package com.izouma.dingdong.dto;
 
 import com.izouma.dingdong.annotations.Searchable;
+import com.izouma.dingdong.domain.Verified;
 import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.MerchantNature;
 import com.izouma.dingdong.domain.merchant.Merchant;
@@ -57,6 +58,7 @@ public class MerchantDTO {
         preparationTime = merchantSettings.getPreparationTime();
         isOpening = merchantSettings.getIsOpening();
         automaticOrder = merchantSettings.getAutomaticOrder();
+        doorHeadImg = merchantSettings.getDoorHeadImg();
     }
 
 
@@ -171,4 +173,6 @@ public class MerchantDTO {
     @ApiModelProperty(value = "自动接单")
     private Boolean automaticOrder;
 
+    @ApiModelProperty(value = "门头图片")
+    private String doorHeadImg;
 }

+ 16 - 0
src/main/java/com/izouma/dingdong/enums/CooperateType.java

@@ -0,0 +1,16 @@
+package com.izouma.dingdong.enums;
+
+public enum CooperateType {
+    /*
+    商务
+     */
+    BUSINESS,
+    /*
+    商户
+     */
+    MERCHANT,
+    /*
+    骑手
+     */
+    RIDER,
+}

+ 18 - 0
src/main/java/com/izouma/dingdong/repo/VerifiedRepo.java

@@ -0,0 +1,18 @@
+package com.izouma.dingdong.repo;
+
+import com.izouma.dingdong.domain.Verified;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import javax.transaction.Transactional;
+
+public interface VerifiedRepo extends JpaRepository<Verified, Long>, JpaSpecificationExecutor<Verified> {
+    @Query("update Verified t set t.enabled = false where t.id = ?1")
+    @Modifying
+    @Transactional
+    void deleteById(Long id);
+
+    Verified findByUserId(Long userId);
+}

+ 16 - 0
src/main/java/com/izouma/dingdong/repo/backstage/CooperateApplyRepo.java

@@ -0,0 +1,16 @@
+package com.izouma.dingdong.repo.backstage;
+
+import com.izouma.dingdong.domain.backstage.CooperateApply;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import javax.transaction.Transactional;
+
+public interface CooperateApplyRepo extends JpaRepository<CooperateApply, Long>, JpaSpecificationExecutor<CooperateApply> {
+    @Query("update CooperateApply t set t.enabled = false where t.id = ?1")
+    @Modifying
+    @Transactional
+    void deleteById(Long id);
+}

+ 7 - 5
src/main/java/com/izouma/dingdong/service/UserService.java

@@ -29,6 +29,8 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
+import static com.izouma.dingdong.enums.Identity.*;
+
 @Service
 @Slf4j
 @AllArgsConstructor
@@ -70,7 +72,7 @@ public class UserService {
             user = User.builder()
                     .avatar(merchantDTO.getLogo())
                     .username(merchantDTO.getPhone())
-                    .identity(Identity.MERCHANT)
+                    .identity(MERCHANT)
                     .phone(merchantDTO.getPhone())
                     .nickname(merchantDTO.getShowName())
                     .password(new BCryptPasswordEncoder().encode(merchantDTO.getPassword()))
@@ -90,19 +92,19 @@ public class UserService {
                     .username(UUID.randomUUID().toString())
                     .nickname(phone)
                     .phone(phone)
-                    .identity(Identity.USER)
+                    .identity(USER)
                     .enabled(true)
                     .avatar(Constants.DEFAULT_AVATAR)
                     .build();
 
         } else {
-            if (Identity.MERCHANT.equals(user.getIdentity())){
+            if (MERCHANT.equals(user.getIdentity())){
                 throw new BusinessException("请使用商户端登陆");
-            }else if (Identity.RIDER.equals(user.getIdentity())){
+            }else if (RIDER.equals(user.getIdentity())){
                 throw new BusinessException("请使用骑手端登陆");
             }
         }
-        
+
         return user;
     }
 

+ 14 - 0
src/main/java/com/izouma/dingdong/service/VerifiedService.java

@@ -0,0 +1,14 @@
+package com.izouma.dingdong.service;
+
+import com.izouma.dingdong.domain.Verified;
+import com.izouma.dingdong.repo.VerifiedRepo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class VerifiedService {
+
+    private VerifiedRepo verifiedRepo;
+
+}

+ 14 - 0
src/main/java/com/izouma/dingdong/service/backstage/CooperateApplyService.java

@@ -0,0 +1,14 @@
+package com.izouma.dingdong.service.backstage;
+
+import com.izouma.dingdong.domain.backstage.CooperateApply;
+import com.izouma.dingdong.repo.backstage.CooperateApplyRepo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class CooperateApplyService {
+
+    private CooperateApplyRepo cooperateApplyRepo;
+
+}

+ 10 - 4
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.config.Constants;
 import com.izouma.dingdong.domain.User;
+import com.izouma.dingdong.domain.Verified;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
@@ -12,6 +13,7 @@ import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.UserRepo;
+import com.izouma.dingdong.repo.VerifiedRepo;
 import com.izouma.dingdong.repo.merchant.MerchantClassificationRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
@@ -31,12 +33,10 @@ import java.util.List;
 public class MerchantService {
 
     private MerchantRepo merchantRepo;
-
     private MerchantSettingsRepo merchantSettingsRepo;
-
     private UserRepo userRepo;
-
     private MerchantClassificationRepo merchantClassificationRepo;
+    private VerifiedRepo verifiedRepo;
 
     /*
     商户注册申请
@@ -103,7 +103,6 @@ public class MerchantService {
 
         merchantSettingsRepo.save(merchantSettings);
 
-
         //新建 系统预制分类:好评热销/折扣/点单必读
         merchantClassificationRepo.save(MerchantClassification.builder()
                 .merchantId(merchant.getId())
@@ -178,6 +177,13 @@ public class MerchantService {
             merchant.setIsPass(true);
             merchant.setEstablishTime(LocalDateTime.now());
 
+            //审核通过后无法修改实名信息
+            Verified verified = verifiedRepo.findByUserId(merchant.getUserId());
+            if (verified == null) {
+                throw new BusinessException("无法人信息");
+            }
+            verified.setCanEdit(false);
+            verifiedRepo.save(verified);
 
         } else {
             merchant.setStatus(ApplyStatus.DENY);

+ 2 - 2
src/main/java/com/izouma/dingdong/web/BaseController.java

@@ -19,7 +19,7 @@ import java.util.List;
 import java.util.regex.Pattern;
 
 public class BaseController {
-    public PageRequest toPageRequest(PageQuery pageQuery) {
+    public static PageRequest toPageRequest(PageQuery pageQuery) {
         PageRequest pageRequest;
         if (StringUtils.isNotEmpty(pageQuery.getSort())) {
             List<Sort.Order> orders = new ArrayList<>();
@@ -39,7 +39,7 @@ public class BaseController {
         return pageRequest;
     }
 
-    public <T> Specification<T> toSpecification(PageQuery pageQuery, Class queryClass) {
+    public static <T> Specification<T> toSpecification(PageQuery pageQuery, Class queryClass) {
         return (Specification<T>) (root, criteriaQuery, criteriaBuilder) -> {
             List<Predicate> and = new ArrayList<>();
             pageQuery.getQuery().forEach((property, value) -> {

+ 74 - 0
src/main/java/com/izouma/dingdong/web/VerifiedController.java

@@ -0,0 +1,74 @@
+package com.izouma.dingdong.web;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.izouma.dingdong.domain.Verified;
+import com.izouma.dingdong.service.VerifiedService;
+import com.izouma.dingdong.dto.PageQuery;
+import com.izouma.dingdong.exception.BusinessException;
+import com.izouma.dingdong.repo.VerifiedRepo;
+import com.izouma.dingdong.utils.ObjUtils;
+import com.izouma.dingdong.utils.excel.ExcelUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/verified")
+@AllArgsConstructor
+public class VerifiedController extends BaseController {
+    private VerifiedService verifiedService;
+    private VerifiedRepo verifiedRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public Verified save(@RequestBody Verified record) {
+        if (record.getId() != null) {
+            Verified orig = verifiedRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            if (!orig.getCanEdit()) {
+                throw new BusinessException("无法修改");
+            }
+            ObjUtils.merge(orig, record);
+            return verifiedRepo.save(orig);
+        }
+        Verified verified = verifiedRepo.findByUserId(record.getUserId());
+        if (ObjectUtil.isNotNull(verified)) {
+            throw new BusinessException("此用户实名信息已存在");
+        }
+
+        return verifiedRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @GetMapping("/all")
+    public Page<Verified> all(PageQuery pageQuery) {
+        return verifiedRepo.findAll(toSpecification(pageQuery, Verified.class), toPageRequest(pageQuery));
+    }
+
+    @GetMapping("/get/{id}")
+    public Verified get(@PathVariable Long id) {
+        return verifiedRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        verifiedRepo.deleteById(id);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<Verified> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+
+    @GetMapping("/my")
+    public Verified my(Long userId) {
+        return verifiedRepo.findByUserId(userId);
+    }
+}
+

+ 63 - 0
src/main/java/com/izouma/dingdong/web/backstage/CooperateApplyController.java

@@ -0,0 +1,63 @@
+package com.izouma.dingdong.web.backstage;
+
+import com.izouma.dingdong.web.BaseController;
+import com.izouma.dingdong.domain.backstage.CooperateApply;
+import com.izouma.dingdong.service.backstage.CooperateApplyService;
+import com.izouma.dingdong.dto.PageQuery;
+import com.izouma.dingdong.exception.BusinessException;
+import com.izouma.dingdong.repo.backstage.CooperateApplyRepo;
+import com.izouma.dingdong.utils.ObjUtils;
+import com.izouma.dingdong.utils.excel.ExcelUtils;
+
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/cooperateApply")
+@AllArgsConstructor
+public class CooperateApplyController extends BaseController {
+    private CooperateApplyService cooperateApplyService;
+    private CooperateApplyRepo cooperateApplyRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public CooperateApply save(@RequestBody CooperateApply record) {
+        if (record.getId() != null) {
+            CooperateApply orig = cooperateApplyRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return cooperateApplyRepo.save(orig);
+        }
+        return cooperateApplyRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @GetMapping("/all")
+    public Page<CooperateApply> all(PageQuery pageQuery) {
+        return cooperateApplyRepo.findAll(toSpecification(pageQuery,CooperateApply.class), toPageRequest(pageQuery));
+    }
+
+    @GetMapping("/get/{id}")
+    public CooperateApply get(@PathVariable Long id) {
+        return cooperateApplyRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        cooperateApplyRepo.deleteById(id);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<CooperateApply> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+}
+

+ 1 - 0
src/main/resources/genjson/CooperateApply.json

@@ -0,0 +1 @@
+{"tableName":"CooperateApply","className":"CooperateApply","remark":"合作申请","genTable":true,"genClass":true,"genList":true,"genForm":true,"genRouter":true,"javaPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/java/com/izouma/dingdong","viewPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/vue/src/views","routerPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/vue/src","resourcesPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/resources","dataBaseType":"Mysql","fields":[{"name":"userId","modelName":"userId","remark":"用户ID","showInList":true,"showInForm":true,"formType":"number"},{"name":"type","modelName":"type","remark":"类型","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"name","modelName":"name","remark":"名称","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"phone","modelName":"phone","remark":"联系电话","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"address","modelName":"address","remark":"地址","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"merName","modelName":"merName","remark":"商家名称","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"category","modelName":"category","remark":"商家类型","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"remark","modelName":"remark","remark":"合作内容","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"isPass","modelName":"isPass","remark":"是否联系","showInList":true,"showInForm":true,"formType":"switch"}],"readTable":false,"dataSourceCode":"dataSource","genJson":"","subtables":[],"update":false,"basePackage":"com.izouma.dingdong","tablePackage":"com.izouma.dingdong.domain.backstage.CooperateApply","genPackage":"backstage"}

+ 1 - 0
src/main/resources/genjson/Verified.json

@@ -0,0 +1 @@
+{"tableName":"Verified","className":"Verified","remark":"实名认证","genTable":true,"genClass":true,"genList":false,"genForm":false,"genRouter":false,"javaPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/java/com/izouma/dingdong","viewPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/vue/src/views","routerPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/vue/src","resourcesPath":"/Users/qiufangchao/Desktop/project/dingdong/src/main/resources","dataBaseType":"Mysql","fields":[{"name":"userId","modelName":"userId","remark":"用户ID","showInList":true,"showInForm":true,"formType":"number"},{"name":"realName","modelName":"realName","remark":"真实姓名","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"idNo","modelName":"idNo","remark":"身份证号","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"idNoImg","modelName":"idNoImg","remark":"身份证照片","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"handheldIdNo","modelName":"handheldIdNo","remark":"手持身份证照片","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"canEdit","modelName":"canEdit","remark":"可修改","showInList":true,"showInForm":true,"formType":"switch"}],"readTable":false,"dataSourceCode":"dataSource","genJson":"","subtables":[],"update":false,"basePackage":"com.izouma.dingdong","tablePackage":"com.izouma.dingdong.domain.Verified"}

+ 2 - 2
src/main/resources/templates/ListViewTemplate.ftl

@@ -9,9 +9,9 @@
             <el-button @click="addRow" type="primary" icon="el-icon-plus"
                        class="filter-item">添加
             </el-button>
-            <el-button @click="download" type="primary" icon="el-icon-download"
+            <#--<el-button @click="download" type="primary" icon="el-icon-download"
                        :loading="downloading" class="filter-item">导出EXCEL
-            </el-button>
+            </el-button>-->
         </div>
         <el-table :data="tableData" row-key="id" ref="table"
                   header-row-class-name="table-header-row"

+ 16 - 0
src/main/vue/src/router.js

@@ -334,6 +334,22 @@ const router = new Router({
                     meta: {
                        title: '语音配置',
                     },
+               },
+                {
+                    path: '/cooperateApplyEdit',
+                    name: 'CooperateApplyEdit',
+                    component: () => import(/* webpackChunkName: "cooperateApplyEdit" */ '@/views/backstage/CooperateApplyEdit.vue'),
+                    meta: {
+                       title: '合作申请编辑',
+                    },
+                },
+                {
+                    path: '/cooperateApplyList',
+                    name: 'CooperateApplyList',
+                    component: () => import(/* webpackChunkName: "cooperateApplyList" */ '@/views/backstage/CooperateApplyList.vue'),
+                    meta: {
+                       title: '合作申请',
+                    },
                }
                 /**INSERT_LOCATION**/,
                 {

+ 2 - 0
src/main/vue/src/views/VoiceEdit.vue

@@ -102,6 +102,8 @@
             },
             onSuccess(res, file) {
                 this.uploadLoading = false;
+                this.formData.url = res;
+
                 this.$message.success('上传成功');
             },
             beforeAvatarUpload(file) {

+ 118 - 0
src/main/vue/src/views/backstage/CooperateApplyEdit.vue

@@ -0,0 +1,118 @@
+<template>
+    <div class="edit-view">
+        <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
+                 style="max-width: 500px;">
+                <el-form-item prop="userId" label="用户ID">
+                            <el-input-number type="number" v-model="formData.userId"></el-input-number>
+                </el-form-item>
+                <el-form-item prop="type" label="类型">
+                    <el-select v-model="formData.type"
+                               placeholder="请选择" value-key="item.label">
+                        <el-option v-for="item in types" :key="item.value" :label="item.label" :value="item.value"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item prop="name" label="名称">
+                            <el-input v-model="formData.name"></el-input>
+                </el-form-item>
+                <el-form-item prop="phone" label="联系电话">
+                            <el-input v-model="formData.phone"></el-input>
+                </el-form-item>
+                <el-form-item prop="address" label="地址">
+                            <el-input v-model="formData.address"></el-input>
+                </el-form-item>
+                <el-form-item prop="merName" label="商家名称">
+                            <el-input v-model="formData.merName"></el-input>
+                </el-form-item>
+                <el-form-item prop="category" label="商家类型">
+                            <el-input v-model="formData.category"></el-input>
+                </el-form-item>
+                <el-form-item prop="remark" label="合作内容">
+                            <el-input v-model="formData.remark"></el-input>
+                </el-form-item>
+                <el-form-item prop="isPass" label="是否联系">
+                            <el-switch v-model="formData.isPass"></el-switch>
+                </el-form-item>
+            <el-form-item>
+                <el-button @click="onSave" :loading="saving"
+                           type="primary">保存</el-button>
+                <el-button @click="onDelete" :loading="saving"
+                           type="danger" v-if="formData.id">删除
+                </el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+    export default {
+        name: 'CooperateApplyEdit',
+        created() {
+            if (this.$route.query.id) {
+                this.$http
+                    .get('cooperateApply/get/'+this.$route.query.id)
+                    .then(res => {
+                        this.formData = res;
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    });
+            }
+        },
+        data() {
+            return {
+                saving: false,
+                formData: {
+                },
+                rules: {
+                },
+                types: [{label: "商家", value: "merchant"},
+                    {label: "骑手", value: "rider"},
+                    {label: "商务", value: "business"}],
+            }
+        },
+        methods: {
+            onSave() {
+                this.$refs.form.validate((valid) => {
+                    if (valid) {
+                        this.submit();
+                    } else {
+                        return false;
+                    }
+                });
+            },
+            submit() {
+                let data = {...this.formData};
+
+                this.saving = true;
+                this.$http
+                    .post('/cooperateApply/save', data, {body: 'json'})
+                    .then(res => {
+                        this.saving = false;
+                        this.$message.success('成功');
+                        this.$router.go(-1);
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.saving = false;
+                        this.$message.error(e.error);
+                    });
+            },
+            onDelete() {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post(`/cooperateApply/del/${this.formData.id}`)
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                }).catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+</style>

+ 231 - 0
src/main/vue/src/views/backstage/CooperateApplyList.vue

@@ -0,0 +1,231 @@
+<template>
+    <div class="list-view">
+        <div class="filters-container">
+            <el-input placeholder="输入关键字" v-model="search" clearable
+                      class="filter-item"></el-input>
+            <el-button @click="getData" type="primary" icon="el-icon-search"
+                       class="filter-item">搜索
+            </el-button>
+            <el-button @click="addRow" type="primary" icon="el-icon-plus"
+                       class="filter-item">添加
+            </el-button>
+            <el-button @click="download" type="primary" icon="el-icon-download"
+                       :loading="downloading" class="filter-item">导出EXCEL
+            </el-button>
+<!--            <el-checkbox-group v-model="checkTypes">
+                <el-checkbox v-for="item in types" :key="item.value" :label="item.label" :value="item.value"
+                             class="cb" border size="mini" @change="change"
+                ></el-checkbox>
+            </el-checkbox-group>-->
+            <el-select
+                    v-model="checkType"
+                    class="filter-item"
+                    placeholder="筛选身份"
+                    clearable
+                    filterable
+                    @change="getData"
+            >
+                <el-option
+                        v-for="item in types"
+                        :label="item.label"
+                        :value="item.value"
+                        :key="item.value"
+                />
+            </el-select>
+
+        </div>
+        <el-table :data="tableData" row-key="id" ref="table"
+                  header-row-class-name="table-header-row"
+                  header-cell-class-name="table-header-cell"
+                  row-class-name="table-row" cell-class-name="table-cell"
+                  :height="tableHeight">
+            <el-table-column v-if="multipleMode" align="center" type="selection"
+                             width="50">
+            </el-table-column>
+            <el-table-column prop="id" label="ID" width="100">
+            </el-table-column>
+            <el-table-column prop="userId" label="用户ID"
+            >
+            </el-table-column>
+            <el-table-column prop="type" label="类型"
+            >
+            </el-table-column>
+            <el-table-column prop="name" label="联系人"
+            >
+            </el-table-column>
+            <el-table-column prop="phone" label="联系电话"
+            >
+            </el-table-column>
+            <el-table-column prop="address" label="地址"
+            >
+            </el-table-column>
+            <el-table-column prop="merName" label="商家名称"
+            >
+            </el-table-column>
+            <el-table-column prop="category" label="商家类型"
+            >
+            </el-table-column>
+            <el-table-column prop="remark" label="合作内容"
+            >
+            </el-table-column>
+            <el-table-column prop="isPass" label="是否已联系"
+            >
+                <template slot-scope="{row}">
+                    <el-tag :type="row.isPass?'':'info'">{{row.isPass!=null?row.isPass:false}}</el-tag>
+                </template>
+            </el-table-column>
+            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150">
+                <template slot-scope="{row}">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <!-- <div class="multiple-mode-wrapper">
+                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button @click="operation1">批量操作1</el-button>
+                    <el-button @click="operation2">批量操作2</el-button>
+                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div> -->
+            <el-pagination background @size-change="onSizeChange"
+                           @current-change="onCurrentChange" :current-page="page"
+                           :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize"
+                           layout="total, sizes, prev, pager, next, jumper"
+                           :total="totalElements">
+            </el-pagination>
+        </div>
+
+    </div>
+</template>
+<script>
+    import {mapState} from "vuex";
+    import pageableTable from "@/mixins/pageableTable";
+
+    export default {
+        name: 'CooperateApplyList',
+        mixins: [pageableTable],
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                multipleMode: false,
+                search: "",
+                url: "/cooperateApply/all",
+                downloading: false,
+                types: [{label: "商家", value: "MERCHANT"},
+                    {label: "骑手", value: "RIDER"},
+                    {label: "商务", value: "BUSINESS"}],
+                checkType: "",
+            }
+        },
+        computed: {
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            beforeGetData() {
+                if (this.search) {
+                    return {search: this.search};
+                }
+                if (this.checkType){
+                    return {
+                        query: {
+                            type : this.checkType
+                        }
+                    }
+                }
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            addRow() {
+                this.$router.push({
+                    path: "/cooperateApplyEdit",
+                    query: {
+                        ...this.$route.query
+                    }
+                });
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: "/cooperateApplyEdit",
+                    query: {
+                        id: row.id
+                    }
+                });
+            },
+            download() {
+                this.downloading = true;
+                this.$axios
+                    .get("/cooperateApply/excel", {
+                        responseType: "blob",
+                        params: {size: 10000}
+                    })
+                    .then(res => {
+                        console.log(res);
+                        this.downloading = false;
+                        const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                        const link = document.createElement("a");
+                        link.href = downloadUrl;
+                        link.setAttribute(
+                            "download",
+                            res.headers["content-disposition"].split("filename=")[1]
+                        );
+                        document.body.appendChild(link);
+                        link.click();
+                        link.remove();
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.downloading = false;
+                        this.$message.error(e.error);
+                    });
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post(`/cooperateApply/del/${row.id}`)
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+
+            change(){
+                console.log(this.checkTypes)
+            }
+        }
+    }
+</script>
+<style lang="less" scoped>
+
+    .cb{
+        margin: 2px;
+    }
+</style>

+ 2 - 2
src/main/vue/src/views/merchant/GoodsList.vue

@@ -9,9 +9,9 @@
             <el-button @click="addRow" type="primary" icon="el-icon-plus"
                        class="filter-item">添加
             </el-button>
-            <el-button @click="download" type="primary" icon="el-icon-download"
+<!--            <el-button @click="download" type="primary" icon="el-icon-download"
                        :loading="downloading" class="filter-item">导出EXCEL
-            </el-button>
+            </el-button>-->
         </div>
         <el-table :data="tableData" row-key="id" ref="table"
                   header-row-class-name="table-header-row"

+ 38 - 8
src/main/vue/src/views/merchant/MerchantList.vue

@@ -13,7 +13,7 @@
                        :loading="downloading" class="filter-item">导出EXCEL
             </el-button>
 
-<!--            <el-button >新店</el-button>-->
+            <!--            <el-button >新店</el-button>-->
 
             <el-date-picker
                     v-model="dateRange"
@@ -189,6 +189,19 @@
                 </div>
                 <div class="info-item">营业:{{formData.week}}</div>
                 <div class="info-item">营业时间:{{formData.startTime}} - {{formData.endTime}}</div>
+                <hr/>
+                <div class="info-item">法人姓名:{{verified.realName}}</div>
+                <div class="info-item">法人身份证:{{verified.idNo}}</div>
+                <div class="info-item">身份证照片:
+                    <el-image style="width: 30px; height: 30px"
+                              :src="picList(verified.idNoImg)[0]" fit="fit"
+                              :preview-src-list="picList(verified.idNoImg)?picList(verified.idNoImg):[]"/>
+                </div>
+                <div class="info-item">手持身份证:
+                    <el-image style="width: 30px; height: 30px"
+                              :src="verified.handheldIdNo" fit="fit"
+                              :preview-src-list="[verified.handheldIdNo]"/>
+                </div>
                 <!--                <div class="info-item">申请状态:{{formData.status}}</div>-->
                 <el-button @click="moveRow"
                            type="danger" v-if="formData.mid && !formData.blacklist">移入黑名单
@@ -223,7 +236,7 @@
                 downloading: false,
                 statusOptions: [{"label": "待处理", "value": "PENDING"}, {
                     "label": "成功", "value": "PASS"
-                }, {"label": "失败", "value": "FAIL"}],
+                }, {"label": "失败", "value": "DENY"}],
                 status: '',
                 drawer: false,
                 formData: {
@@ -231,6 +244,7 @@
                 },
                 showSetLogistics: false,
                 dateRange: [],
+                verified: {},
 
                 pickerOptions: {
                     shortcuts: [
@@ -286,7 +300,11 @@
         },
         methods: {
             picList(row) {
-                return row.split(",");
+                if (row) {
+                    return row.split(",");
+                } else {
+                    return "";
+                }
             },
             beforeOnCreate() {
                 if (this.$route.query.dateRange) {
@@ -310,6 +328,17 @@
                         console.log(e);
                         this.$message.error(e.error);
                     });
+                this.$http
+                    .get('/verified/my', {
+                        userId: row.userId
+                    })
+                    .then(res => {
+                        this.verified = res;
+                    })
+                    .catch(e => {
+                        console.log(e);
+                        this.$message.error(e.error);
+                    });
             },
 
             statusFormatter(row, column, cellValue, index) {
@@ -321,7 +350,7 @@
             },
             beforeGetData() {
 
-                let data = { sort: 'createdAt,desc', query: { } };
+                let data = {sort: 'createdAt,desc', query: {}};
                 if (this.search) {
                     data.search = this.search;
                 }
@@ -330,9 +359,9 @@
                 }
 
                 return data;
-/*                if (this.search) {
-                    return {search: this.search};
-                }*/
+                /*                if (this.search) {
+                                    return {search: this.search};
+                                }*/
             },
             toggleMultipleMode(multipleMode) {
                 this.multipleMode = multipleMode;
@@ -426,7 +455,8 @@
             },
             moveRow() {
                 this.$prompt('请输入理由', '提示', {
-                    inputType: 'textarea'})
+                    inputType: 'textarea'
+                })
                     .then(res => {
                         // console.log(res);
                         if (res.value) {

+ 3 - 1
src/test/java/com/izouma/dingdong/contorller/MoneyRecordTest.java

@@ -2,6 +2,7 @@ package com.izouma.dingdong.contorller;
 
 import com.izouma.dingdong.domain.MoneyRecord;
 import com.izouma.dingdong.dto.PageQuery;
+import com.izouma.dingdong.enums.FinancialType;
 import com.izouma.dingdong.web.MoneyRecordController;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,7 +27,8 @@ public class MoneyRecordTest {
         pageQuery.setSearch(null);
         pageQuery.setSort("");
         Map<String,Object> map = new HashMap<>();
-        map.put("time","2020-05-14 00:00:00,2020-05-14 13:59:59");
+//        map.put("time","2020-05-14 00:00:00,2020-05-14 13:59:59");
+        map.put("type", FinancialType.INCOME);
         pageQuery.setQuery(map);
 
         System.out.println(moneyRecordController.my(pageQuery));

+ 18 - 5
src/test/java/com/izouma/dingdong/contorller/OrderInfoControllerTest.java

@@ -1,8 +1,10 @@
 package com.izouma.dingdong.contorller;
 
 import com.izouma.dingdong.domain.backstage.Category;
+import com.izouma.dingdong.domain.backstage.MerchantNature;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.dto.MerchantDTO;
+import com.izouma.dingdong.repo.backstage.MerchantNatureRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.service.OrderInfoService;
 import com.izouma.dingdong.web.AuthenticationController;
@@ -37,6 +39,9 @@ public class OrderInfoControllerTest {
     @Autowired
     private OrderInfoService service;
 
+    @Autowired
+    private MerchantNatureRepo merchantNatureRepo;
+
     //商家注册
     @Test
     public void testMerReg() {
@@ -46,17 +51,25 @@ public class OrderInfoControllerTest {
         categories.add(tree.get(0));
 
         MerchantDTO merchantDTO = MerchantDTO.builder()
-                .address("测试测试")
-                .aliAccount("11111")
-                .aliName("测试")
+                .name("小爽的店")
+                .showName("小爽的店")
+                .address("中胜路2-1")
+                .aliAccount("131456")
+                .aliName("小爽")
                 .logo("https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-05-14-10-01-57oAziBRXO.jpg")
                 .category(categories)
                 .endTime(LocalTime.parse("16:00:00"))
                 .startTime(LocalTime.parse("14:00:00"))
                 .merchantNatureId(1L)
-                .phone("22222222")
-                .password("22222222")
+                .phone("131456")
+                .password("131456")
+                .automaticOrder(true)
+                .startingAmount(BigDecimal.valueOf(20))
+                .banner("https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-05-14-10-01-57oAziBRXO.jpg")
                 .week("MONDAY,TUESDAY,WEDNESDAY")
+                .doorHeadImg("https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-05-14-10-01-57oAziBRXO.jpg")
+                .introduction("最可爱的小爽开的店")
+                .merchantNatureId(594L)
                 .build();
 
         System.out.println(auth.registerMerchant(merchantDTO));

+ 31 - 0
src/test/java/com/izouma/dingdong/contorller/VerifiedControllerTest.java

@@ -0,0 +1,31 @@
+package com.izouma.dingdong.contorller;
+
+import com.izouma.dingdong.domain.Verified;
+import com.izouma.dingdong.web.VerifiedController;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class VerifiedControllerTest {
+
+    @Autowired
+    private VerifiedController verifiedController;
+
+    @Test
+    public void test(){
+        Verified build = Verified.builder()
+                .userId(44L)
+                .realName("张三")
+                .idNo("111111")
+                .idNoImg("https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-05-27-11-19-02VdOmcIju.jpg,https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-05-27-11-19-02VdOmcIju.jpg")
+                .handheldIdNo("https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-05-27-11-19-02VdOmcIju.jpg")
+                .canEdit(false)
+                .build();
+
+        System.out.println(verifiedController.save(build));
+    }
+}

+ 15 - 0
src/test/java/com/izouma/dingdong/service/MerchantServiceTest.java

@@ -1,7 +1,9 @@
 package com.izouma.dingdong.service;
 
+import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.dto.PageQuery;
+import com.izouma.dingdong.repo.backstage.CategoryRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.web.merchant.MerchantController;
@@ -12,6 +14,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.time.LocalTime;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -25,6 +28,9 @@ public class MerchantServiceTest {
     @Autowired
     private MerchantController merchantController;
 
+    @Autowired
+    private CategoryRepo categoryRepo;
+
     @Test
     public void testChange(){
         MerchantDTO merchantDTO = MerchantDTO.builder()
@@ -46,4 +52,13 @@ public class MerchantServiceTest {
         pageQuery.setQuery(map);
         System.out.println(merchantController.all(pageQuery));
     }
+
+    @Test
+    public void saveDTO(){
+        MerchantDTO dto = new MerchantDTO();
+        dto.setMid(752L);
+        Category category = categoryRepo.findById(733L).orElse(null);
+        dto.setCategory(Collections.singleton(category));
+        System.out.println(merchantController.saveDTO(dto));
+    }
 }