kongdeqiang
2023-03-07 bf0d3beb840ea1fa6cc117bc6ba569d89e880e15
新增邮储对接接口
1个文件已添加
239 ■■■■■ 已修改文件
src/main/java/com/boying/controller/phone/YCPayController.java 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/controller/phone/YCPayController.java
New file
@@ -0,0 +1,239 @@
package com.boying.controller.phone;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.boying.common.R;
import com.boying.common.SystemConfigProperties;
import com.boying.entity.*;
import com.boying.service.*;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
 * @author kdq
 * @version 1.0.0
 * @ClassName YCPayController.java
 * @Description 邮储对接支付接口
 * @createTime 2023年03月07日 08:22:00
 */
@RestController
@RequestMapping("/ffzf/api")
@RequiredArgsConstructor
public class YCPayController {
    private final OutParkService outParkService;
    private final OrderRecordService orderRecordService;
    private final TicketService ticketService;
    private final TicketBlackService ticketBlackService;
    private final SystemConfigProperties systemConfigProperties;
    private final WhiteListService whiteListService;
    /**
     * 查询订单接口
     * @param queryId
     * @return
     */
    @GetMapping("/getByQueryId")
    public Object getByQueryId(Long queryId){
        OutPark byId = outParkService.getById(queryId);
        return R.ok(byId,"请求成功");
    }
    /**
     * 缴款书
     */
    @PostMapping("park")
    public Object park(Long id){
        OutPark outPark =  outParkService.getById(id);
        if(outPark.getPrice()==0){
            updateOutPark(outPark.getId(),"03");
            return R.failed("本次停车无需支付费用");
        }
        //判断是否在白名单
        QueryWrapper<WhiteList> wrapper = new QueryWrapper<>();
        wrapper.lambda()
                .eq(WhiteList::getCarNo,outPark.getCarNo());
        List<WhiteList> all = whiteListService.list(wrapper);
        for(WhiteList w : all){
            if(w.getType()==0){
                updateOutPark(outPark.getId(),"03");
                return R.failed("本次停车无需支付费用!");
            }else{
                if(w.getParkId()!=null){
                    if(w.getEndTime()!=null){
                        if(w.getParkId().equals(outPark.getParkId())&&System.currentTimeMillis()<w.getEndTime().getTime()){
                            updateOutPark(outPark.getId(),"03");
                            return R.failed("本次停车无需支付费用!");
                        }
                    }
                }
            }
        }
        if(outPark.getStatus() == 0){
            return R.ok("跳转邮储支付", "https://hbfs.govpay.ccb.com/online/fssm?fee=130000000001&PyfScnCgycd=01&pyfTpcd=3&BNo="+outPark.getPayCode());
        }else if(outPark.getStatus() == 1){
            return R.failed("已缴费");
        }else {
            return R.failed("系统异常");
        }
    }
    /**
     * 支付回调接口
     * @param queryId
     * @return
     */
    @GetMapping("/result")
    public Object result(Long queryId,int success,int msg){
        OutPark byId = outParkService.getById(queryId);
        if(byId == null){
            return R.failed("未查询到订单");
        }else {
            //修改订单状态 0成功
            if(success==0){
                updateOrderRecord(queryId,"03");
                return R.ok(null,"请求成功");
            }else {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
                String logs = sdf.format(new Date())+" 出场id为:"+queryId+",缴费失败------》\n";
                logs += "回执原因:"+msg+",\n";
                writeTxt(logs);
            }
        }
        return R.ok(byId,"请求成功");
    }
    /**
     * 对账接口
     * @param checkDate,tranDate,fileName
     * @return
     */
    @GetMapping("/checkbill")
    public Object checkbill(String checkDate,String tranDate,String fileName){
        checkDate=checkDate.replaceAll("-","");
        String name = "E:\\Bank_PSBC_"+checkDate+".txt";
        File file = new File(name);
        Boolean aBoolean = judeFileExists(file);
        if(aBoolean){
            return R.ok();
        }else {
            return R.failed(null,"文件不存在");
        }
    }
    //更新订单记录
    public void updateOrderRecord(Long queryId,String status){
        QueryWrapper<OrderRecord> wrapper = new QueryWrapper<>();
        wrapper.lambda()
                .eq(OrderRecord::getQueryId,queryId)
                .orderByDesc(OrderRecord::getCreateTime);
        List<OrderRecord> all = orderRecordService.list(wrapper);
        if(all.size()>=1){
            OrderRecord orderRecord = all.get(0);
            if(status.equals("01")){
                orderRecord.setStatus(0);
            }
            if(status.equals("03")){
                orderRecord.setStatus(1);
            }
            if(status.equals("04")||status.equals("05")||status.equals("06")){
                orderRecord.setStatus(2);
            }
            orderRecordService.saveOrUpdate(orderRecord);
            if(orderRecord.getType()==0){
                updateTicket(orderRecord.getQueryId(),status);
            }else{
               updateOutPark(orderRecord.getQueryId(),status);
            }
        }
    }
    //更新罚单的状态
    public void updateTicket(Integer ticketId,String status){
        Ticket ticket = ticketService.getById(ticketId);
        if(ticket!=null){
            if(status.equals("01")){
                ticket.setPayStatus(0);
            }
            if(status.equals("03")){
                ticket.setPayStatus(1);
                dealCar(ticket.getCarNo());
            }
            if(status.equals("04")||status.equals("05")||status.equals("06")){
                ticket.setPayStatus(2);
            }
            ticketService.saveOrUpdate(ticket);
        }
    }
    //更新罚单缴费状态
    private void dealCar(String carNo){
        QueryWrapper<Ticket> wrapper = new QueryWrapper<>();
        wrapper.lambda()
                .eq(Ticket::getCarNo,carNo)
                .eq(Ticket::getPayStatus,1);
        List<Ticket> tickets = ticketService.list(wrapper);
        if(tickets.size()==0){
            //更新缴费状态
            QueryWrapper<TicketBlack> wrapper1 = new QueryWrapper<>();
            wrapper1.lambda()
                    .eq(TicketBlack::getCarNo,carNo);
            List<TicketBlack> all = ticketBlackService.list(wrapper1);
            for(TicketBlack ticketBlack:all){
                ticketBlack.setStatus(1);
                ticketBlack.setBlackType(0);
                ticketBlackService.saveOrUpdate(ticketBlack);
            }
        }
    }
    //更新出场
    public void updateOutPark(Integer outParkId, String status){
        OutPark outPark = outParkService.getById(outParkId);
        if(outPark!=null){
            if(status.equals("03")){
                outPark.setStatus(1);
                outParkService.saveOrUpdate(outPark);
            }
        }
    }
    //判断文件是否存在
    public Boolean judeFileExists(File file){
        if(file.exists()){
            return true;
        }else {
            return false;
        }
    }
    private void writeTxt( String txt)
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        try
        {
            FileWriter f = new FileWriter(systemConfigProperties.getLogPath()+"支付日志"+sdf.format(new Date())+".txt",true);
            BufferedWriter bw=new BufferedWriter(f);
            bw.write(txt);
            bw.newLine();
            bw.close();
        }
        catch(Exception e)
        {
            System.out.println("打印错误");
        }
    }
}