package com.szwl.controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.szwl.constant.ResponseCodesEnum;
import com.szwl.model.bo.R;
import com.szwl.model.bo.ResponseModel;
import com.szwl.model.entity.*;
import com.szwl.model.excel.ShandeMchCompanyListTarget;
import com.szwl.model.excel.ShandeMchListTarget;
import com.szwl.service.TAdminService;
import com.szwl.service.TShandeMchCheckService;
import com.szwl.service.TShandeMchService;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
*
* 杉德支付收款信息 前端控制器
*
*
* @author wuhs
* @since 2022-04-29
*/
@RestController
@RequestMapping("/tShandeMch")
public class TShandeMchController {
@Autowired
TShandeMchCheckService tShandeMchCheckService;
@Autowired
TShandeMchService tShandeMchService;
@Autowired
TAdminService adminService;
@ApiOperation(value = "查找杉德收款账户信息")
@GetMapping("/getOne")
public ResponseModel> getOne(String adminId) {
TAdmin admin = adminService.getById(adminId);
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TShandeMch::getAdminId,adminId);
List list = tShandeMchService.list(query);
if(list.size()>0){
return R.ok(list.get(0));
}else {
return R.fail("尚未注册!");
}
}
@ApiOperation(value = "获取杉德分账信息列表 分页")
@GetMapping("/pageShandeMch")
public ResponseModel> pageShandeMch(String username, String type, long current, long size ){
LambdaQueryWrapper query = Wrappers.lambdaQuery();
if(StringUtils.isNotEmpty(type)){
query.eq(TShandeMch::getType,type);
}else {
query.eq(TShandeMch::getType,"0");
}
if(StringUtils.isNotEmpty(username)){
LambdaQueryWrapper query1 = Wrappers.lambdaQuery();
query1.eq(TAdmin::getUsername,username);
List list = adminService.list(query1);
if(list.size()>0){
query.eq(TShandeMch::getAdminId,list.get(0).getId());
}
}
Page page = new Page<>(current, size, true);
IPage iPage = tShandeMchService.page(page, query);
return R.ok(iPage);
}
@ApiOperation(value = "保存或提交审核")
@PostMapping("/save")
public ResponseModel> save(@RequestBody TShandeMch tShandeMch) {
TAdmin admin = adminService.getById(tShandeMch.getAdminId());
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TShandeMch::getAdminId,tShandeMch.getAdminId());
List list = tShandeMchService.list(query);
if(list.size()>0){
//已有,属于第二次提交信息,需要审核
TShandeMch oldShandeMch = list.get(0);
int i = 0;
if(!oldShandeMch.getType().equals(tShandeMch.getType())){
i++;
}
if(!oldShandeMch.getBankName().equals(tShandeMch.getBankName())){
i++;
}
if(!oldShandeMch.getBankNo().equals(tShandeMch.getBankNo())){
i++;
}
if(i>0){
TShandeMchCheck shandeMchCheck = new TShandeMchCheck();
shandeMchCheck.setType(tShandeMch.getType());
shandeMchCheck.setCreateDate(new Date());
shandeMchCheck.setModifyDate(new Date());
shandeMchCheck.setAdminId(oldShandeMch.getAdminId());
shandeMchCheck.setCheckType("0");
shandeMchCheck.setBankName(tShandeMch.getBankName());
shandeMchCheck.setBankNo(tShandeMch.getBankNo());
shandeMchCheck.setSettleableBalance(oldShandeMch.getSettleableBalance());
shandeMchCheck.setTodayBalance(oldShandeMch.getTodayBalance());
if(tShandeMch.getType().equals("0")){
if(StringUtils.isEmpty(tShandeMch.getBankChannelName())||StringUtils.isEmpty(tShandeMch.getBankChannelNo())){
R.fail("信息有空!");
}
shandeMchCheck.setBankChannelNo(tShandeMch.getBankChannelNo());
shandeMchCheck.setBankChannelName(tShandeMch.getBankChannelName());
}
tShandeMchCheckService.save(shandeMchCheck);
}
return R.ok(list.get(0));
}else {
//没有,直接保存
tShandeMch.setSettleableBalance(BigDecimal.valueOf(0.00));
tShandeMch.setTodayBalance(BigDecimal.valueOf(0.00));
tShandeMch.setTotalSettleableBalance(BigDecimal.valueOf(0.00));
tShandeMch.setCreateDate(new Date());
tShandeMch.setModifyDate(new Date());
tShandeMchService.save(tShandeMch);
return R.ok();
}
}
@ApiOperation(value = "查找杉德收款账户信息")
@GetMapping("/getShandeMch")
public ResponseModel getShandeMch(@RequestParam String adminId) {
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TShandeMch::getAdminId,adminId);
List list = tShandeMchService.list(query);
TShandeMch shandeMch = list.get(0);
return R.ok(shandeMch);
}
@ApiOperation(value = "结算处理")
@GetMapping("/jiesuan")
public ResponseModel> jiesuan(String username, String type, String namelist) {
if(StringUtils.isEmpty(type)){
return R.fail(ResponseCodesEnum.A0100); }
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TShandeMch::getType,type);
if(StringUtils.isNotEmpty(username)){
LambdaQueryWrapper query1 = Wrappers.lambdaQuery();
query1.eq(TAdmin::getUsername,username);
List list = adminService.list(query1);
if(list.size()>0){
query.eq(TShandeMch::getAdminId,list.get(0).getId());
}
}
if(StringUtils.isNotEmpty(namelist)){
String[] names = namelist.split(",");
List ids = new ArrayList<>();
if(names.length>0){
for(int i=0;i query1 = Wrappers.lambdaQuery();
query1.eq(TAdmin::getUsername,username);
List list = adminService.list(query1);
if(list.size()>0){
ids.add(list.get(0).getId());
}
}
}
if(ids.size()>0){
query.notIn(TShandeMch::getAdminId,ids);
}
}
List list = tShandeMchService.list(query);
for(TShandeMch shandeMch:list){
BigDecimal settleableBalance = shandeMch.getSettleableBalance();
if(settleableBalance!=null&&settleableBalance.compareTo(new BigDecimal(0))>0){
shandeMch.setSettleableDate(new Date());
BigDecimal totalSettleableBalance = shandeMch.getTotalSettleableBalance();
if(totalSettleableBalance!=null){
shandeMch.setTotalSettleableBalance(settleableBalance.add(totalSettleableBalance));
}else {
shandeMch.setTotalSettleableBalance(settleableBalance);
}
shandeMch.setSettleableBalance(new BigDecimal(0));
shandeMch.setLastSettleableBalance(settleableBalance);
tShandeMchService.updateById(shandeMch);
}
}
return R.ok();
}
@ApiOperation(value = "ClientId查找设备")
@GetMapping("/updateShandeMch")
public void updateShandeMch(@RequestBody TShandeMch shandeMch) {
if(shandeMch!=null){
shandeMch.setModifyDate(new Date());
tShandeMchService.updateById(shandeMch);
}
}
@ApiOperation(value = "结算处理")
@GetMapping("/shandeMchListExport")
public ResponseModel> shandeMchListExport(HttpServletResponse response, String username, String type, String namelist) {
if(StringUtils.isEmpty(type)){
return R.fail(ResponseCodesEnum.A0100);
}
LambdaQueryWrapper query = Wrappers.lambdaQuery();
query.eq(TShandeMch::getType,type);
if(StringUtils.isNotEmpty(username)){
LambdaQueryWrapper query1 = Wrappers.lambdaQuery();
query1.eq(TAdmin::getUsername,username);
List list = adminService.list(query1);
if(list.size()>0){
query.eq(TShandeMch::getAdminId,list.get(0).getId());
}
}
if(StringUtils.isNotEmpty(namelist)){
String[] names = namelist.split(",");
List ids = new ArrayList<>();
if(names.length>0){
for(int i=0;i query1 = Wrappers.lambdaQuery();
query1.eq(TAdmin::getUsername,username);
List list = adminService.list(query1);
if(list.size()>0){
ids.add(list.get(0).getId());
}
}
}
if(ids.size()>0){
query.notIn(TShandeMch::getAdminId,ids);
}
}
List list = tShandeMchService.list(query);
ExportParams exportParams = new ExportParams(null, "sheet1");
Workbook workbook = null;
//账号类型 0:对公 1:私人
if(type.equals("0")){
List shandeMchCompanyListTargets = new ArrayList<>();
int i = 0;
for(TShandeMch shandeMch: list){
BigDecimal settleableBalance = shandeMch.getSettleableBalance();
if(settleableBalance.compareTo(new BigDecimal(0))== 1){
i++;
ShandeMchCompanyListTarget shandeMchCompanyListTarget = new ShandeMchCompanyListTarget();
shandeMchCompanyListTarget.setBankName(shandeMch.getBankName());
shandeMchCompanyListTarget.setBankNo(shandeMch.getBankNo());
shandeMchCompanyListTarget.setSettleableBalance(String.valueOf(shandeMch.getSettleableBalance()));
shandeMchCompanyListTarget.setNo(String.valueOf(i));
shandeMchCompanyListTarget.setBankChannelName(shandeMch.getBankChannelName());
shandeMchCompanyListTarget.setBankChannelNo(shandeMch.getBankChannelNo());
shandeMchCompanyListTargets.add(shandeMchCompanyListTarget);
}
}
workbook = ExcelExportUtil.exportExcel(exportParams, ShandeMchCompanyListTarget.class, shandeMchCompanyListTargets);
}
if(type.equals("1")){
List shandeMchListTargetList = new ArrayList<>();
int i = 0;
for(TShandeMch shandeMch: list){
BigDecimal settleableBalance = shandeMch.getSettleableBalance();
if(settleableBalance.compareTo(new BigDecimal(0))== 1){
i++;
ShandeMchListTarget shandeMchListTarget = new ShandeMchListTarget();
shandeMchListTarget.setBankName(shandeMch.getBankName());
shandeMchListTarget.setBankNo(shandeMch.getBankNo());
shandeMchListTarget.setSettleableBalance(String.valueOf(shandeMch.getSettleableBalance()));
shandeMchListTarget.setNo(String.valueOf(i));
shandeMchListTargetList.add(shandeMchListTarget);
}
}
workbook = ExcelExportUtil.exportExcel(exportParams, ShandeMchListTarget.class, shandeMchListTargetList);
}
if (workbook != null) {
OutputStream os = null;
try {
os = response.getOutputStream();
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日HHmmss");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
if(type.equals("0")){
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("对公账户" + format.format(new Date()) + ".xls", "UTF-8"));
}else {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("个人账号" + format.format(new Date()) + ".xls", "UTF-8"));
}
workbook.write(os);
return R.ok("导出成功");
} catch (Exception e) {
e.printStackTrace();
return R.fail("导出错误");
} finally {
try {
os.close();
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return R.ok();
}
}