licailing vor 5 Jahren
Ursprung
Commit
9629a65e6b

+ 4 - 0
src/main/java/com/izouma/dingdong/domain/BankCard.java

@@ -40,5 +40,9 @@ public class BankCard extends BaseEntity {
     @Column(nullable = false)
     private Boolean enabled = true;
 
+    public String userInfo(){
+        return bankName + " (" + cardNo.substring(cardNo.length() - 4) + ") " + realName;
+    }
+
 }
 

+ 7 - 0
src/main/java/com/izouma/dingdong/domain/backstage/Email.java

@@ -1,6 +1,7 @@
 package com.izouma.dingdong.domain.backstage;
 
 import com.izouma.dingdong.domain.BaseEntity;
+import com.izouma.dingdong.enums.EmailType;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -9,6 +10,8 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 import java.time.LocalDate;
 
 @Data
@@ -34,4 +37,8 @@ public class Email extends BaseEntity {
     private String content;
 
     private Boolean enabled;
+
+/*    @Enumerated(EnumType.STRING)
+    @ApiModelProperty(value = "消息中心", name = "type")
+    private EmailType type;*/
 }

+ 13 - 0
src/main/java/com/izouma/dingdong/enums/EmailType.java

@@ -0,0 +1,13 @@
+package com.izouma.dingdong.enums;
+
+public enum  EmailType {
+    /**
+     * 系统消息
+     */
+    SYSTEM_INFORMATION,
+
+    /**
+     * 用户消息
+     */
+    USER_MESSAGE
+}

+ 35 - 1
src/main/java/com/izouma/dingdong/service/WithdrawApplyService.java

@@ -5,6 +5,8 @@ import com.izouma.dingdong.domain.BankCard;
 import com.izouma.dingdong.domain.MoneyRecord;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.WithdrawApply;
+import com.izouma.dingdong.domain.backstage.Email;
+import com.izouma.dingdong.enums.EmailType;
 import com.izouma.dingdong.enums.FinancialType;
 import com.izouma.dingdong.enums.WithdrawStatus;
 import com.izouma.dingdong.exception.BusinessException;
@@ -12,11 +14,13 @@ import com.izouma.dingdong.repo.BankCardRepo;
 import com.izouma.dingdong.repo.MoneyRecordRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.WithdrawApplyRepo;
