xiongzhu 3 سال پیش
والد
کامیت
d9d23deeb5
46فایلهای تغییر یافته به همراه578 افزوده شده و 165 حذف شده
  1. 2 2
      mvnw.cmd
  2. 5 0
      src/main/java/com/izouma/awesomeAdmin/config/Constants.java
  3. 9 0
      src/main/java/com/izouma/awesomeAdmin/config/WebMvcConfig.java
  4. 42 0
      src/main/java/com/izouma/awesomeAdmin/domain/BalanceRecord.java
  5. 91 0
      src/main/java/com/izouma/awesomeAdmin/domain/BaseEntityNoID.java
  6. 2 0
      src/main/java/com/izouma/awesomeAdmin/domain/Delegation.java
  7. 6 0
      src/main/java/com/izouma/awesomeAdmin/domain/Order.java
  8. 6 0
      src/main/java/com/izouma/awesomeAdmin/domain/Product.java
  9. 31 0
      src/main/java/com/izouma/awesomeAdmin/domain/UserBalance.java
  10. 18 0
      src/main/java/com/izouma/awesomeAdmin/repo/BalanceRecordRepo.java
  11. 2 0
      src/main/java/com/izouma/awesomeAdmin/repo/DelegationRepo.java
  12. 3 0
      src/main/java/com/izouma/awesomeAdmin/repo/SaleBatchRepo.java
  13. 15 0
      src/main/java/com/izouma/awesomeAdmin/repo/UserBalanceRepo.java
  14. 1 0
      src/main/java/com/izouma/awesomeAdmin/security/WebSecurityConfig.java
  15. 2 1
      src/main/java/com/izouma/awesomeAdmin/service/CommissionService.java
  16. 29 40
      src/main/java/com/izouma/awesomeAdmin/service/DelegationService.java
  17. 74 44
      src/main/java/com/izouma/awesomeAdmin/service/OrderService.java
  18. 8 7
      src/main/java/com/izouma/awesomeAdmin/service/ProductService.java
  19. 54 3
      src/main/java/com/izouma/awesomeAdmin/service/SaleBatchService.java
  20. 41 0
      src/main/java/com/izouma/awesomeAdmin/service/UserBalanceService.java
  21. 6 5
      src/main/java/com/izouma/awesomeAdmin/service/UserService.java
  22. 6 5
      src/main/java/com/izouma/awesomeAdmin/service/WithdrawApplyService.java
  23. 9 8
      src/main/java/com/izouma/awesomeAdmin/service/WorkOrderService.java
  24. 24 0
      src/main/java/com/izouma/awesomeAdmin/utils/Translator.java
  25. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/AddressController.java
  26. 2 1
      src/main/java/com/izouma/awesomeAdmin/web/AlipayController.java
  27. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/BannerController.java
  28. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/CategoryController.java
  29. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/CommissionRecordController.java
  30. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/DelegationController.java
  31. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/DemoProductController.java
  32. 2 1
      src/main/java/com/izouma/awesomeAdmin/web/OrderController.java
  33. 14 0
      src/main/java/com/izouma/awesomeAdmin/web/PayDelegationController.java
  34. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/ProductController.java
  35. 3 7
      src/main/java/com/izouma/awesomeAdmin/web/SaleBatchController.java
  36. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/SubAccountController.java
  37. 3 5
      src/main/java/com/izouma/awesomeAdmin/web/SysConfigController.java
  38. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/UserCollectionController.java
  39. 12 11
      src/main/java/com/izouma/awesomeAdmin/web/UserController.java
  40. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/UserMoneyRecordController.java
  41. 3 2
      src/main/java/com/izouma/awesomeAdmin/web/WithdrawApplyController.java
  42. 2 1
      src/main/java/com/izouma/awesomeAdmin/web/WorkOrderController.java
  43. 2 0
      src/main/resources/messages.properties
  44. 5 0
      src/main/resources/messages_en.properties
  45. 12 0
      src/main/resources/messages_zh_CN.properties
  46. 2 2
      src/main/resources/templates/ControllerTemplate.ftl

+ 2 - 2
mvnw.cmd

@@ -61,7 +61,7 @@ set ERROR_CODE=0
 if not "%JAVA_HOME%" == "" goto OkJHome
 
 echo.
-echo Error: JAVA_HOME not found in your environment. >&2
+echo Error: JAVA_HOME not_found in your environment. >&2
 echo Please set the JAVA_HOME variable in your environment to match the >&2
 echo location of your Java installation. >&2
 echo.
@@ -83,7 +83,7 @@ goto error
 :init
 
 @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
+@REM Fallback to current working directory if not_found.
 
 set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
 IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir

+ 5 - 0
src/main/java/com/izouma/awesomeAdmin/config/Constants.java

@@ -38,4 +38,9 @@ public interface Constants {
     String SYSTEM_OPEN = "SYSTEM_OPEN"; //开苑开关
 
     LocalTime TIME_MAX = LocalTime.of(23, 59, 59);
+
+    interface BalanceRemark {
+        String PAY = "支付";
+        String RECEIPT = "收款";
+    }
 }

+ 9 - 0
src/main/java/com/izouma/awesomeAdmin/config/WebMvcConfig.java

@@ -3,6 +3,7 @@ package com.izouma.awesomeAdmin.config;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.support.ResourceBundleMessageSource;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -71,4 +72,12 @@ public class WebMvcConfig implements WebMvcConfigurer {
                 .exposedHeaders("Content-Disposition");
     }
 
+    @Bean
+    public ResourceBundleMessageSource messageSource() {
+        ResourceBundleMessageSource rs = new ResourceBundleMessageSource();
+        rs.setBasename("messages");
+        rs.setDefaultEncoding("UTF-8");
+        rs.setUseCodeAsDefaultMessage(true);
+        return rs;
+    }
 }

+ 42 - 0
src/main/java/com/izouma/awesomeAdmin/domain/BalanceRecord.java

@@ -0,0 +1,42 @@
+package com.izouma.awesomeAdmin.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@Table(indexes = {
+        @Index(columnList = "userId")
+})
+public class BalanceRecord extends BaseEntity {
+
+    private Long userId;
+
+    private LocalDateTime time;
+
+    @Column(precision = 19, scale = 2)
+    private BigDecimal amount;
+
+    @Column(precision = 19, scale = 2)
+    private BigDecimal balance;
+
+    @Column(precision = 19, scale = 2)
+    private BigDecimal lastBalance;
+
+    private String remark;
+
+    private Long orderId;
+
+    private String withdrawId;
+
+    private String extra;
+}

+ 91 - 0
src/main/java/com/izouma/awesomeAdmin/domain/BaseEntityNoID.java

