admin
2022-10-28 0e9b6603d4ae9d11c1fbc90257ce816c5807b8ff
app/src/main/java/com/yeshi/makemoney/app/controller/admin/money/ExtractAdminController.java
@@ -1,35 +1,72 @@
package com.yeshi.makemoney.app.controller.admin.money;
import com.google.gson.*;
import com.ks.lib.common.exception.ParamsException;
import com.yeshi.makemoney.app.aop.AdminApiFilter;
import com.yeshi.makemoney.app.dto.money.ExtractConfig;
import com.yeshi.makemoney.app.entity.config.SystemConfig;
import com.yeshi.makemoney.app.entity.config.SystemConfigKey;
import com.yeshi.makemoney.app.entity.money.ExtractPayType;
import com.yeshi.makemoney.app.exception.money.ExtractException;
import com.yeshi.makemoney.app.exception.money.UserMoneyBalanceException;
import com.yeshi.makemoney.app.service.inter.AdminUserService;
import com.yeshi.makemoney.app.service.inter.config.SystemConfigService;
import com.yeshi.makemoney.app.service.inter.user.UserInfoService;
import com.yeshi.makemoney.app.service.manager.VerifyCodeManager;
import com.yeshi.makemoney.app.vo.AcceptAdminData;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.TimeUtil;
import com.google.gson.reflect.TypeToken;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.yeshi.makemoney.app.entity.money.Extract;
import com.yeshi.makemoney.app.service.inter.money.ExtractService;
import com.yeshi.makemoney.app.service.query.money.ExtractQuery;
import org.yeshi.utils.exception.MailSendException;
import org.yeshi.utils.mail.EmailApiUtil;
import org.yeshi.utils.mail.EmailInfo;
@Controller
@RequestMapping("admin/api/money/extract")
public class ExtractAdminController {
    private final String SESSION_KEY_EXTRACT_EMAIL_VERIFIED = "admin-do-extract";
    @Resource
    private ExtractService extractService;
    @Resource
    private SystemConfigService systemConfigService;
   @ResponseBody
    @Resource
    private AdminUserService adminUserService;
    @Resource
    private VerifyCodeManager verifyCodeManager;
    @Resource
    private UserInfoService userInfoService;
    @ResponseBody
    @RequestMapping("list")
    public String list(ExtractQuery query, int page, int limit, String callback ) {
        List<Extract> list = extractService.list(query,page,limit);
    public String list(ExtractQuery query, int page, int limit, String callback) {
        List<Extract> list = extractService.list(query, page, limit);
        long count = extractService.count(query);
        JSONObject data = new JSONObject();
        Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
@@ -38,39 +75,211 @@
            public JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) {
                return date == null ? new JsonPrimitive("") : new JsonPrimitive(TimeUtil.getGernalTime(date.getTime(), "yyyy.MM.dd HH:mm"));
            }
        }).registerTypeAdapter(ExtractPayType.class, new JsonSerializer<ExtractPayType>() {
            @Override
            public JsonElement serialize(ExtractPayType date, Type type, JsonSerializationContext jsonSerializationContext) {
                return date == null ? new JsonPrimitive("") : new JsonPrimitive(date.getName());
            }
        }).create();
        data.put("list", gson.toJson(list));
        data.put("count", count);
        return JsonUtil.loadJSONP(callback,JsonUtil.loadTrueResult(data));
    }
    @ResponseBody
    @RequestMapping("delete")
    public String delete(String ids, String callback) {
        Type type = new TypeToken<List<Long>>(){}.getType();
        List<Long> idList=new Gson().fromJson(ids,type);
        extractService.delete(idList);
        return JsonUtil.loadJSONP(callback,JsonUtil.loadTrueResult(""));
        return JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data));
    }
    @ResponseBody
    @RequestMapping("get")
    public String get(Long id, HttpSession session, String callback) {
    public String get(Long id) {
        Extract entity = extractService.get(id);
        if (entity !=null){
            return JsonUtil.loadJSONP(callback,JsonUtil.loadTrueResult(entity));
        if (entity != null) {
            entity.setUser(userInfoService.get(entity.getUser().getId()));
            return JsonUtil.loadTrueResult(JsonUtil.getSimpleGson().toJson(entity));
        } else {
            return JsonUtil.loadJSONP(callback,JsonUtil.loadFalseResult("ID不存在"));
            return JsonUtil.loadFalseResult("ID不存在");
        }
    }
    @ResponseBody
    @RequestMapping("getExtractConfig")
    public String getExtractConfig(AcceptAdminData acceptAdminData) {
        SystemConfig config = systemConfigService.getByKey(acceptAdminData.getSystem(), SystemConfigKey.extractConfig);
        ExtractConfig extractConfig = null;
        if (config != null && !StringUtil.isNullOrEmpty(config.getValue())) {
            extractConfig = new Gson().fromJson(config.getValue(), ExtractConfig.class);
        }
        if (extractConfig == null) {
            extractConfig = new ExtractConfig();
            extractConfig.setNewerLittleMoneyNum(0);
            extractConfig.setMaxMoney(new BigDecimal(0));
            extractConfig.setMaxMoneyPerDay(new BigDecimal(0));
            extractConfig.setMaxNumPerDay(0);
            extractConfig.setMinMoney(new BigDecimal(0));
            extractConfig.setExtractMoneyList(new ArrayList<>());
        }
        return JsonUtil.loadTrueResult(extractConfig);
    }
    @ResponseBody
    @RequestMapping("updateExtractConfig")
    public String updateExtractConfig(@RequestBody ExtractConfig extractConfig, AcceptAdminData acceptAdminData) {
        SystemConfig config = systemConfigService.getByKey(acceptAdminData.getSystem(), SystemConfigKey.extractConfig);
        if (config == null) {
            SystemConfig newConfig = new SystemConfig();
            newConfig.setSystem(acceptAdminData.getSystem());
            newConfig.setKey(SystemConfigKey.extractConfig);
            newConfig.setValue(new Gson().toJson(extractConfig));
            try {
                systemConfigService.add(newConfig);
            } catch (Exception e) {
                return JsonUtil.loadFalseResult(e.getMessage());
            }
        } else {
            SystemConfig newConfig = new SystemConfig();
            newConfig.setId(config.getId());
            newConfig.setValue(new Gson().toJson(extractConfig));
            systemConfigService.update(newConfig);
        }
        return JsonUtil.loadTrueResult("");
    }
    /**
     * @return java.lang.String
     * @author hxh
     * @description 发送提现的邮箱验证码
     * @date 14:14 2022/5/9
     * @param: extractConfig
     * @param: acceptAdminData
     **/
    @ResponseBody
    @RequestMapping("sendExtractEmail")
    public String sendExtractEmail(AcceptAdminData acceptAdminData) {
        if (acceptAdminData.getAdminUser() == null) {
            return JsonUtil.loadFalseResult("管理员信息为空");
        }
        if (StringUtil.isNullOrEmpty(acceptAdminData.getAdminUser().getEmail())) {
            return JsonUtil.loadFalseResult("管理员邮件地址为空");
        }
        String emailSender = systemConfigService.getValueCache(acceptAdminData.getSystem(), SystemConfigKey.emailSender);
        if (StringUtil.isNullOrEmpty(emailSender)) {
            return JsonUtil.loadFalseResult("系统尚未配置邮件发送账号信息");
        }
        String[] sts = emailSender.split(",");
        if (sts.length != 2) {
            return JsonUtil.loadFalseResult("邮件发送账号信息格式有误");
        }
        String code = StringUtil.getVerifyCode();
        EmailInfo emailInfo = new EmailInfo();
        emailInfo.setFromEmail(sts[0]);
        emailInfo.setFormEmailPwd(sts[1]);
        emailInfo.setApp(systemConfigService.getValueCache(acceptAdminData.getSystem(), SystemConfigKey.androidPushAppCode));
        emailInfo.setTitle("提现审核验证码:" + code);
        emailInfo.setContent("提现审核验证码:" + code + ",5分钟内有效,请尽快验证。");
        emailInfo.setToEmail(acceptAdminData.getAdminUser().getEmail());
        try {
            EmailApiUtil.sendEmail(emailInfo);
            verifyCodeManager.sendEmailCodeSuccess(emailInfo.getToEmail(), code);
            return JsonUtil.loadTrueResult("");
        } catch (MailSendException e) {
            return JsonUtil.loadFalseResult(e.getMessage());
        }
    }
    @ResponseBody
    @RequestMapping("verifyExtractEmail")
    public String verifyExtractEmail(String code, AcceptAdminData acceptAdminData, HttpSession session) {
        if (acceptAdminData.getAdminUser() == null) {
            return JsonUtil.loadFalseResult("管理员信息为空");
        }
        if (StringUtil.isNullOrEmpty(acceptAdminData.getAdminUser().getEmail())) {
            return JsonUtil.loadFalseResult("管理员邮件地址为空");
        }
        boolean isRight = verifyCodeManager.isEMailCodeRight(acceptAdminData.getAdminUser().getEmail(), code);
        if (isRight) {
            session.setAttribute(SESSION_KEY_EXTRACT_EMAIL_VERIFIED, true);
            return JsonUtil.loadTrueResult("");
        } else {
            return JsonUtil.loadFalseResult("验证码错误");
        }
    }
    /**
     * @return java.lang.String
     * @author hxh
     * @description 通过提现
     * @date 15:04 2022/5/9
     * @param: id
     * @param: acceptAdminData
     **/
    @ResponseBody
    @RequestMapping("passExtract")
    public String passExtract(Long id, AcceptAdminData acceptAdminData, HttpSession session) {
        if (!isVerifiedEmailCode(session)) {
            return JsonUtil.loadFalseResult(50002, "邮箱未验证");
        }
        try {
            extractService.passExtract(id, acceptAdminData.getAdminUser().getAccount());
            return JsonUtil.loadTrueResult("");
        } catch (ExtractException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseResult(e.getMessage());
        }
    }
    @ResponseBody
    @RequestMapping("rejectExtract")
    public String rejectExtract(Long id, String reason, AcceptAdminData acceptAdminData, HttpSession session) {
        if (!isVerifiedEmailCode(session)) {
            return JsonUtil.loadFalseResult(50002, "邮箱未验证");
        }
        try {
            extractService.rejectExtract(id, reason, acceptAdminData.getAdminUser().getAccount());
            return JsonUtil.loadTrueResult("");
        } catch (ExtractException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseResult(e.getMessage());
        } catch (UserMoneyBalanceException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseResult(e.getMessage());
        } catch (ParamsException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseResult(e.getMessage());
        }
    }
    /**
     * @return boolean
     * @author hxh
     * @description 是否已经验证了邮件验证码
     * @date 15:02 2022/5/9
     * @param: session
     **/
    private boolean isVerifiedEmailCode(HttpSession session) {
        Boolean verified = (Boolean) session.getAttribute(SESSION_KEY_EXTRACT_EMAIL_VERIFIED);
        if (verified != null && verified) {
            return true;
        }
        return false;
    }
}