package com.chuanghai.smartschool.tuitionpayment.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chuanghai.smartschool.tuitionpayment.anno.AdminLoginCheck;
import com.chuanghai.smartschool.tuitionpayment.common.exception.BizCodeEnume;
import com.chuanghai.smartschool.tuitionpayment.common.exception.RRException;
import com.chuanghai.smartschool.tuitionpayment.common.utils.CommonResult;
import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterDeleteEntity;
import com.chuanghai.smartschool.tuitionpayment.entity.PayableInfoWaterEntity;
import com.chuanghai.smartschool.tuitionpayment.service.PayOrderService;
import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterDeleteService;
import com.chuanghai.smartschool.tuitionpayment.service.PayableInfoWaterService;
import com.chuanghai.smartschool.tuitionpayment.service.SchoolUserService;
import com.chuanghai.smartschool.tuitionpayment.utils.RSAUtils;
import com.chuanghai.smartschool.tuitionpayment.vo.DormVO;
import com.chuanghai.smartschool.tuitionpayment.vo.YearVo;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: bingo
* @Date: 2022/6/28 星期二 15:30
* @Description: com.chuanghai.smartschool.tuitionpayment.controller
* @version: 1.0
*/
@RestController
@RequestMapping("tuitionpayment/payableinfowater")
public class PayableInfoWaterController {
@Autowired
private PayableInfoWaterService payableInfoWaterService;
@Autowired
private PayOrderService payOrderService;
@Autowired
private PayableInfoWaterDeleteService payableInfoWaterDeleteService;
@Autowired
private SchoolUserService schoolUserService;
@Value("${my-security.private-key}")
private String privateKey;
/**
* excel 导入学生学费相关原始数据
*
* @param adminToken 管理员token
* @param file 文件,文件格式注意需要符合要求
* @return
* @apiNote 导入学生学费相关原始数据
* 注意:
* 1.需要提示用户上传的excel文件需要符合规定的格式;
* 2.上传新文件将会导致所有的旧数据被删除,学费缴纳开始后不建议再上传新数据。
*/
@PostMapping("importWaterByExcel")
@AdminLoginCheck
public CommonResult importWaterByExcel(@RequestHeader("admin_token") String adminToken,
@RequestParam MultipartFile file) throws IOException {
if (file.isEmpty()) {
throw new RRException(BizCodeEnume.PARAMETER_ERROR, "文件不能为空");
}
payableInfoWaterService.importByExcel(file);
return CommonResult.ok();
}
/**
* 更新缴费订单的时间参数
*/
@PutMapping("updatePayInfoWater")
public CommonResult updatePayInfoWater() {
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.isNull("pay_item_type");
//更新时间等参数
List InfoEntityList = payableInfoWaterService.list(wrapper);
List objectList = new ArrayList<>();
InfoEntityList.forEach(payableInfoWaterEntity -> {
payableInfoWaterEntity.setPayCreateTime(LocalDateTime.now());
payableInfoWaterEntity.setPayItemType("1");
payableInfoWaterEntity.setPayNoticeType("1");
objectList.add(payableInfoWaterEntity);
});
payableInfoWaterService.updateBatchById(objectList);
return CommonResult.ok();
}
/**
* 根据宿舍号查询宿舍的缴费订单
*
* @param dormVO
* @return
* @apiNote 注意:密码使用提供的公钥进行RSA加密后传输
* 公钥:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMOcPB06u5yKyQsPjfVWiWgbEIrd14kiXNNihciaVKb6HnkQvq7zpQuZ80WEX94spnUMI3iOAl/GmIvHrpGwcbB4hJbznm+PajiwnUSPuCCXA68YJF640cJKb/8KeM7WVz69OFkIEPHhVxOy4FFF5QWe/kt6zOZ19HmE+ak+5x/QIDAQAB
*/
@PostMapping("queryWaterInfo")
public CommonResult queryWaterInfo(@RequestBody DormVO dormVO) {
String dorm;
try {
dorm = RSAUtils.decrypt(dormVO.getDorm(), RSAUtils.getPrivateKey(privateKey));
} catch (Exception e) {
e.printStackTrace();
throw new RRException(BizCodeEnume.PARAMETER_ERROR, "密码解密失败");
}
if (dorm.contains("层")) {
int indexD = dorm.indexOf("栋");
dorm = dorm.substring(0, indexD + 1) + dorm.split("层")[1];
}
List payableInfoWaterList = payableInfoWaterService.queryWaterInfo(dorm, dormVO.getYear(), dormVO.getPayStatu());
payableInfoWaterList.forEach(payableInfoWaterEntity -> {
if (payableInfoWaterEntity.getPayItemType().equals("2")) {
String payerName = payOrderService.queryPayerName(payableInfoWaterEntity.getId());
payableInfoWaterEntity.setPayerName(payerName);
}
payableInfoWaterService.updateById(payableInfoWaterEntity);
});
return CommonResult.ok().setResult(payableInfoWaterList);
}
/**
* 根据card_number获取缴费信息
*
* @param cardNumber 当前登录用户cardNumber
* @return
*/
public List getPayableInfoByCardNumber(@RequestHeader("card_number") String cardNumber,
String studentName) {
List payableInfoWaterByCardNumber = payableInfoWaterService.getPayableInfoWaterByCardNumber(cardNumber, studentName);
return payableInfoWaterByCardNumber;
}
/**
* 查询所有的水费订单年份
*
* @return
*/
@GetMapping("queryAllYear")
public CommonResult queryAllYear(String dorm, String payStatu) {
if (dorm.contains("层")) {
int indexD = dorm.indexOf("栋");
dorm = dorm.substring(0, indexD + 1) + dorm.split("层")[1];
}
List allYearlist = payableInfoWaterService.queryAllYear(dorm, payStatu);
return CommonResult.ok().setResult(allYearlist);
}
/**
* 修改学生宿舍信息
*
* @param id
* @param dorm
*/
@GetMapping("updateDormById")
public CommonResult updateDormById(@RequestParam("id") String id, @RequestParam("dorm") String dorm,
@RequestParam("payMonth") String payMonth) {
PayableInfoWaterEntity waterEntity = new PayableInfoWaterEntity();
Long ID = Long.parseLong(id);
waterEntity.setId(ID);
waterEntity.setDorm(dorm);
if (!dorm.contains("栋")) {
throw new RRException(BizCodeEnume.VAILD_EXCEPTION, "宿舍信息填写异常");
}
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq("dorm", dorm)
.eq("pay_month", payMonth)
.orderByDesc("pay_item_type");
List listWater = payableInfoWaterService.list(wrapper);
if (listWater.size() > 0) {
if (listWater.get(0).getPayItemType().equals("2")) {
PayableInfoWaterDeleteEntity payableInfoWaterDeleteEntity = new PayableInfoWaterDeleteEntity();
BeanUtils.copyProperties(listWater.get(0), payableInfoWaterDeleteEntity);
payableInfoWaterDeleteService.save(payableInfoWaterDeleteEntity);
payableInfoWaterService.removeById(waterEntity.getId());
return CommonResult.ok().setResult("该宿舍已经缴费,请与寝室长核对缴费信息");
} else {
waterEntity.setPayAmountDetail(listWater.get(0).getPayAmountDetail());
waterEntity.setOrderNotice(listWater.get(0).getOrderNotice());
waterEntity.setRealPayAmount(listWater.get(0).getRealPayAmount());
waterEntity.setPayMonth(listWater.get(0).getPayMonth());
payableInfoWaterService.updateById(waterEntity);
}
} else {
throw new RRException(BizCodeEnume.PARAMETER_ERROR, "该宿舍不存在" + payMonth + "缴费信息");
}
return CommonResult.ok().setResult(Boolean.TRUE);
}
@GetMapping("queryWaterType")
public CommonResult queryWaterType() {
List waterList = payableInfoWaterService.queryWaterType();
return CommonResult.ok().setResult(waterList);
}
/**
* 更新缴费名单状态 正在支付时无法重复提交
*
* @param payInfoId 缴费名单的id
* @param payStatu 0 代表正在支付的状态
* @return
*/
@GetMapping("updateWaterStatu")
public CommonResult updateWaterStatu(Long payInfoId, String payStatu, String cardNumber,String orderNo) {
PayableInfoWaterEntity waterInfo = new PayableInfoWaterEntity();
waterInfo.setId(payInfoId);
waterInfo.setPayItemType(payStatu);
waterInfo.setPayerCardNumber(cardNumber);
waterInfo.setOrderNo(orderNo);
payableInfoWaterService.updateById(waterInfo);
// System.out.println( payableInfoWaterService.getById(payInfoId));
return CommonResult.ok();
}
@GetMapping("testss")
public CommonResult testette() {
System.out.println("sdkjfhisafjjkkdbbfksdf-------------sdkfnkjsndkfnsdf ");
System.out.println("sdkjfhisafjjkkdbbfksdf-------------sdkfnkjsndkfnsdf ");
System.out.println("sdkjfhisafjjkkdbbfksdf-------------sdkfnkjsndkfnsdf ");
System.out.println("sdkjfhisafjjkkdbbfksdf-------------sdkfnkjsndkfnsdf ");
return CommonResult.ok();
}
/**
* 取消订单正在支付的锁定状态
* @param payInfoId
* @return
*/
@GetMapping("unlock")
public CommonResult unlock(Long payInfoId){
payableInfoWaterService.unlock(payInfoId);
return CommonResult.ok();
}
}