@@ -0,0 +1,91 @@
+package com.izouma.awesomeAdmin.domain;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import org.hibernate.envers.Audited;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.Column;
+import javax.persistence.EntityListeners;
+import javax.persistence.MappedSuperclass;
+import java.time.LocalDateTime;
+
+@MappedSuperclass
+@Audited
+@EntityListeners(AuditingEntityListener.class)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
+public abstract class BaseEntityNoID {
+    @ExcelIgnore
+    @JsonIgnore
+    @CreatedBy
+    private String createdBy;
+
+    @ExcelProperty("创建时间")
+    @JsonIgnore
+    @CreatedDate
+    private LocalDateTime createdAt;
+
+    @ExcelIgnore
+    @JsonIgnore
+    @LastModifiedBy
+    private String modifiedBy;
+
+    @ExcelIgnore
+    @JsonIgnore
+    @LastModifiedDate
+    private LocalDateTime modifiedAt;
+
+    @ExcelIgnore
+    @Column(columnDefinition = "bit(1) default 0")
+    private boolean del;
+
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    @JsonProperty("createdAt")
+    public LocalDateTime getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(LocalDateTime createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public String getModifiedBy() {
+        return modifiedBy;
+    }
+
+    public void setModifiedBy(String modifiedBy) {
+        this.modifiedBy = modifiedBy;
+    }
+
+    public LocalDateTime getModifiedAt() {
+        return modifiedAt;
+    }
+
+    public void setModifiedAt(LocalDateTime modifiedAt) {
+        this.modifiedAt = modifiedAt;
+    }
+
+    public boolean isDel() {
+        return del;
+    }
+
+    public void setDel(boolean del) {
+        this.del = del;
+    }
+}

+ 2 - 0
src/main/java/com/izouma/awesomeAdmin/domain/Delegation.java

@@ -85,4 +85,6 @@ public class Delegation extends BaseEntity {
     @NotFound(action = NotFoundAction.IGNORE)
     @ExcelIgnore
     private Product product;
+
+    private Long batchId;
 }

+ 6 - 0
src/main/java/com/izouma/awesomeAdmin/domain/Order.java

@@ -38,6 +38,12 @@ public class Order extends BaseEntity {
     @ApiModelProperty(value = "价格", name = "price")
     private BigDecimal totalPrice;
 
+    @Column(precision = 10, scale = 2)
+    private BigDecimal capital;
+
+    @Column(precision = 10, scale = 2)
+    private BigDecimal interest;
+
     @Column(precision = 10, scale = 2)
     @ApiModelProperty(value = "出售价格", name = "sellPrice")
     private BigDecimal sellPrice;

+ 6 - 0
src/main/java/com/izouma/awesomeAdmin/domain/Product.java

@@ -52,6 +52,12 @@ public class Product extends BaseEntity {
     @ApiModelProperty(value = "当前价格", name = "currentPrice")
     private BigDecimal currentPrice;
 
+    @Column(precision = 10, scale = 2)
+    private BigDecimal capital;
+
+    @Column(precision = 10, scale = 2)
+    private BigDecimal interest;
+
     @ApiModelProperty(value = "销量", name = "sales")
     private Integer sales = 0;
 

+ 31 - 0
src/main/java/com/izouma/awesomeAdmin/domain/UserBalance.java

@@ -0,0 +1,31 @@
+package com.izouma.awesomeAdmin.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.math.BigDecimal;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserBalance extends BaseEntityNoID {
+    @Id
+    private Long userId;
+
+    @Column(precision = 19, scale = 2)
+    private BigDecimal balance;
+
+    @Column(precision = 19, scale = 2)
+    private BigDecimal lastBalance;
+
+    public UserBalance(Long userId) {
+        this.userId = userId;
+        this.balance = BigDecimal.ZERO;
+        this.lastBalance = BigDecimal.ZERO;
+    }
+}

+ 18 - 0
src/main/java/com/izouma/awesomeAdmin/repo/BalanceRecordRepo.java

@@ -0,0 +1,18 @@
+package com.izouma.awesomeAdmin.repo;
+
+import com.izouma.awesomeAdmin.domain.BalanceRecord;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+public interface BalanceRecordRepo extends JpaRepository<BalanceRecord, Long>, JpaSpecificationExecutor<BalanceRecord> {
+    List<BalanceRecord> findByUserIdAndCreatedAtBetweenOrderByCreatedAt(Long userId, LocalDateTime start, LocalDateTime end);
+
+    List<BalanceRecord> findByUserIdOrderByCreatedAt(Long userId);
+
+    Page<BalanceRecord> findByUserId(Long userId, Pageable pageable);
+}

+ 2 - 0
src/main/java/com/izouma/awesomeAdmin/repo/DelegationRepo.java

@@ -14,4 +14,6 @@ public interface DelegationRepo extends JpaRepository<Delegation, Long>, JpaSpec
     Optional<Delegation> findBySellerOrderId(Long orderId);
 
     List<Delegation> findByActiveFalse();
+
+    List<Delegation> findByBatchIdAndActiveFalse(Long batchId);
 }

+ 3 - 0
src/main/java/com/izouma/awesomeAdmin/repo/SaleBatchRepo.java

@@ -7,10 +7,13 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 public interface SaleBatchRepo extends JpaRepository<SaleBatch, Long>, JpaSpecificationExecutor<SaleBatch> {
     @Query("update SaleBatch t set t.enabled = false where t.id = ?1")
     @Modifying
     @Transactional
     void deleteById(Long id);
+
+    List<SaleBatch> findAllByEnabledTrue();
 }

+ 15 - 0
src/main/java/com/izouma/awesomeAdmin/repo/UserBalanceRepo.java

@@ -0,0 +1,15 @@
+package com.izouma.awesomeAdmin.repo;
+
+import com.izouma.awesomeAdmin.domain.UserBalance;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Lock;
+
+import javax.persistence.LockModeType;
+import java.util.Optional;
+
+public interface UserBalanceRepo extends JpaRepository<UserBalance, Long>, JpaSpecificationExecutor<UserBalance> {
+
+    @Lock(LockModeType.PESSIMISTIC_WRITE)
+    Optional<UserBalance> findByUserId(Long userId);
+}

+ 1 - 0
src/main/java/com/izouma/awesomeAdmin/security/WebSecurityConfig.java

@@ -71,6 +71,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/alipay/**").permitAll()
                 .antMatchers("/delegation/payDelegation").permitAll()
                 .antMatchers("/payDelegation/*").permitAll()
+                .antMatchers("/payDelegation/balance").authenticated()
                 .antMatchers("/banner/all").permitAll()
                 .antMatchers("/category/all").permitAll()
                 .antMatchers("/sysConfig/all").permitAll()

+ 2 - 1
src/main/java/com/izouma/awesomeAdmin/service/CommissionService.java

@@ -14,6 +14,7 @@ import com.izouma.awesomeAdmin.repo.CommissionRecordRepo;
 import com.izouma.awesomeAdmin.repo.OrderRepo;
 import com.izouma.awesomeAdmin.repo.ProductRepo;
 import com.izouma.awesomeAdmin.repo.UserRepo;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
@@ -41,7 +42,7 @@ public class CommissionService {
     private ProductRepo          productRepo;
 
     public CommissionOverview overview(Long userId) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         User superior = null;
         if (user.getSuperiorId() != null) {
             superior = userRepo.findById(user.getSuperiorId()).orElse(null);

+ 29 - 40
src/main/java/com/izouma/awesomeAdmin/service/DelegationService.java

@@ -20,9 +20,9 @@ import com.izouma.awesomeAdmin.repo.*;
 import com.izouma.awesomeAdmin.utils.DateTimeUtils;
 import com.izouma.awesomeAdmin.utils.SecurityUtils;
 import com.izouma.awesomeAdmin.utils.SnowflakeIdWorker;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.core.env.Environment;
 import org.springframework.scheduling.TaskScheduler;
@@ -35,7 +35,6 @@ import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -61,6 +60,7 @@ public class DelegationService {
     private ScheduledFuture<?>   future;
     private UserMoneyRecordRepo  userMoneyRecordRepo;
     private SaleBatchRepo        saleBatchRepo;
+    private UserBalanceService   userBalanceService;
 
     public DelegationService(DelegationRepo delegationRepo,
                              OrderRepo orderRepo,
@@ -129,7 +129,7 @@ public class DelegationService {
 
     public WxPayMpOrderResult payDelegationWx(Long userId, Long orderId, BigDecimal riseRate) {
         SecurityUtils.checkBanned();
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("无记录"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         BigDecimal serviceCharge = checkPayDelegation(userId, orderId, riseRate);
 
         JSONObject attach = new JSONObject();
@@ -164,7 +164,7 @@ public class DelegationService {
 
     public ModelAndView payDelegationThird(Long userId, Long orderId, BigDecimal riseRate, String payType) throws UnsupportedEncodingException {
         SecurityUtils.checkBanned();
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("无记录"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         BigDecimal serviceCharge = checkPayDelegation(userId, orderId, riseRate);
 
         JSONObject attach = new JSONObject();
@@ -217,12 +217,21 @@ public class DelegationService {
         return modelAndView;
     }
 
+    public Delegation payDelegationBalance(Long userId, Long orderId, BigDecimal riseRate) {
+        SecurityUtils.checkBanned();
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
+        BigDecimal serviceCharge = checkPayDelegation(userId, orderId, riseRate);
+
+        userBalanceService.modify(userId, serviceCharge.negate(), Constants.BalanceRemark.PAY);
+        return createDelegation(userId, orderId, riseRate);
+    }
+
     private BigDecimal checkPayDelegation(Long userId, Long orderId, BigDecimal riseRate) {
-        Order sellerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException("无记录"));
+        Order sellerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         if (!userId.equals(sellerOrder.getUserId())) {
             throw new BusinessException("无权限");
         }
-        SaleBatch saleBatch = saleBatchRepo.findById(sellerOrder.getBatchId()).orElseThrow(new BusinessException("无记录"));
+        SaleBatch saleBatch = saleBatchRepo.findById(sellerOrder.getBatchId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         LocalTime delegationTime = saleBatch.getDelegateStart();
         LocalTime sellTime = saleBatch.getSellStart();
         if (LocalTime.now().isBefore(delegationTime) && LocalTime.now().isAfter(sellTime)) {
@@ -243,11 +252,11 @@ public class DelegationService {
         BigDecimal maxPrice = sysConfigService.getBigDecimal(Constants.MAX_PRICE);
         BigDecimal splitPrice = sysConfigService.getBigDecimal(Constants.SPLIT_PRICE);
 
-        Order sellerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException("无记录"));
+        Order sellerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         if (!userId.equals(sellerOrder.getUserId())) {
             throw new BusinessException("无权限");
         }
-        Product product = productRepo.findById(sellerOrder.getProductId()).orElseThrow(new BusinessException("商品不存在"));
+        Product product = productRepo.findById(sellerOrder.getProductId()).orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
         BigDecimal finalPrice = sellerOrder.getTotalPrice().multiply(riseRate).add(sellerOrder.getTotalPrice())
                 .setScale(2, RoundingMode.HALF_UP);
         BigDecimal serviceCharge = sellerOrder.getTotalPrice()
@@ -336,14 +345,14 @@ public class DelegationService {
     }
 
     public void activeDelegation(Long delegationId) {
-        Delegation delegation = delegationRepo.findById(delegationId).orElseThrow(new BusinessException("无记录"));
+        Delegation delegation = delegationRepo.findById(delegationId).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         activeDelegation(delegation);
     }
 
     public void activeDelegation(Delegation delegation) {
-        if (delegation == null) throw new BusinessException("无记录");
-        Order order = orderRepo.findById(delegation.getSellerOrderId()).orElseThrow(new BusinessException("订单不存在"));
-        Product product = productRepo.findById(order.getProductId()).orElseThrow(new BusinessException("商品不存在"));
+        if (delegation == null) throw new BusinessException(Translator.toLocale("record.not_found"));
+        Order order = orderRepo.findById(delegation.getSellerOrderId()).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
+        Product product = productRepo.findById(order.getProductId()).orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
         delegation.setActive(true);
         delegationRepo.save(delegation);
         order.setStatus(OrderStatus.SELLING);
@@ -366,34 +375,14 @@ public class DelegationService {
         }
     }
 
-    @PostConstruct
-    public void postConstruct() {
-        schedule();
-    }
-
-    public void resetSchedule() {
-        log.info("更新定时任务");
-        if (future != null) {
-            if (!(future.isCancelled() || future.isDone())) {
-                future.cancel(false);
-            }
-        }
-        schedule();
-    }
-
-    public void schedule() {
-        LocalDateTime time = sysConfigService.getTime(Constants.DELEGATION_ACTIVE_TIME).atDate(LocalDate.now());
-        if (LocalDateTime.now().isAfter(time)) {
-            time = time.plusDays(1);
-        }
-        log.info("下次执行时间 {}", time);
-        Date nextDate = Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
-        future = taskScheduler.schedule(new Runnable() {
-            @Override
-            public void run() {
-                activeAll();
-                schedule();
+    public void active(Long batchId) {
+        List<Delegation> list = delegationRepo.findByBatchIdAndActiveFalse(batchId);
+        list.parallelStream().forEach(delegation -> {
+            try {
+                activeDelegation(delegation.getId());
+            } catch (Exception e) {
+                log.error("委托上架失败", e);
             }
-        }, nextDate);
+        });
     }
 }

+ 74 - 44
src/main/java/com/izouma/awesomeAdmin/service/OrderService.java

@@ -20,6 +20,7 @@ import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.*;
 import com.izouma.awesomeAdmin.security.Authority;
 import com.izouma.awesomeAdmin.utils.SecurityUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.AllArgsConstructor;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.collections.MapUtils;
@@ -75,6 +76,7 @@ public class OrderService {
     private final DelegationRepo       delegationRepo;
     private final CommissionRecordRepo commissionRecordRepo;
     private final Environment          env;
+    private final UserBalanceService   userBalanceService;
 
     public Page<Order> all(@RequestBody PageQuery pageQuery) {
         Page<Order> page = orderRepo.findAll((Specification<Order>) (root, criteriaQuery, criteriaBuilder) -> {
@@ -114,7 +116,7 @@ public class OrderService {
     }
 
     public Order get(Long id) {
-        Order order = orderRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        Order order = orderRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         order.setUser(userRepo.findById(order.getUserId()).orElse(null));
         order.setFromUser(order.getFromUserId() == null ? null : userRepo.findById(order.getFromUserId())
                 .orElse(null));
@@ -134,7 +136,7 @@ public class OrderService {
         if (!category.isOpen()) throw new BusinessException("画苑已关闭,不可下单");
         category.checkTime();
 
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         long count = orderRepo.count((Specification<Order>) (root, criteriaQuery, criteriaBuilder) ->
                 criteriaBuilder.and(
                         criteriaBuilder.equal(root.get("userId"), userId),
@@ -144,9 +146,9 @@ public class OrderService {
             throw new BusinessException("最多同时购买" + user.getMaxOrderCount() + "幅");
         }
         Delegation delegation = delegationRepo.findById(product.getDelegationId())
-                .orElseThrow(new BusinessException("无记录"));
+                .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         Order sellerOrder = orderRepo.findById(delegation.getSellerOrderId())
-                .orElseThrow(new BusinessException("订单不存在"));
+                .orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
         if (product.getStatus() == ProductStatus.SOLD_OUT) {
             throw new BusinessException("该商品已售罄");
         }
@@ -192,7 +194,7 @@ public class OrderService {
 
     public void cancelOrder(Long orderId, boolean checkRole, boolean checkStatus) {
         SecurityUtils.checkBanned();
-        Order buyerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        Order buyerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
         Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
         boolean hasAdminRole = false;
         if (authentication != null) {
@@ -201,23 +203,23 @@ public class OrderService {
         }
         if (checkRole && !hasAdminRole &&
                 !buyerOrder.getUserId().equals(SecurityUtils.getAuthenticatedUser().getId())) {
-            throw new BusinessException("无权操作");
+            throw new BusinessException(Translator.toLocale("permission.denied"));
         }
         Delegation delegation = delegationRepo.findByBuyerOrderId(orderId)
-                .orElseThrow(new BusinessException("无委托记录"));
+                .orElseThrow(new BusinessException(Translator.toLocale("delegation.not_found")));
         Order sellerOrder = orderRepo.findById(delegation.getSellerOrderId())
-                .orElseThrow(new BusinessException("订单不存在"));
-        Product product = productRepo.findById(buyerOrder.getProductId()).orElseThrow(new BusinessException("商品不存在"));
+                .orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
+        Product product = productRepo.findById(buyerOrder.getProductId()).orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
         if (checkStatus) {
             if (buyerOrder.getStatus() != OrderStatus.NOT_PAID) {
-                throw new BusinessException("状态错误");
+                throw new BusinessException(Translator.toLocale("status.error"));
             }
         } else {
             if (!EnumSet.of(OrderStatus.NOT_PAID,
-                    OrderStatus.NOT_CONFIRMED,
-                    OrderStatus.CONFIRMED)
+                            OrderStatus.NOT_CONFIRMED,
+                            OrderStatus.CONFIRMED)
                     .contains(buyerOrder.getStatus())) {
-                throw new BusinessException("状态错误");
+                throw new BusinessException(Translator.toLocale("status.error"));
             }
         }
 
@@ -238,15 +240,15 @@ public class OrderService {
 
     public void confirmPayment(Long userId, Long orderId, boolean checkUser) {
         SecurityUtils.checkBanned();
-        Delegation delegation = delegationRepo.findByBuyerOrderId(orderId).orElseThrow(new BusinessException("无委托记录"));
-        Order buyerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException("买家订单不存在"));
+        Delegation delegation = delegationRepo.findByBuyerOrderId(orderId).orElseThrow(new BusinessException(Translator.toLocale("delegation.not_found")));
+        Order buyerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.buyer.not_found")));
         Order sellerOrder = orderRepo.findById(delegation.getSellerOrderId())
-                .orElseThrow(new BusinessException("卖家订不存在"));
+                .orElseThrow(new BusinessException(Translator.toLocale("order.seller.not_found")));
         if (checkUser && !buyerOrder.getUserId().equals(userId)) {
-            throw new BusinessException("无操作权限");
+            throw new BusinessException(Translator.toLocale("permission.denied"));
         }
         if (buyerOrder.getStatus() != OrderStatus.NOT_PAID) {
-            throw new BusinessException("状态错误,请刷新后重试");
+            throw new BusinessException(Translator.toLocale("status.error"));
         }
         sellerOrder.setStatus(OrderStatus.SOLD_NOT_CONFIRMED);
 
@@ -257,22 +259,50 @@ public class OrderService {
 
     public void confirmReceipt(Long userId, Long orderId, boolean checkUser) {
         SecurityUtils.checkBanned();
-        Order sellerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException("卖家订单不存在"));
+        Order sellerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.seller.not_found")));
         if (checkUser && !sellerOrder.getUserId().equals(userId)) {
-            throw new BusinessException("无操作权限");
+            throw new BusinessException(Translator.toLocale("permission.denied"));
         }
         if (sellerOrder.getStatus() != OrderStatus.SOLD_NOT_CONFIRMED) {
-            throw new BusinessException("状态错误,请刷新后重试");
+            throw new BusinessException(Translator.toLocale("status.error"));
         }
-        Product product = productRepo.findById(sellerOrder.getProductId()).orElseThrow(new BusinessException("商品不存在"));
-        Delegation delegation = delegationRepo.findBySellerOrderId(orderId).orElseThrow(new BusinessException("无委托记录"));
+        Product product = productRepo.findById(sellerOrder.getProductId()).orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
+        Delegation delegation = delegationRepo.findBySellerOrderId(orderId).orElseThrow(new BusinessException(Translator.toLocale("delegation.not_found")));
         Order buyerOrder = orderRepo.findById(delegation.getBuyerOrderId())
-                .orElseThrow(new BusinessException("买家订单不存在"));
+                .orElseThrow(new BusinessException(Translator.toLocale("order.buyer.not_found")));
         if (buyerOrder.getStatus() != OrderStatus.NOT_CONFIRMED) {
             throw new BusinessException("买家还没有确认付款");
         }
-        User seller = userRepo.findById(sellerOrder.getUserId()).orElseThrow(new BusinessException("用不存在"));
-        User buyer = userRepo.findById(buyerOrder.getUserId()).orElseThrow(new BusinessException("用户不存在"));
+        User seller = userRepo.findById(sellerOrder.getUserId()).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
+        User buyer = userRepo.findById(buyerOrder.getUserId()).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
+
+        sellerOrder.setStatus(OrderStatus.SOLD);
+        sellerOrder.setSoldTime(LocalDateTime.now());
+        orderRepo.save(sellerOrder);
+        buyerOrder.setStatus(OrderStatus.CONFIRMED);
+        buyerOrder.setConfirmTime(LocalDateTime.now());
+        orderRepo.save(buyerOrder);
+
+        product.setUserId(buyerOrder.getUserId());
+        product.setSales(Optional.ofNullable(product.getSales()).orElse(0) + 1);
+        productRepo.save(product);
+    }
+
+    public void balancePay(Long userId, Long orderId) {
+        SecurityUtils.checkBanned();
+        Delegation delegation = delegationRepo.findByBuyerOrderId(orderId).orElseThrow(new BusinessException(Translator.toLocale("delegation.not_found")));
+        Order buyerOrder = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.seller.not_found")));
+        Order sellerOrder = orderRepo.findById(delegation.getSellerOrderId())
+                .orElseThrow(new BusinessException(Translator.toLocale("order.buyer.not_found")));
+        Product product = productRepo.findById(sellerOrder.getProductId()).orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
+        if (buyerOrder.getStatus() != OrderStatus.NOT_PAID) {
+            throw new BusinessException(Translator.toLocale("status.error"));
+        }
+        if (sellerOrder.getStatus() != OrderStatus.SOLD_NOT_CONFIRMED) {
+            throw new BusinessException(Translator.toLocale("status.error"));
+        }
+        userBalanceService.modify(userId, buyerOrder.getInterest().negate(), Constants.BalanceRemark.PAY);
+        userBalanceService.modify(sellerOrder.getUserId(), buyerOrder.getInterest(), Constants.BalanceRemark.RECEIPT);
 
         sellerOrder.setStatus(OrderStatus.SOLD);
         sellerOrder.setSoldTime(LocalDateTime.now());
@@ -288,13 +318,13 @@ public class OrderService {
 
     public void applyShip(Long userId, Long orderId) {
         SecurityUtils.checkBanned();
-        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
-        Product product = productRepo.findById(order.getProductId()).orElseThrow(new BusinessException("商品不存在"));
+        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
+        Product product = productRepo.findById(order.getProductId()).orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
         if (!order.getUserId().equals(userId)) {
-            throw new BusinessException("无操作权限");
+            throw new BusinessException(Translator.toLocale("permission.denied"));
         }
         if (!(order.getStatus() == OrderStatus.CONFIRMED || order.getStatus() == SELLING)) {
-            throw new BusinessException("状态错误,请刷新后重试");
+            throw new BusinessException(Translator.toLocale("status.error"));
         }
         if (order.getStatus() == SELLING) {
             Delegation delegation = delegationRepo.findBySellerOrderId(orderId).orElse(null);
@@ -311,8 +341,8 @@ public class OrderService {
     }
 
     public void cancelShip(Long orderId) {
-        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
-        Product product = productRepo.findById(order.getProductId()).orElseThrow(new BusinessException("商品不存在"));
+        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
+        Product product = productRepo.findById(order.getProductId()).orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
         if (order.getStatus() == NOT_SHIPPED || order.getStatus() == SHIPPED) {
             product.setLocked(order.isLocked());
             product.setStatus(ProductStatus.IN_STOCK);
@@ -325,12 +355,12 @@ public class OrderService {
 
     public void shipOrder(Long userId, Long orderId, String logisticsType, String logisticsNo) {
         SecurityUtils.checkBanned();
-        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
 //        if (!order.getUserId().equals(userId)) {
-//            throw new BusinessException("无操作权限");
+//            throw new BusinessException(Translator.toLocale("permission.denied"));
 //        }
         if (order.getStatus() != OrderStatus.NOT_SHIPPED) {
-            throw new BusinessException("状态错误,请刷新后重试");
+            throw new BusinessException(Translator.toLocale("status.error"));
         }
         order.setStatus(OrderStatus.SHIPPED);
         order.setLogisticsType(logisticsType);
@@ -340,12 +370,12 @@ public class OrderService {
 
     public void receiveOrder(Long userId, Long orderId) {
         SecurityUtils.checkBanned();
-        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
         if (!order.getUserId().equals(userId)) {
-            throw new BusinessException("无操作权限");
+            throw new BusinessException(Translator.toLocale("permission.denied"));
         }
         if (order.getStatus() != OrderStatus.SHIPPED) {
-            throw new BusinessException("状态错误,请刷新后重试");
+            throw new BusinessException(Translator.toLocale("status.error"));
         }
         order.setStatus(OrderStatus.RECEIVED);
         order.setReceiveTime(LocalDateTime.now());
@@ -433,8 +463,8 @@ public class OrderService {
     }
 
     public ModelAndView payOrder(Long orderId) throws WriterException, IOException {
-        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
-        User fromUser = userRepo.findById(order.getFromUserId()).orElseThrow(new BusinessException("用户不存在"));
+        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
+        User fromUser = userRepo.findById(order.getFromUserId()).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         ModelAndView modelAndView = new ModelAndView("PayOrder");
         modelAndView.addObject("orderId", orderId);
         modelAndView.addObject("name", fromUser.getNickname());
@@ -500,25 +530,25 @@ public class OrderService {
     }
 
     public void setLocked(Long orderId, boolean locked) {
-        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
+        Order order = orderRepo.findById(orderId).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
         if (order.getStatus() != SELLING) {
             throw new BusinessException("出售中的订单才能进行此操作");
         }
         order.setLocked(locked);
         orderRepo.save(order);
-        Product product = productRepo.findById(order.getProductId()).orElseThrow(new BusinessException("商品不存在"));
+        Product product = productRepo.findById(order.getProductId()).orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
         product.setLocked(locked);
         productRepo.save(product);
     }
 
     public void del(Long id) {
-        Order order = orderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
+        Order order = orderRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
         order.setDel(true);
         orderRepo.save(order);
     }
 
     public void restore(Long id) {
-        Order order = orderRepo.findById(id).orElseThrow(new BusinessException("订单不存在"));
+        Order order = orderRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
         order.setDel(false);
         orderRepo.save(order);
     }

+ 8 - 7
src/main/java/com/izouma/awesomeAdmin/service/ProductService.java

@@ -8,6 +8,7 @@ import com.izouma.awesomeAdmin.enums.ProductStatus;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.*;
 import com.izouma.awesomeAdmin.utils.SecurityUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.hibernate.query.criteria.internal.OrderImpl;
@@ -43,13 +44,13 @@ public class ProductService {
             product.setReserve(true);
             return productRepo.save(product);
         }
-        User user = userRepo.findById(product.getUserId()).orElseThrow(new BusinessException("用户不存在"));
-        if (StringUtils.isEmpty(user.getAliAccount()) || StringUtils.isEmpty(user.getAliName())) {
-            throw new BusinessException("此用户未绑定支付宝账号");
-        }
-        if (StringUtils.isEmpty(user.getAlipayUserId())) {
-            throw new BusinessException("此用户未进行支付宝授权");
-        }
+        User user = userRepo.findById(product.getUserId()).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
+//        if (StringUtils.isEmpty(user.getAliAccount()) || StringUtils.isEmpty(user.getAliName())) {
+//            throw new BusinessException("此用户未绑定支付宝账号");
+//        }
+//        if (StringUtils.isEmpty(user.getAlipayUserId())) {
+//            throw new BusinessException("此用户未进行支付宝授权");
+//        }
         product.setReserve(false);
         product.setStatus(ProductStatus.IN_STOCK);
         product = productRepo.save(product);

+ 54 - 3
src/main/java/com/izouma/awesomeAdmin/service/SaleBatchService.java

@@ -1,14 +1,65 @@
 package com.izouma.awesomeAdmin.service;
 
 import com.izouma.awesomeAdmin.domain.SaleBatch;
+import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.SaleBatchRepo;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.support.CronTrigger;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledFuture;
+
 @Service
+@Slf4j
 public class SaleBatchService {
 
-    @Autowired
-    private SaleBatchRepo saleBatchRepo;
+    private final SaleBatchRepo     saleBatchRepo;
+    private final DelegationService delegationService;
+    private final TaskScheduler     taskScheduler;
+
+    private Map<String, ScheduledFuture<?>> taskMap = new HashMap<>();
+
+    public SaleBatchService(SaleBatchRepo saleBatchRepo, DelegationService delegationService, TaskScheduler taskScheduler) {
+        this.saleBatchRepo = saleBatchRepo;
+        this.delegationService = delegationService;
+        this.taskScheduler = taskScheduler;
+    }
+
+    public SaleBatch create(SaleBatch record) {
+        return saleBatchRepo.save(record);
+    }
+
+    public SaleBatch update(SaleBatch record) {
+        SaleBatch orig = saleBatchRepo.findById(record.getId())
+                .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
+        ObjUtils.merge(orig, record);
+        return saleBatchRepo.save(orig);
+    }
 
+    @PostConstruct
+    @Scheduled(cron = "1 0 0 * * ?")
+    public void schedule() {
+        for (SaleBatch saleBatch : saleBatchRepo.findAllByEnabledTrue()) {
+            if (saleBatch.getDelegateStart().isAfter(LocalTime.now())) {
+                taskScheduler.schedule(() -> {
+                    delegationService.active(saleBatch.getId());
+                }, Date.from(saleBatch.getDelegateStart().atDate(LocalDate.now())
+                        .atZone(ZoneId.systemDefault()).toInstant()));
+            }
+        }
+    }
 }

+ 41 - 0
src/main/java/com/izouma/awesomeAdmin/service/UserBalanceService.java

@@ -0,0 +1,41 @@
+package com.izouma.awesomeAdmin.service;
+
+import com.izouma.awesomeAdmin.domain.BalanceRecord;
+import com.izouma.awesomeAdmin.domain.UserBalance;
+import com.izouma.awesomeAdmin.exception.BusinessException;
+import com.izouma.awesomeAdmin.repo.BalanceRecordRepo;
+import com.izouma.awesomeAdmin.repo.UserBalanceRepo;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.math.BigDecimal;
+
+@Service
+@Slf4j
+@AllArgsConstructor
+public class UserBalanceService {
+    private UserBalanceRepo   userBalanceRepo;
+    private BalanceRecordRepo balanceRecordRepo;
+
+    @Transactional
+    public void modify(Long userId, BigDecimal amount, String remark) {
+        UserBalance userBalance = userBalanceRepo.findById(userId).orElse(new UserBalance(userId));
+        if (amount.compareTo(BigDecimal.ZERO) > 0) {
+            if (userBalance.getBalance().compareTo(amount) < 0) {
+                throw new BusinessException("余额不足");
+            }
+        }
+        userBalance.setLastBalance(userBalance.getBalance());
+        userBalance.setBalance(userBalance.getBalance().add(amount));
+        userBalanceRepo.save(userBalance);
+        balanceRecordRepo.save(BalanceRecord.builder()
+                .userId(userId)
+                .amount(amount)
+                .remark(remark)
+                .balance(userBalance.getBalance())
+                .lastBalance(userBalance.getLastBalance())
+                .build());
+    }
+}

+ 6 - 5
src/main/java/com/izouma/awesomeAdmin/service/UserService.java

@@ -26,6 +26,7 @@ import com.izouma.awesomeAdmin.security.JwtUserFactory;
 import com.izouma.awesomeAdmin.service.sms.SmsService;
 import com.izouma.awesomeAdmin.service.storage.StorageService;
 import com.izouma.awesomeAdmin.utils.ImageUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
@@ -208,7 +209,7 @@ public class UserService {
     }
 
     public String bindPhone(Long userId, String phone, String code) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         try {
             smsService.verify(phone, code);
         } catch (SmsService.SmsVerifyException e) {
@@ -243,7 +244,7 @@ public class UserService {
     }
 
     public String setPassword(Long userId, String password) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         user.setPassword(new BCryptPasswordEncoder().encode(password));
         user = userRepo.save(user);
         return jwtTokenUtil.generateToken(JwtUserFactory.create(user));
@@ -252,7 +253,7 @@ public class UserService {
     public String resetPassword(String phone, String code, String newPassword) {
         User user = userRepo.findByPhone(phone);
         if (user == null) {
-            throw new BusinessException("用户不存在");
+            throw new BusinessException(Translator.toLocale("user.not_found"));
         }
         try {
             smsService.verify(phone, code);
@@ -345,7 +346,7 @@ public class UserService {
     }
 
     public BufferedImage shareImg(Long userId) throws IOException, FontFormatException, WriterException {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
 
         Font sourceHanSansCN = Font.createFont(Font.TRUETYPE_FONT, this.getClass()
                 .getResourceAsStream("/font/source_han_sans_sc_medium.otf"));
@@ -381,7 +382,7 @@ public class UserService {
     }
 
     public Map<String, Object> relationships(Long userId) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         Map<String, Object> map = new HashMap<>();
         map.put("juniors", userRepo.findBySuperiorId(userId));
         if (user.getSuperiorId() != null) {

+ 6 - 5
src/main/java/com/izouma/awesomeAdmin/service/WithdrawApplyService.java

@@ -13,6 +13,7 @@ import com.izouma.awesomeAdmin.repo.CommissionRecordRepo;
 import com.izouma.awesomeAdmin.repo.OrderRepo;
 import com.izouma.awesomeAdmin.repo.ProductRepo;
 import com.izouma.awesomeAdmin.repo.WithdrawApplyRepo;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -60,11 +61,11 @@ public class WithdrawApplyService {
     }
 
     public WithdrawApply updateStatus(Long id, WithdrawStatus status) {
-        WithdrawApply withdrawApply = withdrawApplyRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        WithdrawApply withdrawApply = withdrawApplyRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         switch (status) {
             case WAIT_TRANSFER:
                 if (withdrawApply.getStatus() != WithdrawStatus.PENDING) {
-                    throw new BusinessException("状态错误");
+                    throw new BusinessException(Translator.toLocale("status.error"));
                 }
                 for (CommissionRecord commissionRecord : withdrawApply.getCommissionRecords()) {
                     commissionRecord.setStatus(CommissionStatus.WAIT_TRANSFER);
@@ -72,7 +73,7 @@ public class WithdrawApplyService {
                 break;
             case TRANSFERRED:
                 if (withdrawApply.getStatus() != WithdrawStatus.WAIT_TRANSFER) {
-                    throw new BusinessException("状态错误");
+                    throw new BusinessException(Translator.toLocale("status.error"));
                 }
                 for (CommissionRecord commissionRecord : withdrawApply.getCommissionRecords()) {
                     commissionRecord.setStatus(CommissionStatus.TRANSFERRED);
@@ -81,7 +82,7 @@ public class WithdrawApplyService {
                 break;
             case CANCELED:
                 if (withdrawApply.getStatus() != WithdrawStatus.PENDING) {
-                    throw new BusinessException("状态错误");
+                    throw new BusinessException(Translator.toLocale("status.error"));
                 }
                 for (CommissionRecord commissionRecord : withdrawApply.getCommissionRecords()) {
                     commissionRecord.setStatus(CommissionStatus.CHECKED);
@@ -96,7 +97,7 @@ public class WithdrawApplyService {
 
     public WithdrawApplyDetail detail(Long withdrawApplyId) {
         WithdrawApply withdrawApply = withdrawApplyRepo.findById(withdrawApplyId)
-                .orElseThrow(new BusinessException("无记录"));
+                .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         List<CommissionOrder> commissionOrders = new ArrayList<>();
         for (CommissionRecord commissionRecord : withdrawApply.getCommissionRecords()) {
             Order order = orderRepo.findById(commissionRecord.getOrderId()).orElse(null);

+ 9 - 8
src/main/java/com/izouma/awesomeAdmin/service/WorkOrderService.java

@@ -11,6 +11,7 @@ import com.izouma.awesomeAdmin.repo.OrderRepo;
 import com.izouma.awesomeAdmin.repo.UserRepo;
 import com.izouma.awesomeAdmin.repo.WorkOrderRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,11 +28,11 @@ public class WorkOrderService {
 
     public WorkOrder save(WorkOrder record) {
         if (record.getId() != null) {
-            WorkOrder orig = workOrderRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            WorkOrder orig = workOrderRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return workOrderRepo.save(orig);
         }
-        Order order = orderRepo.findById(record.getOrderId()).orElseThrow(new BusinessException("订单不存在"));
+        Order order = orderRepo.findById(record.getOrderId()).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
         User user = null;
         if (order.getToUserId() != null) {
             user = userRepo.findById(order.getToUserId()).orElse(null);
@@ -46,10 +47,10 @@ public class WorkOrderService {
     }
 
     public void finish(Long id, String action) {
-        WorkOrder workOrder = workOrderRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        WorkOrder workOrder = workOrderRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
 
         if ("取消订单".equals(action)) {
-            Order order = orderRepo.findById(workOrder.getOrderId()).orElseThrow(new BusinessException("订单不存在"));
+            Order order = orderRepo.findById(workOrder.getOrderId()).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
             if (order.getStatus() == OrderStatus.CANCELED) {
             } else if (order.getStatus() == OrderStatus.NOT_PAID
                     || order.getStatus() == OrderStatus.NOT_CONFIRMED
@@ -59,16 +60,16 @@ public class WorkOrderService {
                     || order.getStatus() == OrderStatus.SOLD_NOT_CONFIRMED
                     || order.getStatus() == OrderStatus.SOLD) {
                 Delegation delegation = delegationRepo.findBySellerOrderId(workOrder.getOrderId())
-                        .orElseThrow(new BusinessException("无委托记录"));
+                        .orElseThrow(new BusinessException(Translator.toLocale("delegation.not_found")));
                 orderService.cancelOrder(delegation.getBuyerOrderId(), false, false);
             } else {
                 throw new BusinessException("订单已委托,无法取消");
             }
         } else if ("确认订单".equals(action)) {
-            Order order = orderRepo.findById(workOrder.getOrderId()).orElseThrow(new BusinessException("订单不存在"));
+            Order order = orderRepo.findById(workOrder.getOrderId()).orElseThrow(new BusinessException(Translator.toLocale("order.not_found")));
             if (order.getStatus() == OrderStatus.NOT_PAID || order.getStatus() == OrderStatus.NOT_CONFIRMED) {
                 Delegation delegation = delegationRepo.findByBuyerOrderId(workOrder.getOrderId())
-                        .orElseThrow(new BusinessException("无委托记录"));
+                        .orElseThrow(new BusinessException(Translator.toLocale("delegation.not_found")));
                 if (order.getStatus() == OrderStatus.NOT_PAID) {
                     orderService.confirmPayment(order.getUserId(), order.getId(), false);
                 }
@@ -77,7 +78,7 @@ public class WorkOrderService {
                     .getStatus() == OrderStatus.SOLD_NOT_CONFIRMED) {
                 if (order.getStatus() == OrderStatus.SOLD_NOT_PAID) {
                     Delegation delegation = delegationRepo.findBySellerOrderId(workOrder.getOrderId())
-                            .orElseThrow(new BusinessException("无委托记录"));
+                            .orElseThrow(new BusinessException(Translator.toLocale("delegation.not_found")));
                     orderService.confirmPayment(null, delegation.getBuyerOrderId(), false);
                 }
                 orderService.confirmReceipt(null, workOrder.getOrderId(), false);

+ 24 - 0
src/main/java/com/izouma/awesomeAdmin/utils/Translator.java

@@ -0,0 +1,24 @@
+package com.izouma.awesomeAdmin.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.context.support.ResourceBundleMessageSource;
+import org.springframework.stereotype.Component;
+
+import java.util.Locale;
+
+@Component
+public class Translator {
+
+    private static ResourceBundleMessageSource messageSource;
+
+    @Autowired
+    Translator(ResourceBundleMessageSource messageSource) {
+        Translator.messageSource = messageSource;
+    }
+
+    public static String toLocale(String msgCode) {
+        Locale locale = LocaleContextHolder.getLocale();
+        return messageSource.getMessage(msgCode, null, locale);
+    }
+}

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/AddressController.java

@@ -6,6 +6,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.AddressRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -31,7 +32,7 @@ public class AddressController extends BaseController {
     @PostMapping("/save")
     public Address save(@RequestBody Address record) {
         if (record.getId() != null) {
-            Address orig = addressRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            Address orig = addressRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             record = addressRepo.save(orig);
         } else {
@@ -52,7 +53,7 @@ public class AddressController extends BaseController {
 
     @GetMapping("/get/{id}")
     public Address get(@PathVariable Long id) {
-        return addressRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return addressRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 2 - 1
src/main/java/com/izouma/awesomeAdmin/web/AlipayController.java

@@ -15,6 +15,7 @@ import com.izouma.awesomeAdmin.domain.User;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.UserRepo;
 import com.izouma.awesomeAdmin.service.DelegationService;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.MapUtils;
@@ -133,7 +134,7 @@ public class AlipayController {
         log.info("tokens {}", JSON.toJSONString(response.getTokens()));
 
         if (!response.getTokens().isEmpty()) {
-            User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+            User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
             user.setAlipayUserId(response.getTokens().get(0).getUserId());
             userRepo.save(user);
         }

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/BannerController.java

@@ -5,6 +5,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.BannerRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -31,7 +32,7 @@ public class BannerController extends BaseController {
     @PostMapping("/save")
     public Banner save(@RequestBody Banner record) {
         if (record.getId() != null) {
-            Banner orig = bannerRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            Banner orig = bannerRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return bannerRepo.save(orig);
         }
@@ -46,7 +47,7 @@ public class BannerController extends BaseController {
 
     @GetMapping("/get/{id}")
     public Banner get(@PathVariable Long id) {
-        return bannerRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return bannerRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/CategoryController.java

@@ -5,6 +5,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.CategoryRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -31,7 +32,7 @@ public class CategoryController extends BaseController {
     @PostMapping("/save")
     public Category save(@RequestBody Category record) {
         if (record.getId() != null) {
-            Category orig = categoryRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            Category orig = categoryRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return categoryRepo.save(orig);
         }
@@ -46,7 +47,7 @@ public class CategoryController extends BaseController {
 
     @GetMapping("/get/{id}")
     public Category get(@PathVariable Long id) {
-        return categoryRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return categoryRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/CommissionRecordController.java

@@ -5,6 +5,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.CommissionRecordRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -31,7 +32,7 @@ public class CommissionRecordController extends BaseController {
     @PostMapping("/save")
     public CommissionRecord save(@RequestBody CommissionRecord record) {
         if (record.getId() != null) {
-            CommissionRecord orig = commissionRecordRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            CommissionRecord orig = commissionRecordRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return commissionRecordRepo.save(orig);
         }
@@ -47,7 +48,7 @@ public class CommissionRecordController extends BaseController {
 
     @GetMapping("/get/{id}")
     public CommissionRecord get(@PathVariable Long id) {
-        return commissionRecordRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return commissionRecordRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/DelegationController.java

@@ -6,6 +6,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.DelegationRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
@@ -31,7 +32,7 @@ public class DelegationController extends BaseController {
     @PostMapping("/save")
     public Delegation save(@RequestBody Delegation record) {
         if (record.getId() != null) {
-            Delegation orig = delegationRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            Delegation orig = delegationRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return delegationRepo.save(orig);
         }
@@ -56,7 +57,7 @@ public class DelegationController extends BaseController {
 
     @GetMapping("/get/{id}")
     public Delegation get(@PathVariable Long id) {
-        return delegationRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return delegationRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/DemoProductController.java

@@ -6,6 +6,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.DemoProductRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -32,7 +33,7 @@ public class DemoProductController extends BaseController {
     @PostMapping("/save")
     public DemoProduct save(@RequestBody DemoProduct record) {
         if (record.getId() != null) {
-            DemoProduct orig = demoProductRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            DemoProduct orig = demoProductRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return demoProductRepo.save(orig);
         }
@@ -48,7 +49,7 @@ public class DemoProductController extends BaseController {
 
     @GetMapping("/get/{id}")
     public DemoProduct get(@PathVariable Long id) {
-        return demoProductRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return demoProductRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 2 - 1
src/main/java/com/izouma/awesomeAdmin/web/OrderController.java

@@ -10,6 +10,7 @@ import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.OrderRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
 import com.izouma.awesomeAdmin.utils.SecurityUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -36,7 +37,7 @@ public class OrderController extends BaseController {
     @PostMapping("/save")
     public Order save(@RequestBody Order record) {
         if (record.getId() != null) {
-            Order orig = orderRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            Order orig = orderRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return orderRepo.save(orig);
         }

+ 14 - 0
src/main/java/com/izouma/awesomeAdmin/web/PayDelegationController.java

@@ -2,10 +2,13 @@ package com.izouma.awesomeAdmin.web;
 
 import com.alibaba.fastjson.JSONObject;
 import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
+import com.izouma.awesomeAdmin.domain.Delegation;
 import com.izouma.awesomeAdmin.service.DelegationService;
+import com.izouma.awesomeAdmin.utils.Translator;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.i18n.LocaleContextHolder;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -41,6 +44,11 @@ public class PayDelegationController {
         return delegationService.payDelegationThird(userId, orderId, riseRate, payType);
     }
 
+    @RequestMapping(value = "/balance", method = RequestMethod.GET)
+    public Delegation payDelegationBalance(@RequestParam Long userId, @RequestParam Long orderId, @RequestParam BigDecimal riseRate) {
+        return delegationService.payDelegationBalance(userId, orderId, riseRate);
+    }
+
     @RequestMapping(value = "/thirdNotify", method = RequestMethod.POST)
     @ResponseBody
     public String thirdNotify(ThirdNotifyData notifyData) throws UnsupportedEncodingException {
@@ -61,6 +69,12 @@ public class PayDelegationController {
         return "ThirdCallback";
     }
 
+    @RequestMapping("/test")
+    @ResponseBody
+    public String test() {
+        return Translator.toLocale("hello");
+    }
+
     @Data
     static class ThirdNotifyData {
         private String version;

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/ProductController.java

@@ -7,6 +7,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.ProductRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
@@ -40,7 +41,7 @@ public class ProductController extends BaseController {
     @PostMapping("/save")
     public Product save(@RequestBody Product record) {
         if (record.getId() != null) {
-            Product orig = productRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            Product orig = productRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return productRepo.save(orig);
         }
@@ -56,7 +57,7 @@ public class ProductController extends BaseController {
 
     @GetMapping("/get/{id}")
     public Product get(@PathVariable Long id) {
-        return productRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return productRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 7
src/main/java/com/izouma/awesomeAdmin/web/SaleBatchController.java

@@ -5,6 +5,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.SaleBatchRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -30,12 +31,7 @@ public class SaleBatchController extends BaseController {
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     public SaleBatch save(@RequestBody SaleBatch record) {
-        if (record.getId() != null) {
-            SaleBatch orig = saleBatchRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
-            ObjUtils.merge(orig, record);
-            return saleBatchRepo.save(orig);
-        }
-        return saleBatchRepo.save(record);
+        return saleBatchService.save(record);
     }
 
 
@@ -47,7 +43,7 @@ public class SaleBatchController extends BaseController {
 
     @GetMapping("/get/{id}")
     public SaleBatch get(@PathVariable Long id) {
-        return saleBatchRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return saleBatchRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/SubAccountController.java

@@ -5,6 +5,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.SubAccountRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -31,7 +32,7 @@ public class SubAccountController extends BaseController {
     @PostMapping("/save")
     public SubAccount save(@RequestBody SubAccount record) {
         if (record.getId() != null) {
-            SubAccount orig = subAccountRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            SubAccount orig = subAccountRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return subAccountRepo.save(orig);
         }
@@ -47,7 +48,7 @@ public class SubAccountController extends BaseController {
 
     @GetMapping("/get/{id}")
     public SubAccount get(@PathVariable Long id) {
-        return subAccountRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return subAccountRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 5
src/main/java/com/izouma/awesomeAdmin/web/SysConfigController.java

@@ -7,6 +7,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.SysConfigRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,15 +26,12 @@ import java.util.List;
 public class SysConfigController extends BaseController {
     private SysConfigService  sysConfigService;
     private SysConfigRepo     sysConfigRepo;
-    private DelegationService delegationService;
 
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     @CacheEvict(value = {"SysConfigServiceGetBigDecimal", "SysConfigServiceGetTime"}, allEntries = true)
     public SysConfig save(@RequestBody SysConfig record) {
-        SysConfig config = sysConfigRepo.saveAndFlush(record);
-        delegationService.resetSchedule();
-        return config;
+        return sysConfigRepo.saveAndFlush(record);
     }
 
 
@@ -44,7 +42,7 @@ public class SysConfigController extends BaseController {
 
     @GetMapping("/get/{id}")
     public SysConfig get(@PathVariable String id) {
-        return sysConfigRepo.findByName(id).orElseThrow(new BusinessException("无记录"));
+        return sysConfigRepo.findByName(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/UserCollectionController.java

@@ -8,6 +8,7 @@ import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.UserCollectionRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
 import com.izouma.awesomeAdmin.utils.SecurityUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -35,7 +36,7 @@ public class UserCollectionController extends BaseController {
     @PostMapping("/save")
     public UserCollection save(@RequestBody UserCollection record) {
         if (record.getId() != null) {
-            UserCollection orig = userCollectionRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            UserCollection orig = userCollectionRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return userCollectionRepo.save(orig);
         }
@@ -51,7 +52,7 @@ public class UserCollectionController extends BaseController {
 
     @GetMapping("/get/{id}")
     public UserCollection get(@PathVariable Long id) {
-        return userCollectionRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return userCollectionRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 12 - 11
src/main/java/com/izouma/awesomeAdmin/web/UserController.java

@@ -11,6 +11,7 @@ import com.izouma.awesomeAdmin.security.JwtUserFactory;
 import com.izouma.awesomeAdmin.service.UserService;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
 import com.izouma.awesomeAdmin.utils.SecurityUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -58,7 +59,7 @@ public class UserController extends BaseController {
     @PostMapping("/save")
     public User save(@RequestBody User user, @RequestParam(required = false) String initialPassword) {
         if (user.getId() != null) {
-            User orig = userRepo.findById(user.getId()).orElseThrow(new BusinessException("无记录"));
+            User orig = userRepo.findById(user.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, user);
             return userRepo.save(orig);
         }
@@ -77,7 +78,7 @@ public class UserController extends BaseController {
     @PostMapping("/my/update")
     public User updateMy(@RequestBody User user) {
         if (!SecurityUtils.getAuthenticatedUser().getId().equals(user.getId())) {
-            throw new BusinessException("无操作权限");
+            throw new BusinessException(Translator.toLocale("permission.denied"));
         }
         return userRepo.save(user);
     }
@@ -85,14 +86,14 @@ public class UserController extends BaseController {
     @GetMapping("/my")
     public User my() {
         return userRepo.findById(SecurityUtils.getAuthenticatedUser().getId())
-                .orElseThrow(new BusinessException("用户不存在"));
+                .orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
     }
 
     @PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/myAdmin")
     public User myAdmin() {
         return userRepo.findById(SecurityUtils.getAuthenticatedUser().getId())
-                .orElseThrow(new BusinessException("用户不存在"));
+                .orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
     }
 
     @PreAuthorize("hasRole('ADMIN')")
@@ -126,7 +127,7 @@ public class UserController extends BaseController {
     //    @PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/get/{id}")
     public User get(@PathVariable Long id) {
-        return userRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return userRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @GetMapping("/excel")
@@ -194,7 +195,7 @@ public class UserController extends BaseController {
     @PostMapping("/bindAlipay")
     public void bindAlipay(@RequestParam String account, @RequestParam String name) {
         User user = userRepo.findById(SecurityUtils.getAuthenticatedUser().getId())
-                .orElseThrow(new BusinessException("用户不存在"));
+                .orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         user.setAliAccount(account);
         user.setAliName(name);
         userRepo.save(user);
@@ -216,7 +217,7 @@ public class UserController extends BaseController {
     @PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/clearAliAuth")
     public void clearAliAuth(@RequestParam Long userId) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         user.setAliAccount(null);
         user.setAliName(null);
         user.setAlipayUserId(null);
@@ -226,7 +227,7 @@ public class UserController extends BaseController {
     @PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/setSuperior")
     public void clearAliAuth(@RequestParam Long userId, @RequestParam Long superiorId) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         user.setSuperiorId(superiorId);
         userRepo.save(user);
     }
@@ -234,7 +235,7 @@ public class UserController extends BaseController {
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/ban")
     public void ban(@RequestParam Long userId) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         user.setBanned(true);
         userRepo.save(user);
     }
@@ -242,7 +243,7 @@ public class UserController extends BaseController {
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/unban")
     public void unban(@RequestParam Long userId) {
-        User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException(Translator.toLocale("user.not_found")));
         user.setBanned(false);
         userRepo.save(user);
     }
@@ -257,6 +258,6 @@ public class UserController extends BaseController {
     @GetMapping("/getToken/{userId}")
     public String getToken(@PathVariable Long userId) {
         return jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(userId)
-                .orElseThrow(new BusinessException("用户不存在"))));
+                .orElseThrow(new BusinessException(Translator.toLocale("user.not_found")))));
     }
 }

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/UserMoneyRecordController.java

@@ -5,6 +5,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.UserMoneyRecordRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -31,7 +32,7 @@ public class UserMoneyRecordController extends BaseController {
     @PostMapping("/save")
     public UserMoneyRecord save(@RequestBody UserMoneyRecord record) {
         if (record.getId() != null) {
-            UserMoneyRecord orig = userMoneyRecordRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            UserMoneyRecord orig = userMoneyRecordRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return userMoneyRecordRepo.save(orig);
         }
@@ -47,7 +48,7 @@ public class UserMoneyRecordController extends BaseController {
 
     @GetMapping("/get/{id}")
     public UserMoneyRecord get(@PathVariable Long id) {
-        return userMoneyRecordRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return userMoneyRecordRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 3 - 2
src/main/java/com/izouma/awesomeAdmin/web/WithdrawApplyController.java

@@ -9,6 +9,7 @@ import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.WithdrawApplyRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
 import com.izouma.awesomeAdmin.utils.SecurityUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,7 +37,7 @@ public class WithdrawApplyController extends BaseController {
     @PostMapping("/save")
     public WithdrawApply save(@RequestBody WithdrawApply record) {
         if (record.getId() != null) {
-            WithdrawApply orig = withdrawApplyRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            WithdrawApply orig = withdrawApplyRepo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return withdrawApplyRepo.save(orig);
         }
@@ -52,7 +53,7 @@ public class WithdrawApplyController extends BaseController {
 
     @GetMapping("/get/{id}")
     public WithdrawApply get(@PathVariable Long id) {
-        return withdrawApplyRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return withdrawApplyRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 2 - 1
src/main/java/com/izouma/awesomeAdmin/web/WorkOrderController.java

@@ -6,6 +6,7 @@ import com.izouma.awesomeAdmin.dto.PageQuery;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.repo.WorkOrderRepo;
 import com.izouma.awesomeAdmin.utils.ObjUtils;
+import com.izouma.awesomeAdmin.utils.Translator;
 import com.izouma.awesomeAdmin.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,7 +39,7 @@ public class WorkOrderController extends BaseController {
 
     @GetMapping("/get/{id}")
     public WorkOrder get(@PathVariable Long id) {
-        return workOrderRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return workOrderRepo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")

+ 2 - 0
src/main/resources/messages.properties

@@ -0,0 +1,2 @@
+hello=hello
+permission.denied=permission denied

+ 5 - 0
src/main/resources/messages_en.properties

@@ -0,0 +1,5 @@
+hello=hello
+permission.denied=permission denied
+record.not_found=record not_found
+status.error=status error
+product.not_found=product not_found

+ 12 - 0
src/main/resources/messages_zh_CN.properties

@@ -0,0 +1,12 @@
+hello=你好
+permission.denied=权限不足
+record.not_found=没有记录
+status.error=状态错误,请刷新后重试
+product.not_found=商品不存在
+order.not_found=订单不存在
+order.seller.not_found=卖家订单不存在
+order.buyer.not_found=买家订单不存在
+
+delegation.not_found=无委托记录
+
+user.not_found=用户不存在

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

@@ -40,7 +40,7 @@ public class ${model.className}Controller extends BaseController {
     @PostMapping("/save")
     public ${model.className} save(@RequestBody ${model.className} record) {
         if (record.getId() != null) {
-            ${model.className} orig = ${model.className?uncap_first}Repo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ${model.className} orig = ${model.className?uncap_first}Repo.findById(record.getId()).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
             ObjUtils.merge(orig, record);
             return ${model.className?uncap_first}Repo.save(orig);
         }
@@ -56,7 +56,7 @@ public class ${model.className}Controller extends BaseController {
 
     @GetMapping("/get/{id}")
     public ${model.className} get(@PathVariable Long id) {
-        return ${model.className?uncap_first}Repo.findById(id).orElseThrow(new BusinessException("无记录"));
+        return ${model.className?uncap_first}Repo.findById(id).orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
     }
 
     @PostMapping("/del/{id}")