PayRseponeController.java 11.5 KB
package com.sunyo.energy.location.controller;

import com.alibaba.fastjson.JSONObject;
import com.sunyo.energy.location.controller.response.ResultJson;
import com.sunyo.energy.location.dao.PayRecordsMapper;
import com.sunyo.energy.location.dao.PayResponseMapper;
import com.sunyo.energy.location.model.PayRecords;
import com.sunyo.energy.location.model.PayResponse;
import com.sunyo.energy.location.service.ElectricityMeterService;
import com.sunyo.energy.location.service.WaterMeterService;
import com.sunyo.energy.location.websocket.WebSocketServer;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.UUID;


@Slf4j
@RequestMapping("/payCode")
@Controller
public class PayRseponeController {


    @Autowired
    private PayResponseMapper payResponseMapperl;

    @Autowired
    private WaterMeterService waterMeterService;

    @Autowired
    private PayRecordsMapper payRecordsMapper;

    @Autowired
    ElectricityMeterService electricityMeterService;

    /**
     * 接受字段
     *
     * @param POSID    商户柜台代码
     * @param BRANCHID 分行代码
     * @param ORDERID  定单号
     * @param PAYMENT  付款金额
     * @param CURCODE  币种
     * @param REMARK1  备注一
     * @param REMARK2  备注二
     * @param ACC_TYPE 账户类型
     * @param SUCCESS  成功标志
     * @param TYPE     接口类型
     * @param REFERER  Referer信息
     * @param CLIENTIP 客户端IP
     * @param ACCDATE  系统记账日期
     * @param USRMSG   支付账户信息
     * @param USRINFO  客户加密信息
     * @param PAYTYPE  支付方式
     * @param SIGN     数字签名
     */
    @RequestMapping(value = "/payResponse")
    @ApiOperation(value = "支付回执是否成功")
    @ResponseBody
    public ResultJson payCodeRsepone(@RequestParam(value = "POSID", required = false) String POSID,
                                     @RequestParam(value = "BRANCHID", required = false) String BRANCHID,
                                     @RequestParam(value = "ORDERID", required = false) String ORDERID,
                                     @RequestParam(value = "PAYMENT", required = false) String PAYMENT,
                                     @RequestParam(value = "CURCODE", required = false) String CURCODE,
                                     @RequestParam(value = "REMARK1", required = false) String REMARK1,
                                     @RequestParam(value = "REMARK2", required = false) String REMARK2,
                                     @RequestParam(value = "ACC_TYPE", required = false) String ACC_TYPE,
                                     @RequestParam(value = "SUCCESS", required = false) String SUCCESS,
                                     @RequestParam(value = "TYPE", required = false) String TYPE,
                                     @RequestParam(value = "REFERER", required = false) String REFERER,
                                     @RequestParam(value = "CLIENTIP", required = false) String CLIENTIP,
                                     @RequestParam(value = "ACCDATE", required = false) String ACCDATE,
                                     @RequestParam(value = "USRMSG", required = false) String USRMSG,
                                     @RequestParam(value = "USRINFO", required = false) String USRINFO,
                                     @RequestParam(value = "PAYTYPE", required = false) String PAYTYPE,
                                     @RequestParam(value = "SIGN", required = false) String SIGN) throws IOException {

        log.info("接受建行返回信息");
        PayResponse payResponse = new PayResponse();
        payResponse.setId(UUID.randomUUID().toString());
        payResponse.setPosid(POSID);
        payResponse.setBranchid(BRANCHID);
        payResponse.setOrderid(ORDERID);
        payResponse.setPayment(new BigDecimal(PAYMENT));
        payResponse.setCurcode(CURCODE);
        payResponse.setRemark1(REMARK1);
        payResponse.setRemark2(REMARK2);
        payResponse.setAccType(ACC_TYPE);
        payResponse.setSuccess(SUCCESS);
        payResponse.setType(TYPE);
        payResponse.setReferer(REFERER);
        payResponse.setClientip(CLIENTIP);
        payResponse.setAccdate(new Date());
        payResponse.setUsrmsg(USRMSG);
        payResponse.setUsrinfo(USRINFO);
        payResponse.setPaytype(PAYTYPE);
        payResponse.setSign(SIGN);
        try {

            int msg = 0;
            /**
             * 解决建行反馈多次原因
             */
            if(payResponseMapperl.count(ORDERID) == 0){
                int i = payResponseMapperl.insertSelective(payResponse);
                log.info("插入数据库{},信息{}",i, payResponse);
                if (i > 0) {
                    msg = 1;
                    PayRecords payRecords = new PayRecords();
                    // 支付类型
                    if (!"".equals(ACC_TYPE)) {
                        if ("WX".equals(ACC_TYPE)) {
                            payRecords.setPayfesstype(false);
                        } else {
                            payRecords.setPayfesstype(true);
                        }

                    }
                    if ("Y".equals(SUCCESS)) {
                        payRecords.setOrdernumber(ORDERID);
                        payRecords.setReamke3("1");
                        /**
                         * 修改订单支付状态
                         */
                        payRecordsMapper.updateOrderStatus(payRecords);
                        // 查询是水还是电
                        boolean selectType = payRecordsMapper.selectType(ORDERID);
                        if (selectType) {
                            // 查询该订单设备编号
                            String eeId = payRecordsMapper.findOrderNumber(ORDERID);
                            if (!"".equals(eeId)) {
                                // 通知充值电费
                                int eeResult = electricityMeterService.rechargeDevices(eeId, PAYMENT, "0", ORDERID);
                                if (eeResult > 0) {

                                    log.info("电表信息充值成功{}",eeResult);
                                    /**
                                     * 修改电表充值状态
                                     */
                                    int i1 = payRecordsMapper.updateByPrimaryKey(payRecords);
                                    log.info("修改电表订单状态{}, 修改信息{}", i1, payRecords);
                                    if (i1 > 0) {
                                        WebSocketServer webSocketServer = new WebSocketServer();
                                        JSONObject jsonObject = new JSONObject();
                                        jsonObject.put("orderNumber", ORDERID);
                                        jsonObject.put("success", "Y");
                                        webSocketServer.broadcast(jsonObject.toJSONString());
                                        log.info("通知前端消息结果");
                                    } else {
                                        WebSocketServer webSocketServer = new WebSocketServer();
                                        JSONObject jsonObject = new JSONObject();
                                        jsonObject.put("orderNumber", ORDERID);
                                        jsonObject.put("success", "N");
                                        webSocketServer.broadcast(jsonObject.toJSONString());
                                    }
                                } else {
                                    WebSocketServer webSocketServer = new WebSocketServer();
                                    JSONObject jsonObject = new JSONObject();
                                    jsonObject.put("orderNumber", ORDERID);
                                    jsonObject.put("success", "S");
                                    webSocketServer.broadcast(jsonObject.toJSONString());
                                }
                            }
                        } else {
                            // 查询该订单设备编号
                            String wmId = payRecordsMapper.findOrderNumber(ORDERID);
                            // 通知充值水费
                            if (!"".equals(wmId)) {
                                ResultJson resultJson = waterMeterService.payWater(PAYMENT, wmId);
                                if ("200".equals(resultJson.getCode())) {
                                    log.info("水表信息充值成功{}",resultJson.getCode());
                                    /**
                                     * 修改订单充值状态
                                     */
                                    int i1 = payRecordsMapper.updateByPrimaryKey(payRecords);
                                    log.info("修改水表订单状态{}, 修改信息{}", i1, payRecords);
                                    if (i1 > 0) {

                                        WebSocketServer webSocketServer = new WebSocketServer();
                                        JSONObject jsonObject = new JSONObject();
                                        jsonObject.put("orderNumber", ORDERID);
                                        jsonObject.put("success", "Y");
                                        webSocketServer.broadcast(jsonObject.toJSONString());
                                        log.info("通知前端消息结果");
                                    } else {
                                        WebSocketServer webSocketServer = new WebSocketServer();
                                        JSONObject jsonObject = new JSONObject();
                                        jsonObject.put("orderNumber", ORDERID);
                                        jsonObject.put("success", "N");
                                        webSocketServer.broadcast(jsonObject.toJSONString());
                                    }
                                } else {
                                    WebSocketServer webSocketServer = new WebSocketServer();
                                    JSONObject jsonObject = new JSONObject();
                                    jsonObject.put("orderNumber", ORDERID);
                                    jsonObject.put("success", "N");
                                    webSocketServer.broadcast(jsonObject.toJSONString());
                                }
                            }
                        }

                    } else {
                        payRecords.setOrdernumber(ORDERID);
                        payRecords.setReamke3("0");
                        /**
                         * 修改订单支付状态
                         */
                        payRecordsMapper.updateOrderStatusError(payRecords);
                    }
                }
                return i == 1 ? new ResultJson("200", "支付回执信息接受成功") : new ResultJson("500", "支付回执信息接受失败");
            }else {
                return 1 == 1 ? new ResultJson("200", "2次调用") : new ResultJson("500", "2次调用");
            }



        }catch (Exception e){
            e.printStackTrace();
            log.info("系统异常-----------");
            return null;
        }
    }


}