+import com.izouma.dingdong.repo.backstage.EmailRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 
@@ -28,6 +32,7 @@ public class WithdrawApplyService {
     private UserRepo userRepo;
     private BankCardRepo bankCardRepo;
     private MoneyRecordRepo moneyRecordRepo;
+    private EmailRepo emailRepo;
 
     /*
     提现申请
@@ -57,6 +62,14 @@ public class WithdrawApplyService {
                 //.bankCard(bankCard)
                 .build();
 
+        emailRepo.save(Email.builder()
+                .receiveUserId(user.getId())
+                .title("提现申请提交")
+                .sendTime(LocalDate.now())
+                .content(apply.getAmount() + "元," + "提现到:" + bankCard.userInfo())
+                .build()
+        );
+
         return withdrawalsApplyRepo.save(apply);
 
     }
@@ -70,6 +83,8 @@ public class WithdrawApplyService {
         if (consent == null) {
             throw new BusinessException("操作错误");
         }
+        Email email;
+
         if (consent) {
             withdrawals.setConsent(true);
             withdrawals.setStatus(WithdrawStatus.SUCCESS);
@@ -81,20 +96,39 @@ public class WithdrawApplyService {
 
 
             //记录到对账单
+            BankCard bankCard = withdrawals.getBankCard();
             moneyRecordRepo.save(
                     MoneyRecord.builder()
                             .name("提现")
                             .userId(withdrawals.getUserId())
                             .time(LocalDateTime.now())
                             .type(FinancialType.WITHDRAW)
-                            .remark(withdrawals.getBankCard().getBankName())
+                            .remark(bankCard.getBankName())
                             .build()
             );
 
+            //发送邮件通知
+            email = Email.builder()
+                    .receiveUserId(user.getId())
+                    .title("提现申请通过")
+                    .sendTime(LocalDate.now())
+                    .content(withdrawals.getAmount() + "元," + "提现到:" + bankCard.userInfo())
+                    .build();
+
         } else {
             withdrawals.setConsent(false);
             withdrawals.setStatus(WithdrawStatus.FAIL);
+            //发送邮件通知
+            email = Email.builder()
+                    .receiveUserId(withdrawals.getUserId())
+                    .title("提现申请失败")
+                    .sendTime(LocalDate.now())
+                    .content("提现失败")
+                    .build();
         }
+        //报错邮件通知
+        emailRepo.save(email);
+
         withdrawals.setAuditTime(LocalDateTime.now());
         return withdrawalsApplyRepo.save(withdrawals);
     }

+ 31 - 11
src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.config.Constants;
 import com.izouma.dingdong.converter.LongArrayConverter;
 import com.izouma.dingdong.converter.StringArrayConverter;
+import com.izouma.dingdong.domain.backstage.Email;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
@@ -11,6 +12,7 @@ import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.UserRepo;
+import com.izouma.dingdong.repo.backstage.EmailRepo;
 import com.izouma.dingdong.repo.merchant.*;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -26,17 +28,13 @@ import java.util.List;
 public class GoodsService {
 
     private GoodsRepo goodsRepo;
-
     private MerchantSettingsRepo merchantSettingsRepo;
-
     private MerchantService merchantService;
-
     private SalesRepo salesRepo;
-
     private MerchantClassificationRepo merchantClassificationRepo;
-
     private MerchantClassificationService merchantClassificationService;
-
+    private EmailRepo emailRepo;
+    private MerchantRepo merchantRepo;
 
     /**
      * 添加修改商品
@@ -73,9 +71,9 @@ public class GoodsService {
             throw new BusinessException("商品销售时间不得早于/晚于营业时间");
         }
 
-        if (containsWeek(goods.getWeek(),merchantSettings.getWeek())){
+/*        if (containsWeek(goods.getWeek(), merchantSettings.getWeek())) {
             throw new BusinessException("商品销售日期不在营业日期内");
-        }
+        }*/
 
         if (goods.getId() == null) {
             goods.setLikes(0);
@@ -168,15 +166,37 @@ public class GoodsService {
      * @param goodsId 商品ID
      * @param pass    是否通过
      */
-    public Goods audit(Long goodsId, Boolean pass) {
+    public Goods audit(Long goodsId, Boolean pass, String reason) {
         Goods goods = goodsRepo.findById(goodsId).orElseThrow(new BusinessException("无商品"));
+
+        Long userId = merchantRepo.findUserIdById(goods.getMerchantId());
+
+        Email email;
+
         if (pass) {
             goods.setIsPass(true);
             goods.setStatus(ApplyStatus.PASS);
+            //发送邮件
+            email = Email.builder()
+                    .sendTime(LocalDate.now())
+                    .title("提交商品审核通过")
+                    .content(goods.getName() + ":恭喜你所提交的商品已审核通过!")
+                    .receiveUserId(userId)
+                    .build();
+
         } else {
             goods.setIsPass(false);
             goods.setStatus(ApplyStatus.DENY);
+            //发送邮件
+            email = Email.builder()
+                    .sendTime(LocalDate.now())
+                    .title("提交商品审核未通过")
+                    .content(goods.getName() + ":" + reason)
+                    .receiveUserId(userId)
+                    .build();
         }
+
+        emailRepo.save(email);
         return goodsRepo.save(goods);
     }
 
@@ -194,8 +214,8 @@ public class GoodsService {
             return true;
         }
 
-        for (String g:goodsWeeks ){
-            if (!merWeeks.contains(g)){
+        for (String g : goodsWeeks) {
+            if (!merWeeks.contains(g)) {
                 return false;
             }
         }

+ 1 - 0
src/main/java/com/izouma/dingdong/web/backstage/EmailController.java

@@ -62,6 +62,7 @@ public class EmailController extends BaseController {
         ExcelUtils.export(response, data);
     }
 
+    @GetMapping("/my")
     public List<Email> my(){
         return emailRepo.findAllByReceiveUserId(SecurityUtils.getAuthenticatedUser().getId());
     }

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

@@ -88,8 +88,8 @@ public class GoodsController extends BaseController {
 
     @GetMapping("/audit")
     @ApiOperation("审核商品")
-    public Goods audit(Long id, Boolean pass) {
-        return goodsService.audit(id, pass);
+    public Goods audit(Long id, Boolean pass, String reason) {
+        return goodsService.audit(id, pass, reason);
     }
 }
 

+ 2 - 2
src/main/vue/src/views/UserEdit.vue

@@ -39,9 +39,9 @@
                 <el-button @click="moveRow"
                            type="danger" v-if="formData.id && !formData.blacklist">移入黑名单
                 </el-button>
-                <el-button @click=""
+<!--                <el-button @click=""
                            type="danger" v-if="formData.id && formData.blacklist">移出黑名单
-                </el-button>
+                </el-button>-->
                 <el-button @click="showCoupon" :loading="$store.state.fetchingData"
                            type="primary" v-if="formData.id">发送优惠券
                 </el-button>

+ 42 - 9
src/main/vue/src/views/merchant/GoodsList.vue

@@ -37,7 +37,7 @@
                 <template slot-scope="{row}">
                     <el-image style="width: 30px; height: 30px"
                               :src="picList(row.img)[0]" fit="cover"
-                              :preview-src-list="picList(row.img)"></el-image>
+                              :preview-src-list="picList(row.img)?picList(row.img):[]"></el-image>
                 </template>
             </el-table-column>
             <el-table-column prop="inventory" label="库存"
@@ -91,8 +91,8 @@
                     fixed="right"
                     min-width="350">
                 <template slot-scope="{row}">
-                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="take(row)" type="warning" size="mini" plain>
+                   <!-- <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>-->
+                    <el-button @click="take(row)" type="warning" size="mini" plain v-if="row.status === 'PASS'">
                         {{row.takeOff?'上架':'下架'}}
                     </el-button>
                     <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
@@ -108,7 +108,7 @@
                     >
                     <el-button
                             v-if="row.status === 'PENDING'"
-                            @click="audit(row, false)"
+                            @click="deny(row)"
                             type="danger"
                             size="mini"
                             plain
@@ -119,14 +119,14 @@
             </el-table-column>
         </el-table>
         <div class="pagination-wrapper">
-            <div class="multiple-mode-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>
+            </div>-->
             <el-pagination background @size-change="onSizeChange"
                            @current-change="onCurrentChange" :current-page="page"
                            :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize"
@@ -155,7 +155,7 @@
                 downloading: false,
                 statusOptions: [{"label": "待处理", "value": "PENDING"}, {
                     "label": "成功", "value": "PASS"
-                }, {"label": "失败", "value": "FAIL"}],
+                }, {"label": "失败", "value": "DENY"}],
 
             }
         },
@@ -166,7 +166,11 @@
         },
         methods: {
             picList(row) {
-                return row.split(",");
+                if (row) {
+                    return row.split(",");
+                } else {
+                    return "";
+                }
             },
             statusFormatter(row, column, cellValue, index) {
                 let selectedOption = this.statusOptions.find(i => i.value === cellValue);
@@ -299,7 +303,36 @@
                         this.$set(row, 'loading', false);
                         this.$message.error(e.error);
                     });
-            }
+            },
+            deny(row) {
+                this.$prompt('请输入理由', '提示', {
+                    inputType: 'textarea'
+                })
+                    .then(res => {
+                        // console.log(res);
+                        if (res.value) {
+                            this.$alert('确定拒绝通过?', '提示', {
+                                showCancelButton: true
+                            })
+                                .then(() => {
+                                    return this.$http.get('/goods/audit', {
+                                        id: row.id,
+                                        pass: false,
+                                        reason: res.value
+                                    });
+                                })
+                                .then(res => {
+                                    this.$message.success('拒绝通过成功');
+                                    this.$router.go(0);
+                                })
+                                .catch(() => {
+                                    this.$message.error(res.error || '拒绝通过失败');
+                                });
+                        }
+                    })
+                    .catch(() => {
+                    });
+            },
         }
     }
 </script>

