yexianchao 3 주 전
부모
커밋
9a45f8464c
17개의 변경된 파일926개의 추가작업 그리고 7개의 파일을 삭제
  1. 198 0
      crm-manager/src/main/java/com/crm/manager/controller/FinanceRateController.java
  2. 17 0
      crm-manager/src/main/java/com/crm/manager/dao/mapper/FinanceRateMapper.java
  3. 30 0
      crm-manager/src/main/java/com/crm/manager/dao/repository/FinanceRateRepository.java
  4. 84 0
      crm-manager/src/main/java/com/crm/manager/service/FinanceRateService.java
  5. 325 0
      crm-manager/src/main/java/com/crm/manager/service/impl/FinanceRateServiceImpl.java
  6. 59 0
      crm-manager/src/main/resources/mapper/FinanceRateMapper.xml
  7. 32 0
      crm-model/src/main/java/com/crm/rely/backend/model/dto/finance/rate/FinanceRateSearchDto.java
  8. 33 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateAddEntity.java
  9. 23 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateBatchUpdateEntity.java
  10. 14 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateDeleteEntity.java
  11. 19 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateEntity.java
  12. 19 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateSearchListEntity.java
  13. 34 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateUpdateEntity.java
  14. 26 0
      crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateUpdatesEntity.java
  15. 3 2
      crm-pay/src/main/java/com/crm/pay/service/impl/FinanceDepositServiceImpl.java
  16. 7 2
      crm-pay/src/main/java/com/crm/pay/service/impl/FinanceWithdrawServiceImpl.java
  17. 3 3
      crm-pay/src/main/java/com/crm/pay/service/impl/pay/XfgPayServiceImpl.java

+ 198 - 0
crm-manager/src/main/java/com/crm/manager/controller/FinanceRateController.java