+ 18 - 10
src/test/java/com/izouma/dingdong/Contorller/OrderInfoController.java

@@ -6,11 +6,13 @@ import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.dto.PageQuery;
+import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.web.AuthenticationController;
 import com.izouma.dingdong.web.backstage.CategoryController;
 import com.izouma.dingdong.web.backstage.MerchantNatureController;
 import com.izouma.dingdong.web.merchant.GoodsController;
 import com.izouma.dingdong.web.merchant.MerchantClassificationController;
+import io.swagger.annotations.ApiModelProperty;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,10 +38,14 @@ public class OrderInfoController {
     @Autowired
     private MerchantClassificationController classificationController;
 
+    @Autowired
+    private MerchantRepo merchantRepo;
+
+
     //商家注册
     @Test
-    public void testMerReg(){
-        Set<Category> categories=new HashSet<>();
+    public void testMerReg() {
+        Set<Category> categories = new HashSet<>();
         List<Category> tree = categoryController.tree(137L);
         //System.out.println(tree);
         categories.add(tree.get(0));
@@ -63,13 +69,13 @@ public class OrderInfoController {
 
     //注册添加商品
     @Test
-    public void testGoods(){
+    public void testGoods() {
         Goods goods = Goods.builder()
                 .amount(BigDecimal.valueOf(111))
                 .discountAmount(BigDecimal.valueOf(111))
-                .endTime(LocalTime.parse("16:00:00"))
-                .startTime(LocalTime.parse("14:00:00"))
-                .merchantId(298L)
+                .endTime(LocalTime.parse("20:00:00"))
+                .startTime(LocalTime.parse("05:00:00"))
+                .merchantId(356L)
                 .name("111")
                 .packingPrice(BigDecimal.valueOf(10))
                 .inventory(1)
@@ -81,10 +87,12 @@ public class OrderInfoController {
     }
 
     @Test
-    public void testClass(){
-/*        MerchantClassification.builder()
+    public void testClass() {
+        System.out.println(merchantRepo.findById(357L).orElse(null));
+    }
 
-                .build();
-        classificationController.save()*/
+    @Test
+    public void goodsPass() {
+        goodsController.audit(319L, true, null);
     }
 }

+ 1 - 1
src/test/java/com/izouma/dingdong/repo/UserRepoTest.java

@@ -35,7 +35,7 @@ public class UserRepoTest {
     @Test
     public void createUser() {
 
-        User user = userRepo.findByUsername("123");
+        User user = userRepo.findByUsername("18205083565");
         user.setPassword(new BCryptPasswordEncoder().encode("123"));
         userRepo.save(user);
     }

+ 4 - 0
src/test/java/com/izouma/dingdong/service/EmailServiceTest.java

@@ -0,0 +1,4 @@
+package com.izouma.dingdong.service;
+
+public class EmailServiceTest {
+}