@@ -0,0 +1,198 @@
+package com.crm.manager.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.crm.manager.service.FinanceRateService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.core.entity.base.SingleLongEntity;
+import com.crm.rely.backend.core.entity.system.config.SendUpdateEmailCodeEntity;
+import com.crm.rely.backend.model.dto.finance.rate.FinanceRateSearchDto;
+import com.crm.rely.backend.model.entity.finance.rate.*;
+import com.crm.rely.backend.model.entity.user.info.UserInfoEntity;
+import com.crm.rely.backend.util.GetIpAndMac;
+import com.crm.rely.backend.util.GoogleAuthenticatorUtil;
+import com.crm.rely.backend.util.HttpUtil;
+import org.jsoup.Connection;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.*;
+
+/**
+ * @author houn
+ */
+@RestController
+@RequestMapping("/finance/rate")
+public class FinanceRateController {
+
+    @Autowired
+    private FinanceRateService financeRateService;
+
+    /**
+     * 添加汇率
+     *
+     * @param entity
+     * @return
+     */
+    @PostMapping("/add")
+    public BaseResultDto addRate(@RequestBody @Validated FinanceRateAddEntity entity, UserInfoEntity infoEntity) throws Exception {
+//        entity.setEmail(infoEntity.getIbInfo().getEmail());
+        /*if (!GoogleAuthenticatorUtil.verifyCode(infoEntity.getSecretKey(), entity.getGaCode())) {
+            return BaseResultDto.error(Constants.GOOGLE_CAPTCHA_ERROR);
+        }*/
+        financeRateService.add(entity);
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 修改汇率
+     *
+     * @param entity
+     * @return
+     */
+    @PostMapping("/update")
+    public BaseResultDto updateRate(@RequestBody @Validated FinanceRateUpdateEntity entity, UserInfoEntity infoEntity) throws Exception {
+//        entity.setEmail(infoEntity.getIbInfo().getEmail());
+       /* if (!GoogleAuthenticatorUtil.verifyCode(infoEntity.getSecretKey(), entity.getGaCode())) {
+            return BaseResultDto.error(Constants.GOOGLE_CAPTCHA_ERROR);
+        }*/
+        financeRateService.update(entity);
+        return BaseResultDto.success();
+    }
+
+    @PostMapping("/batch/update")
+    public BaseResultDto updateBatchRate(@RequestBody @Validated FinanceRateBatchUpdateEntity entity, UserInfoEntity infoEntity) throws Exception {
+        if (entity == null) {
+            return BaseResultDto.error(Constants.SYSTEM_ERROR);
+        }
+        /*if (!GoogleAuthenticatorUtil.verifyCode(infoEntity.getSecretKey(), entity.getGaCode())) {
+            return BaseResultDto.error(Constants.GOOGLE_CAPTCHA_ERROR);
+        }*/
+        List<FinanceRateUpdateEntity> entitys = null;
+        if (entity.getData() != null) {
+            entitys = new ArrayList<>(entity.getData().size());
+
+            for (FinanceRateUpdatesEntity financeRateUpdatesEntity :
+                    entity.getData()) {
+                FinanceRateUpdateEntity financeRateUpdateEntity = new FinanceRateUpdateEntity();
+                BeanUtils.copyProperties(financeRateUpdatesEntity, financeRateUpdateEntity);
+                financeRateUpdateEntity.setType(entity.getType());
+                entitys.add(financeRateUpdateEntity);
+            }
+        }
+//        entity.setEmail(infoEntity.getIbInfo().getEmail());
+        financeRateService.save(entity, entitys);
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 删除汇率
+     *
+     * @param entity
+     * @return
+     */
+    @PostMapping("/delete")
+    public BaseResultDto deleteRate(@RequestBody @Validated FinanceRateDeleteEntity entity, UserInfoEntity infoEntity) throws Exception {
+//        entity.setEmail(infoEntity.getIbInfo().getEmail());
+        /*if (!GoogleAuthenticatorUtil.verifyCode(infoEntity.getSecretKey(), entity.getGaCode())) {
+            return BaseResultDto.error(Constants.GOOGLE_CAPTCHA_ERROR);
+        }*/
+        financeRateService.delete(entity);
+        return BaseResultDto.success();
+    }
+
+    /**
+     * 查询汇率
+     *
+     * @param entity
+     * @return
+     */
+    @PostMapping("/searcher/list")
+    public BaseResultDto searcherListRate(@RequestBody @Validated FinanceRateSearchListEntity entity) throws Exception {
+        BaseResultDto resultDto = financeRateService.searchList(entity);
+        return resultDto;
+    }
+
+    /**
+     * 单个查看汇率
+     *
+     * @param entity
+     * @return
+     */
+    @PostMapping("/searcher/single")
+    public BaseResultDto searcherSingleRate(@RequestBody @Validated SingleLongEntity entity) throws Exception {
+        FinanceRateSearchDto financeRateSearchDto = financeRateService.searchSingle(entity.getId());
+        return BaseResultDto.success(financeRateSearchDto);
+    }
+
+    @PostMapping("/add/send/code")
+    public BaseResultDto addChannelSendEmailCode(UserInfoEntity infoEntity) throws Exception {
+
+        return sendEmailCode(infoEntity);
+    }
+
+    @PostMapping("/update/send/code")
+    public BaseResultDto updateUpdateSendEmailCode(UserInfoEntity infoEntity) throws Exception {
+
+        return sendEmailCode(infoEntity);
+    }
+    @PostMapping("/batch/update/send/code")
+    public BaseResultDto updateBatchUpdateSendEmailCode(UserInfoEntity infoEntity) throws Exception {
+
+        return sendEmailCode(infoEntity);
+    }
+
+    @PostMapping("/delete/send/code")
+    public BaseResultDto deleteChannelSendEmailCode(UserInfoEntity infoEntity) throws Exception {
+
+        return sendEmailCode(infoEntity);
+    }
+
+
+    @RequestMapping("/convert")
+    public BaseResultDto convert(@RequestBody @Validated FinanceRateEntity entity) throws Exception {
+
+        String host = "https://tysjhlcx.market.alicloudapi.com";
+        String path = "/exchange_rate/convert";
+        String appcode = "e2e11e758e2c4a239456dead26feb847";
+        Map<String, String> headers = new HashMap<String, String>();
+        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
+        headers.put("Authorization", "APPCODE " + appcode);
+        Map<String, String> querys = new HashMap<String, String>();
+        querys.put("fromCode", entity.getTransformCurrency());
+        querys.put("toCode", entity.getCurrency());
+        querys.put("money", "1");
+
+
+        try {
+
+            Connection.Response response = HttpUtil.get(host + path, headers, querys);
+            return BaseResultDto.success(JSON.parseObject(response.body()).get("data"));
+        } catch (Exception e) {
+            e.printStackTrace();
+            return BaseResultDto.error();
+        }
+    }
+
+
+    public BaseResultDto sendEmailCode(UserInfoEntity infoEntity) throws Exception {
+        if (infoEntity == null) {
+            return BaseResultDto.error(Constants.SYSTEM_ERROR);
+        }
+        SendUpdateEmailCodeEntity emailCodeEntity = new SendUpdateEmailCodeEntity();
+
+        emailCodeEntity.setEmail(infoEntity.getEmail());
+        emailCodeEntity.setTime(new Date());
+        emailCodeEntity.setUser(infoEntity.getId());
+        emailCodeEntity.setIp(GetIpAndMac.getIp());
+
+        financeRateService.sendEmailCode(emailCodeEntity);
+        return BaseResultDto.success(Constants.SEND_SUCCESS);
+    }
+
+}

+ 17 - 0
crm-manager/src/main/java/com/crm/manager/dao/mapper/FinanceRateMapper.java

@@ -0,0 +1,17 @@
+package com.crm.manager.dao.mapper;
+
+import com.crm.rely.backend.model.entity.finance.rate.FinanceRateSearchListEntity;
+import com.crm.rely.backend.model.pojo.table.FinanceRateTable;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface FinanceRateMapper {
+
+    Integer countList(FinanceRateSearchListEntity entity);
+
+    List<FinanceRateTable> pageList(FinanceRateSearchListEntity entity);
+
+    List<FinanceRateTable> searchList(FinanceRateSearchListEntity entity);
+}

+ 30 - 0
crm-manager/src/main/java/com/crm/manager/dao/repository/FinanceRateRepository.java

@@ -0,0 +1,30 @@
+package com.crm.manager.dao.repository;
+
+import com.crm.rely.backend.dao.repository.BaseRepository;
+import com.crm.rely.backend.model.pojo.table.FinanceRateTable;
+import org.springframework.data.jpa.repository.Lock;
+import org.springframework.stereotype.Repository;
+
+import javax.persistence.LockModeType;
+import java.util.List;
+
+/**
+ * @author houn
+ */
+@Repository
+public interface FinanceRateRepository extends BaseRepository<FinanceRateTable> {
+    @Lock(LockModeType.PESSIMISTIC_WRITE)
+    FinanceRateTable findFirstById(Long id);
+
+    @Lock(LockModeType.PESSIMISTIC_WRITE)
+    List<FinanceRateTable> findAllByIdIn(List<Long> ids);
+
+    List<FinanceRateTable> findAllByType(Integer type);
+
+    boolean existsByCurrencyAndTransformCurrencyAndType(String currency, String transformCurrency, Integer type);
+
+    FinanceRateTable getFirstById(Long id);
+
+    FinanceRateTable getByTypeAndCurrencyAndTransformCurrency(Integer type, String currency, String transformCurrency);
+
+}

+ 84 - 0
crm-manager/src/main/java/com/crm/manager/service/FinanceRateService.java

@@ -0,0 +1,84 @@
+package com.crm.manager.service;
+
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.core.entity.system.config.SendUpdateEmailCodeEntity;
+import com.crm.rely.backend.core.exception.ServiceException;
+import com.crm.rely.backend.model.dto.finance.rate.FinanceRateSearchDto;
+import com.crm.rely.backend.model.entity.finance.rate.*;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public interface FinanceRateService {
+
+    /**
+     * 添加配置
+     *
+     * @param entity
+     * @throws ServiceException
+     */
+    void add(FinanceRateAddEntity entity) throws ServiceException;
+
+    /**
+     * 修改配置
+     *
+     * @param entity
+     * @throws ServiceException
+     */
+    void update(FinanceRateUpdateEntity entity) throws ServiceException;
+
+    void save(FinanceRateBatchUpdateEntity entity, List<FinanceRateUpdateEntity> entitys) throws ServiceException;
+
+    /**
+     * 删除配置
+     *
+     * @param entity
+     * @throws ServiceException
+     */
+    void delete(FinanceRateDeleteEntity entity) throws ServiceException;
+
+    /**
+     * 根据条件查询配置
+     *
+     * @param entity
+     * @return
+     * @throws ServiceException
+     */
+//    ResultWithPagerDto<FinanceRateSearchDto> searchPageList(FinanceRateSearchListEntity entity) throws ServiceException;
+    BaseResultDto searchList(FinanceRateSearchListEntity entity) throws ServiceException;
+
+    /**
+     * 根据条件 单个获取配置信息
+     *
+     * @param id
+     * @return
+     * @throws ServiceException
+     */
+    FinanceRateSearchDto searchSingle(Long id) throws ServiceException;
+
+    void sendEmailCode(SendUpdateEmailCodeEntity entity) throws ServiceException;
+
+    /**
+     * 获取汇率
+     *
+     * @param currency
+     * @param transformCurrency
+     * @param type
+     * @return
+     * @throws ServiceException
+     */
+    BigDecimal getRate(String currency, String transformCurrency, Integer type) throws ServiceException;
+
+    /**
+     * 获取汇率转换货币金额
+     *
+     * @param currency
+     * @param transformCurrency
+     * @param type
+     * @param amount
+     * @return
+     * @throws ServiceException
+     */
+    BigDecimal getRateAmount(String currency, String transformCurrency, Integer type, BigDecimal amount) throws ServiceException;
+
+}

+ 325 - 0
crm-manager/src/main/java/com/crm/manager/service/impl/FinanceRateServiceImpl.java

@@ -0,0 +1,325 @@
+package com.crm.manager.service.impl;
+
+import com.crm.manager.dao.mapper.FinanceRateMapper;
+import com.crm.manager.dao.repository.FinanceRateRepository;
+import com.crm.manager.service.FinanceRateService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.constant.EmailSendEnum;
+import com.crm.rely.backend.core.constant.MapConstants;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.core.entity.system.config.SendUpdateEmailCodeEntity;
+import com.crm.rely.backend.core.entity.system.email.SysEmailSendEntity;
+import com.crm.rely.backend.core.exception.ServiceException;
+import com.crm.rely.backend.model.constant.PayConstants;
+import com.crm.rely.backend.model.dto.finance.rate.FinanceRateSearchDto;
+import com.crm.rely.backend.model.entity.finance.rate.*;
+import com.crm.rely.backend.model.pojo.table.FinanceRateTable;
+import com.crm.rely.backend.service.EmailService;
+import com.crm.rely.backend.service.RedisService;
+import com.crm.rely.backend.util.DateUtil;
+import com.crm.rely.backend.util.GetRandom;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+@Service
+public class FinanceRateServiceImpl implements FinanceRateService {
+
+
+    @Autowired
+    private FinanceRateRepository financeRateRepository;
+
+    @Autowired
+    private FinanceRateMapper financeRateMapper;
+
+    @Autowired
+    private EmailService emailService;
+
+    @Autowired
+    private RedisService redisService;
+
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void add(FinanceRateAddEntity entity) throws ServiceException {
+
+//        emailService.validateCode(entity.getEmail(), entity.getEmailCode());
+
+        existCurrency(entity.getCurrency(), entity.getTransformCurrency(), entity.getType());
+
+        FinanceRateTable financeRateTable = new FinanceRateTable();
+        BeanUtils.copyProperties(entity, financeRateTable);
+        financeRateRepository.save(financeRateTable);
+
+        redisService.save(entity.getCurrency() + entity.getTransformCurrency() + entity.getType(), entity.getRate(),
+                60 * 60 * 1000);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void update(FinanceRateUpdateEntity entity) throws ServiceException {
+
+//        emailService.validateCode(entity.getEmail(), entity.getEmailCode());
+
+        FinanceRateTable financeRateTable = financeRateRepository.findFirstById(entity.getId());
+
+        if (!entity.getCurrency().equals(financeRateTable.getCurrency()) ||
+                !entity.getTransformCurrency().equals(financeRateTable.getTransformCurrency()) ||
+                !entity.getType().equals(financeRateTable.getType())) {
+            existCurrency(entity.getCurrency(), entity.getTransformCurrency(), entity.getType());
+        }
+        BeanUtils.copyProperties(entity, financeRateTable);
+        financeRateRepository.save(financeRateTable);
+
+        redisService.save(entity.getCurrency() + entity.getTransformCurrency() + entity.getType(), entity.getRate(),
+                60 * 60 * 1000);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void save(FinanceRateBatchUpdateEntity entity, List<FinanceRateUpdateEntity> entitys) throws ServiceException {
+
+//        emailService.validateCode(entity.getEmail(), entity.getEmailCode());
+
+
+        List<FinanceRateTable> financeRateTables = financeRateRepository.findAllByType(entity.getType());
+
+        if (entitys == null || entitys.size() <= 0) {
+            financeRateRepository.delete(financeRateTables);
+        }
+        Map<String, String> mapCurrency = new HashMap<>(financeRateTables.size());
+        Map<Long, FinanceRateTable> mapId = new HashMap<>(financeRateTables.size());
+        for (FinanceRateTable financeRateTable : financeRateTables) {
+
+            mapId.put(financeRateTable.getId(), financeRateTable);
+        }
+
+        List<FinanceRateTable> financeRateSaveTables = new ArrayList<>();
+        if (entitys != null) {
+            for (FinanceRateUpdateEntity financeRateUpdateEntity : entitys) {
+
+                String key =
+                        financeRateUpdateEntity.getCurrency() + "/" + financeRateUpdateEntity.getTransformCurrency();
+                if (mapCurrency.containsKey(key)) {
+                    throw ServiceException.exception(Constants.CURRENCY_EXIST_ERROR);
+                } else {
+                    mapCurrency.put(key, key);
+                }
+                FinanceRateTable financeRateTable;
+                if (financeRateUpdateEntity.getId() != null) {
+                    financeRateTable = mapId.get(financeRateUpdateEntity.getId());
+                    if (financeRateTable == null) {
+                        throw new ServiceException(Constants.INFO_NOT_FOUND);
+                    }
+
+                    BeanUtils.copyProperties(financeRateUpdateEntity, financeRateTable);
+
+                    mapId.remove(financeRateTable.getId());
+                } else {
+                    financeRateTable = new FinanceRateTable();
+                    BeanUtils.copyProperties(financeRateUpdateEntity, financeRateTable);
+                    financeRateTable.setAddIp(financeRateUpdateEntity.getModifyIp());
+                    financeRateTable.setAddUser(financeRateUpdateEntity.getModifyUser());
+                    financeRateTable.setAddTime(financeRateUpdateEntity.getModifyTime());
+                    financeRateTable.setModifyTime(null);
+                    financeRateTable.setModifyIp(null);
+                    financeRateTable.setModifyUser(null);
+
+
+                }
+                financeRateSaveTables.add(financeRateTable);
+            }
+        }
+
+
+        if (financeRateSaveTables != null && !financeRateSaveTables.isEmpty()) {
+            financeRateRepository.save(financeRateSaveTables);
+        }
+
+        if (!mapId.isEmpty()) {
+            Collection<FinanceRateTable> financeRateDeleteTables = mapId.values();
+            financeRateRepository.delete(financeRateDeleteTables);
+        }
+
+        for (FinanceRateTable financeRateTable : financeRateTables) {
+
+            redisService.save(financeRateTable.getCurrency() + financeRateTable.getTransformCurrency() + financeRateTable.getType(), financeRateTable.getRate(),
+                    60 * 60 * 1000);
+        }
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class})
+    public void delete(FinanceRateDeleteEntity entity) throws ServiceException {
+
+//        emailService.validateCode(entity.getEmail(), entity.getEmailCode());
+
+        if (entity == null || entity.getIds().size() <= 0) {
+            throw ServiceException.exception(Constants.SYSTEM_ERROR);
+        }
+        List<FinanceRateTable> financeRateTables = financeRateRepository.findAllByIdIn(entity.getIds());
+        if (financeRateTables == null || financeRateTables.size() <= 0) {
+            return;
+        }
+        financeRateRepository.delete(financeRateTables);
+
+        for (FinanceRateTable financeRateTable : financeRateTables) {
+
+            redisService.remove(financeRateTable.getCurrency() + financeRateTable.getTransformCurrency() + financeRateTable.getType());
+        }
+    }
+
+//    @Override
+//    public ResultWithPagerDto<FinanceRateSearchDto> searchPageList(FinanceRateSearchListEntity entity) throws
+//    ServiceException {
+//        Integer count = financeRateMapper.countList(entity);
+//        PageDto pageDto = PageDto.format(entity, count);
+//        if (count == null || count <= 0) {
+//            return ResultWithPagerDto.success(pageDto);
+//        }
+//        List<FinanceRateTable> financeRateTables = financeRateMapper.pageList(entity);
+//
+//        if (financeRateTables == null || financeRateTables.size() <= 0) {
+//
+//            throw new ServiceException(Constants.SYSTEM_ERROR);
+//        }
+//        List<FinanceRateSearchDto> financeRateSearchDtos = new ArrayList<>(financeRateTables.size());
+//
+//        for (FinanceRateTable financeRateTable : financeRateTables) {
+//            FinanceRateSearchDto rateSearchDto = transform(financeRateTable);
+//            financeRateSearchDtos.add(rateSearchDto);
+//        }
+//
+//        return ResultWithPagerDto.success(pageDto, financeRateSearchDtos);
+//    }
+
+    @Override
+    public BaseResultDto searchList(FinanceRateSearchListEntity entity) throws ServiceException {
+
+        List<FinanceRateTable> financeRateTables = financeRateMapper.searchList(entity);
+
+        if (financeRateTables == null || financeRateTables.size() <= 0) {
+
+            throw new ServiceException(Constants.SYSTEM_ERROR);
+        }
+        List<FinanceRateSearchDto> financeRateSearchDtos = new ArrayList<>(financeRateTables.size());
+
+        for (FinanceRateTable financeRateTable : financeRateTables) {
+            FinanceRateSearchDto rateSearchDto = transform(financeRateTable);
+            financeRateSearchDtos.add(rateSearchDto);
+        }
+
+        return BaseResultDto.success(financeRateSearchDtos);
+    }
+
+    @Override
+    public FinanceRateSearchDto searchSingle(Long id) throws ServiceException {
+        FinanceRateTable financeRateTable = financeRateRepository.getFirstById(id);
+        if (financeRateTable == null) {
+            throw ServiceException.exception(Constants.INFO_NOT_FOUND);
+        }
+        return transform(financeRateTable);
+    }
+
+    @Override
+    public void sendEmailCode(SendUpdateEmailCodeEntity entity) throws ServiceException {
+
+        //构建实体
+        SysEmailSendEntity sysEmailSendEntity = createSendEmailCodeEntity(entity);
+
+        //发送收据
+        emailService.sendCode(sysEmailSendEntity, sysEmailSendEntity.getMap().get(MapConstants.CODE));
+    }
+
+    private SysEmailSendEntity createSendEmailCodeEntity(SendUpdateEmailCodeEntity entity) {
+        SysEmailSendEntity sysEmailSendEntity = new SysEmailSendEntity();
+
+        Map<String, String> map = new HashMap<>(2);
+        String code = GetRandom.getRandom(6);
+        map.put(MapConstants.CODE, code);
+        Date time = DateUtil.operationMinute(new Date(), Constants.EMAIL_VALIDATECODE_TIME);
+        map.put(MapConstants.EXPIRE_TIME, DateUtil.formatTime(time));
+        map.put(MapConstants.DATE_TIME, DateUtil.formatTime());
+
+        sysEmailSendEntity.setAddIp(entity.getIp());
+        sysEmailSendEntity.setAddTime(entity.getTime());
+
+        sysEmailSendEntity.setUsers(entity.getEmail());
+        sysEmailSendEntity.setEmailSendEnum(EmailSendEnum.UPDATE_CONFIG_EMAIL_CODE);
+
+        //sysEmailSendEntity.setTemplateName(SystemEmailCodeConstants.CONFIG_UPDATE_EMAIL_CODE_SEND);
+
+        sysEmailSendEntity.setMap(map);
+
+        return sysEmailSendEntity;
+    }
+
+    private void existCurrency(String currency, String transformCurrency, Integer type) throws ServiceException {
+        boolean bl = financeRateRepository.existsByCurrencyAndTransformCurrencyAndType(currency, transformCurrency,
+                type);
+        if (bl) {
+            throw ServiceException.exception(Constants.CURRENCY_EXIST_ERROR);
+        }
+    }
+
+    private FinanceRateSearchDto transform(FinanceRateTable financeRateTable) {
+        FinanceRateSearchDto financeRateSearchDto = new FinanceRateSearchDto();
+        BeanUtils.copyProperties(financeRateTable, financeRateSearchDto);
+        return financeRateSearchDto;
+    }
+
+    @Override
+    public BigDecimal getRate(String currency, String transformCurrency, Integer type) throws ServiceException {
+        if (type == null) {
+            throw new ServiceException(Constants.SYSTEM_ERROR);
+        }
+        BigDecimal rate = null;
+
+        if (currency.equals(transformCurrency)) {
+            return BigDecimal.ONE;
+        }
+
+        //先用转化货币和货币进行获取
+        FinanceRateTable financeRateTable = financeRateRepository.getByTypeAndCurrencyAndTransformCurrency(type, transformCurrency, currency);
+        //如果不存在 则根据货币和转换货币获取汇率
+        if (financeRateTable == null) {
+            financeRateTable = financeRateRepository.getByTypeAndCurrencyAndTransformCurrency(type, currency, transformCurrency);
+            //如果不存在 则表示当前系统未设置此货币汇率
+            if (financeRateTable == null) {
+                if (type != null && type.equals(0)) {
+                    throw new ServiceException(PayConstants.FINANCE_DEPOSIT_RATE_NOT_EMPTY);
+                } else {
+                    throw new ServiceException(PayConstants.FINANCE_WITHDRAW_RATE_NOT_EMPTY);
+                }
+            }
+            int roundingMode = 1;
+            if (type != null) {
+                if (type.equals(0)) {
+                    roundingMode = 0;
+                } else if (type.equals(1)) {
+                    roundingMode = 1;
+                }
+            }
+            rate = BigDecimal.ONE.divide(financeRateTable.getRate(), 10, roundingMode);
+        } else {
+            rate = financeRateTable.getRate();
+        }
+        return rate;
+    }
+
+    public BigDecimal getRateAmount(String currency, String transformCurrency, Integer type, BigDecimal amount) throws ServiceException {
+
+        if (amount == null) {
+            throw ServiceException.exception(Constants.SYSTEM_ERROR);
+        }
+        BigDecimal rate = getRate(currency, transformCurrency, type);
+
+        return amount.multiply(rate);
+    }
+
+}

+ 59 - 0
crm-manager/src/main/resources/mapper/FinanceRateMapper.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.crm.manager.dao.mapper.FinanceRateMapper">
+
+    <select id="countList" resultType="integer"
+            parameterType="com.crm.rely.backend.model.entity.finance.rate.FinanceRateSearchListEntity">
+
+        select count(*) from finance_rate
+        <where>
+            <if test="type!=null ">
+                and `type`=#{type}
+            </if>
+            <if test="currency!=null and currency!=''">
+                and currency=#{currency}
+            </if>
+            <if test="transformCurrency!=null and transformCurrency!=''">
+                and transform_currency=#{transformCurrency}
+            </if>
+        </where>
+
+    </select>
+
+    <select id="pageList" resultType="com.crm.rely.backend.model.pojo.table.FinanceRateTable"
+            parameterType="com.crm.rely.backend.model.entity.finance.rate.FinanceRateSearchListEntity">
+
+        select * from finance_rate
+        <where>
+            <if test="type!=null ">
+                and `type`=#{type}
+            </if>
+            <if test="currency!=null and currency!=''">
+                and currency=#{currency}
+            </if>
+            <if test="transformCurrency!=null and transformCurrency!=''">
+                and transform_currency=#{transformCurrency}
+            </if>
+        </where>
+        limit #{page.offset},#{page.row}
+    </select>
+    <select id="searchList" resultType="com.crm.rely.backend.model.pojo.table.FinanceRateTable"
+            parameterType="com.crm.rely.backend.model.entity.finance.rate.FinanceRateSearchListEntity">
+
+        select * from finance_rate
+        <where>
+            <if test="type!=null ">
+                and `type`=#{type}
+            </if>
+            <if test="currency!=null and currency!=''">
+                and currency=#{currency}
+            </if>
+            <if test="transformCurrency!=null and transformCurrency!=''">
+                and transform_currency=#{transformCurrency}
+            </if>
+        </where>
+    </select>
+
+</mapper>

+ 32 - 0
crm-model/src/main/java/com/crm/rely/backend/model/dto/finance/rate/FinanceRateSearchDto.java

@@ -0,0 +1,32 @@
+package com.crm.rely.backend.model.dto.finance.rate;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2020-07-01 16:50
+ **/
+@Data
+public class FinanceRateSearchDto {
+    private Long id;
+
+    private Integer type;
+
+    /**
+     * 汇率
+     */
+    private BigDecimal rate;
+
+    /**
+     * 货币类型
+     */
+    private String currency;
+
+    /**
+     * 转化后的货币类型
+     */
+    private String transformCurrency;
+}

+ 33 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateAddEntity.java

@@ -0,0 +1,33 @@
+package com.crm.rely.backend.model.entity.finance.rate;
+
+import com.crm.rely.backend.core.entity.base.BaseAddEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FinanceRateAddEntity extends BaseAddEntity {
+    private Integer type;
+
+    /**
+     * 汇率
+     */
+    private BigDecimal rate;
+
+    /**
+     * 货币类型
+     */
+    private String currency;
+
+    /**
+     * 转化后的货币类型
+     */
+    private String transformCurrency;
+
+//    private String email;
+//    @NotNull(message = Constants.EMAIL_CODE_NOT_NULL_ERROR)
+//    @NotBlank(message = Constants.EMAIL_CODE_NOT_NULL_ERROR)
+//    private String emailCode;
+    private Integer gaCode;
+
+}

+ 23 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateBatchUpdateEntity.java

@@ -0,0 +1,23 @@
+package com.crm.rely.backend.model.entity.finance.rate;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @author: houn
+ * @create: 2020-07-17 12:14
+ **/
+@Data
+public class FinanceRateBatchUpdateEntity {
+
+    List<FinanceRateUpdatesEntity> data;
+    private Integer type;
+//    private String email;
+//    @NotNull(message = Constants.EMAIL_CODE_NOT_NULL_ERROR)
+//    @NotBlank(message = Constants.EMAIL_CODE_NOT_NULL_ERROR)
+//    private String emailCode;
+    private Integer gaCode;
+
+}

+ 14 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateDeleteEntity.java

@@ -0,0 +1,14 @@
+package com.crm.rely.backend.model.entity.finance.rate;
+
+import com.crm.rely.backend.core.entity.base.BaseDeleteEntities;
+import lombok.Data;
+
+@Data
+public class FinanceRateDeleteEntity extends BaseDeleteEntities {
+
+//    private String email;
+//    @NotNull(message = Constants.EMAIL_CODE_NOT_NULL_ERROR)
+//    @NotBlank(message = Constants.EMAIL_CODE_NOT_NULL_ERROR)
+//    private String emailCode;
+    private Integer gaCode;
+}

+ 19 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateEntity.java

@@ -0,0 +1,19 @@
+package com.crm.rely.backend.model.entity.finance.rate;
+
+import lombok.Data;
+
+@Data
+public class FinanceRateEntity {
+
+
+    /**
+     * 货币类型
+     */
+    private String currency;
+
+    /**
+     * 转化后的货币类型
+     */
+    private String transformCurrency;
+
+}

+ 19 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateSearchListEntity.java

@@ -0,0 +1,19 @@
+package com.crm.rely.backend.model.entity.finance.rate;
+
+import lombok.Data;
+
+@Data
+public class FinanceRateSearchListEntity {
+
+    private Integer type;
+
+    /**
+     * 货币类型
+     */
+    private String currency;
+
+    /**
+     * 转化后的货币类型
+     */
+    private String transformCurrency;
+}

+ 34 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateUpdateEntity.java

@@ -0,0 +1,34 @@
+package com.crm.rely.backend.model.entity.finance.rate;
+
+import com.crm.rely.backend.core.entity.base.BaseUpdateEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FinanceRateUpdateEntity extends BaseUpdateEntity {
+
+    private Integer type;
+
+    /**
+     * 汇率
+     */
+    private BigDecimal rate;
+
+    /**
+     * 货币类型
+     */
+    private String currency;
+
+    /**
+     * 转化后的货币类型
+     */
+    private String transformCurrency;
+
+//    private String email;
+//    @NotNull(message = Constants.EMAIL_CODE_NOT_NULL_ERROR)
+//    @NotBlank(message = Constants.EMAIL_CODE_NOT_NULL_ERROR)
+//    private String emailCode;
+    private Integer gaCode;
+
+}

+ 26 - 0
crm-model/src/main/java/com/crm/rely/backend/model/entity/finance/rate/FinanceRateUpdatesEntity.java

@@ -0,0 +1,26 @@
+package com.crm.rely.backend.model.entity.finance.rate;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FinanceRateUpdatesEntity {
+
+    private Long id;
+    /**
+     * 汇率
+     */
+    private BigDecimal rate;
+
+    /**
+     * 货币类型
+     */
+    private String currency;
+
+    /**
+     * 转化后的货币类型
+     */
+    private String transformCurrency;
+
+}

+ 3 - 2
crm-pay/src/main/java/com/crm/pay/service/impl/FinanceDepositServiceImpl.java

@@ -154,12 +154,13 @@ public class FinanceDepositServiceImpl implements FinanceDepositService {
             goodsPrice = goodsPrice.add(goldenGoodsTable.getGoodsPrice());
         }
         if (goodsPrice.compareTo(balanceSaveEntity.getAmount()) > 0 ) {
-            throw new ServiceException("goods_amount_error");
+            throw new ServiceException("金额错误");
         }
+        balanceSaveEntity.setAmount(goodsPrice);
 
         GoldenOrderDetailsTable detailsTable = goldenOrderMapper.getByCustomIdAndGoodsIdIn(balanceSaveEntity.getAddUser(), balanceSaveEntity.getGoodIds());
         if(detailsTable != null){
-            throw new ServiceException("goods_purchased_error");
+            throw new ServiceException("该产品已订购");
         }
 
         if (Strings.isNullOrEmpty(balanceSaveEntity.getCurrency())) {

+ 7 - 2
crm-pay/src/main/java/com/crm/pay/service/impl/FinanceWithdrawServiceImpl.java

@@ -228,7 +228,7 @@ public class FinanceWithdrawServiceImpl implements FinanceWithdrawService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void approve(FinanceWithdrawApproveEntity entity) throws ServiceException {
+    public void approve(FinanceWithdrawApproveEntity entity) throws ServiceException {//
         FinanceWithdrawTable financeWithdrawTable = financeWithdrawRepository.findFirstById(entity.getId());
         if (financeWithdrawTable == null) {
             throw ServiceException.exception(Constants.INFO_NOT_FOUND);
@@ -247,7 +247,12 @@ public class FinanceWithdrawServiceImpl implements FinanceWithdrawService {
                 mqSendService.send(financeWithdrawTable.getCallbackMq(), financeWithdrawTable);
             }
         }
-
+        if (PayConstants.PASSED_STATUS.equals(entity.getStatus())) {
+            FinanceWithdrawApproveManagerEntity managerEntity = new FinanceWithdrawApproveManagerEntity();
+            managerEntity.setId(entity.getId());
+            managerEntity.setWithdrawStatus(2);
+            this.approve(managerEntity);
+        }
     }
 
     @Override

+ 3 - 3
crm-pay/src/main/java/com/crm/pay/service/impl/pay/XfgPayServiceImpl.java

@@ -165,7 +165,7 @@ public class XfgPayServiceImpl extends BasePayServiceImpl implements XfgPayServi
         Map<String, String> headers = new HashMap<>(1);
         headers.put("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
 
-        /*Connection.Response response = HttpUtil.post(
+        Connection.Response response = HttpUtil.post(
                 headers, propertyEntity.getBaseUrl() + propertyEntity.getDepositUrl(), map);
         log.info(String.format("url:%s,json:%s,body:%s", propertyEntity.getBaseUrl() + propertyEntity.getDepositUrl(), JSON.toJSONString(map), response.body()));
 
@@ -175,9 +175,9 @@ public class XfgPayServiceImpl extends BasePayServiceImpl implements XfgPayServi
         }
 
         String url = requestEntity.getString("pay_info");
-        log.info(String.format("支付请求,请求orderNo:%s,请求url:%s", map.get("out_trade_no"), url));*/
+        log.info(String.format("支付请求,请求orderNo:%s,请求url:%s", map.get("out_trade_no"), url));
 
-        return "234243";
+        return url;
     }
 
     @Override