diff --git a/src/main/java/cn/chjyj/szwh/bean/Order.java b/src/main/java/cn/chjyj/szwh/bean/Order.java index a14b901..ae300a8 100644 --- a/src/main/java/cn/chjyj/szwh/bean/Order.java +++ b/src/main/java/cn/chjyj/szwh/bean/Order.java @@ -296,4 +296,40 @@ public class Order implements Serializable { public void setTickettime(Date tickettime) { this.tickettime = tickettime; } + + @Override + public String toString() { + return "Order{" + + "id=" + id + + ", userId=" + userId + + ", buyIslicode='" + buyIslicode + '\'' + + ", batchcode='" + batchcode + '\'' + + ", accountRatioId=" + accountRatioId + + ", historyBuyName='" + historyBuyName + '\'' + + ", historyBuyCode='" + historyBuyCode + '\'' + + ", totalServiceCharge=" + totalServiceCharge + + ", totalMoney=" + totalMoney + + ", type=" + type + + ", status=" + status + + ", transactionIslicode='" + transactionIslicode + '\'' + + ", ticketid=" + ticketid + + ", ticketmoney=" + ticketmoney + + ", ticketurl='" + ticketurl + '\'' + + ", ticketimage='" + ticketimage + '\'' + + ", ticketStatus=" + ticketStatus + + ", chargeChannel=" + chargeChannel + + ", payStatus=" + payStatus + + ", closeStatus=" + closeStatus + + ", isClose=" + isClose + + ", closeSerialNumber='" + closeSerialNumber + '\'' + + ", payid='" + payid + '\'' + + ", createtime=" + createtime + + ", paymenttime=" + paymenttime + + ", receivetime=" + receivetime + + ", closetime=" + closetime + + ", completetime=" + completetime + + ", shuttime=" + shuttime + + ", tickettime=" + tickettime + + '}'; + } } \ No newline at end of file diff --git a/src/main/java/cn/chjyj/szwh/controller/api/PayController.java b/src/main/java/cn/chjyj/szwh/controller/api/PayController.java index 1d65f36..b522dec 100644 --- a/src/main/java/cn/chjyj/szwh/controller/api/PayController.java +++ b/src/main/java/cn/chjyj/szwh/controller/api/PayController.java @@ -48,8 +48,8 @@ public class PayController extends BaseController { */ @RequestMapping("/payCallback") public JSONObject payCallback(HttpServletRequest request){ - log.info("支付网关返回:"+request.toString()); JSONObject json = HttpUtil.getParamTreeMap_Utf8(request); + log.info("paygate_ret"+json); payService.payCallback(json); jsonObject.put("response","00"); jsonObject.put("message","成功"); diff --git a/src/main/java/cn/chjyj/szwh/service/impl/PayServiceImpl.java b/src/main/java/cn/chjyj/szwh/service/impl/PayServiceImpl.java index 98baed6..50a636a 100644 --- a/src/main/java/cn/chjyj/szwh/service/impl/PayServiceImpl.java +++ b/src/main/java/cn/chjyj/szwh/service/impl/PayServiceImpl.java @@ -42,14 +42,15 @@ public class PayServiceImpl implements PayService { /** * 关闭七日以前的已经支付了的订单 + * * @return */ @Override public void payComplete() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String nowStr = sdf.format(sdf)+" 23:59:59"; - List orderList=orderMapper.getOrderListUnderDate(nowStr,"2"); - for(Order od:orderList){ + String nowStr = sdf.format(sdf) + " 23:59:59"; + List orderList = orderMapper.getOrderListUnderDate(nowStr, "2"); + for (Order od : orderList) { // 更新订单完成状态 payFinishOperate(od.getBatchcode()); } @@ -57,6 +58,7 @@ public class PayServiceImpl implements PayService { /** * 订单支付完成后的操作 + * * @param batchcode * @return */ @@ -64,108 +66,114 @@ public class PayServiceImpl implements PayService { public int payFinishOperate(String batchcode) { //获取订单信息 Order order = orderMapper.getOrderByBatchcode(batchcode); - if(order==null){ + if (order == null) { return 0; } - if(order.getPayStatus()!=2){ + if (order.getPayStatus() != 2) { // do nothing } //订单状态 Integer status = order.getStatus(); - Integer closeStatus= order.getCloseStatus(); - Integer type =order.getType(); + Integer closeStatus = order.getCloseStatus(); + Integer type = order.getType(); //查询购买用户 String buyIslicode = order.getBuyIslicode(); //购买用户 - OrderUser oduser = orderUserMapper.getUserOrder(batchcode,buyIslicode); + OrderUser oduser = orderUserMapper.getUserOrder(batchcode, buyIslicode); String buyName = oduser.getName(); Date paytime = order.getPaymenttime(); // 同步到其他平台 - List syncList =new ArrayList<>(); + List syncList = new ArrayList<>(); //商品对应的合约编号 - Map ccmap = new HashMap(); + Map ccmap = new HashMap(); // - Calendar cal= Calendar.getInstance(); + Calendar cal = Calendar.getInstance(); //订单商品详情 List orderGoodsDetailList = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(batchcode); - for(OrderGoodsDetail odgd:orderGoodsDetailList){ + for (OrderGoodsDetail odgd : orderGoodsDetailList) { Map odmap = new HashMap(); - String dateStr="";//订单年限 - int transCount=1;// - if(odgd.getGoodsEntrust()==1 || odgd.getChargesType()==1){ - dateStr="永久"; - transCount=1; - }else { + String dateStr = "";//订单年限 + int transCount = 1;// + if (odgd.getGoodsEntrust() == 1 || odgd.getChargesType() == 1) { + dateStr = "永久"; + transCount = 1; + } else { int years = odgd.getTransactionCount(); cal.setTime(new Date()); - cal.add(Calendar.YEAR,+years); - dateStr=cal.getTime().toString(); - transCount=odgd.getTransactionCount(); + cal.add(Calendar.YEAR, +years); + dateStr = cal.getTime().toString(); + transCount = odgd.getTransactionCount(); } // // if(odgd.getMoney().compareTo(new BigDecimal(0))>0 &&status!=2){ // return odgd; // } //合约关联编码(订单交易isli标识码) - String contractcode=""; - if(StringUtils.isEmpty(odgd.getContractCode()) || "-".equals(odgd.getContractCode())){ - String ratio="0.00"; - // 远程获取查询对应的 islicode - JSONObject aplinkCodeJson=SzwhApiUtils.getApplyLinkCode(odgd.getGoodsIslicode(), - buyIslicode,ratio,transCount,dateStr,batchcode); - log.info("订单合约编号:"+aplinkCodeJson); + String contractcode = ""; + if (StringUtils.isEmpty(odgd.getContractCode()) || "-".equals(odgd.getContractCode())) { + String ratio = "0.00"; + // 远程获取查询对应的 sourcedata_islicode + JSONObject aplinkCodeJson = SzwhApiUtils.getApplyLinkCode(odgd.getSourcedataIslicode(), + buyIslicode, ratio, transCount, dateStr, batchcode); + log.info("订单合约编号:" + aplinkCodeJson); JSONArray aparr = aplinkCodeJson.getJSONArray("data"); JSONObject lkcjson = (JSONObject) aparr.get(0); // 返回的值是 buyIslicode 为键名的内容 contractcode = lkcjson.getString(buyIslicode); - }else{ + } else { contractcode = odgd.getContractCode(); } //合约关联编号,更新到订单商品详情中 - Map ogdmap= new HashMap(); - ogdmap.put("contract_code",contractcode); - orderGoodsDetailMapper.updateOrderGoodsDetail(ogdmap,odgd.getId()); + Map ogdmap = new HashMap(); + ogdmap.put("contract_code", contractcode); + orderGoodsDetailMapper.updateOrderGoodsDetail(ogdmap, odgd.getId()); //订单商品详情id,为key, 合约编号为键值 - ccmap.put(odgd.getId(),contractcode); + ccmap.put(odgd.getId(), contractcode); //配置文件中读取渠道 String channelIsli = ProperUtils.getSzwhProp("CHANNEL_ISLI"); //构建同步map Map syncmap = new HashMap(); - syncmap.put("userId",buyIslicode); - syncmap.put("requestIsliFlag",channelIsli); //渠道编号 - syncmap.put("goodsIslicode",odgd.getGoodsIslicode()); - syncmap.put("goodsName" ,odgd.getGoodsName()); - syncmap.put("orderIslicode" ,contractcode); - syncmap.put("batchcode",odgd.getBatchcode()); - syncmap.put("chargesType",odgd.getMoney()); + syncmap.put("userId", buyIslicode); + syncmap.put("requestIsliFlag", channelIsli); //渠道编号 + syncmap.put("goodsIslicode", odgd.getGoodsIslicode()); + syncmap.put("goodsName", odgd.getGoodsName()); + syncmap.put("orderIslicode", contractcode); + syncmap.put("batchcode", odgd.getBatchcode()); + syncmap.put("chargesType", odgd.getMoney()); //委托周期 - String entrmonth=odgd.getContractualPeriod()==1?"永久":"一次性"; - syncmap.put("entrustMonth",entrmonth); + String entrmonth = odgd.getContractualPeriod() == 1 ? "永久" : "一次性"; + syncmap.put("entrustMonth", entrmonth); //委托类型 - String gentr = odgd.getGoodsEntrust()==1?"转让":"许可"; - syncmap.put("goodsEntrust" ,gentr); - syncmap.put("goodsOwnership",odgd.getGoodsOwnership()); + String gentr = odgd.getGoodsEntrust() == 1 ? "转让" : "许可"; + syncmap.put("goodsEntrust", gentr); + syncmap.put("goodsOwnership", odgd.getGoodsOwnership()); //商品类型 - String gtype =odgd.getGoodsType()==1?"文化资源数据":"文化数字内容"; - syncmap.put("goodsType",gtype); + String gtype = odgd.getGoodsType() == 1 ? "文化资源数据" : "文化数字内容"; + syncmap.put("goodsType", gtype); syncmap.put("payStatus", 1); - syncmap.put("closeStatus" ,closeStatus-1); - syncmap.put("transactionCount",odgd.getTransactionCount()); + syncmap.put("closeStatus", closeStatus - 1); + syncmap.put("transactionCount", odgd.getTransactionCount()); //订单类型 - String typeStr=""; - switch (type){ - case 1:typeStr="委托订单";break; - case 2:typeStr="认证订单";break; - default:typeStr="服务订单";break; + String typeStr = ""; + switch (type) { + case 1: + typeStr = "委托订单"; + break; + case 2: + typeStr = "认证订单"; + break; + default: + typeStr = "服务订单"; + break; } - syncmap.put("type",typeStr); - syncmap.put("buyUsername",buyName); - syncmap.put("entrustIslicode" ,odgd.getEntrustIslicode()); + syncmap.put("type", typeStr); + syncmap.put("buyUsername", buyName); + syncmap.put("entrustIslicode", odgd.getEntrustIslicode()); //委托用户名 - OrderUser orderUser = orderUserMapper.getUserOrder(odgd.getBatchcode(),odgd.getIslicode()); - String entrustUsername = orderUser!=null?orderUser.getName():"-"; - syncmap.put("entrustUsername",entrustUsername); + OrderUser orderUser = orderUserMapper.getUserOrder(odgd.getBatchcode(), odgd.getIslicode()); + String entrustUsername = orderUser != null ? orderUser.getName() : "-"; + syncmap.put("entrustUsername", entrustUsername); //add to list syncList.add(syncmap); } @@ -174,35 +182,35 @@ public class PayServiceImpl implements PayService { JSONArray wsynarr = new JSONArray(syncList); //待同步过去的订单信息 String forsync = wsynarr.toJSONString(); - JSONObject outSyncJson =SzwhApiUtils.synchInfo(forsync); - log.info(batchcode+"订单获取下载地址:"+outSyncJson); + JSONObject outSyncJson = SzwhApiUtils.synchInfo(forsync); + log.info(batchcode + "订单获取下载地址:" + outSyncJson); //返回链接地址 - if("00000000".equals(outSyncJson.getString("resultCode"))){ + if ("00000000".equals(outSyncJson.getString("resultCode"))) { JSONArray syncArray = outSyncJson.getJSONArray("data"); //获取解密地址 JSONObject sjson = (JSONObject) syncArray.get(0); //资源下载地址 - String sourceUrl= sjson.getString("source_url"); + String sourceUrl = sjson.getString("source_url"); //替换,然后提取出基本的地址信息 - String resUrl = sourceUrl.replace("{isliCode}/{contractISLICode}",""); - log.info("source base url:"+resUrl); + String resUrl = sourceUrl.replace("{isliCode}/{contractISLICode}", ""); + log.info("source base url:" + resUrl); //遍历数据 - for(OrderGoodsDetail ogd:orderGoodsDetailList){ + for (OrderGoodsDetail ogd : orderGoodsDetailList) { //todo 检查 source_download 是否有内容 //请求依据同步订单信息返回的地址获取解密资源地址 - JSONObject resJson = SzwhApiUtils.getDownOrdRes(resUrl,ogd.getIslicode(),ccmap.get(ogd.getId())); - log.info(ogd.getId()+"资源解密地址:"+resJson); + JSONObject resJson = SzwhApiUtils.getDownOrdRes(resUrl, ogd.getIslicode(), ccmap.get(ogd.getId())); + log.info(ogd.getId() + "资源解密地址:" + resJson); //更新订单商品资源详情 JSONArray ogdJarr = resJson.getJSONArray("data"); JSONObject togjson = (JSONObject) ogdJarr.get(0); // source_download map JSONObject sdown = new JSONObject(); - sdown.put("url",togjson.getString("url")); - sdown.put("status",4); + sdown.put("url", togjson.getString("url")); + sdown.put("status", 4); //合约关联编号,更新到订单商品详情中 Map togmap = new HashMap(); - togmap.put("source_download",sdown.toString()); - orderGoodsDetailMapper.updateOrderGoodsDetail(togmap,ogd.getId()); + togmap.put("source_download", sdown.toString()); + orderGoodsDetailMapper.updateOrderGoodsDetail(togmap, ogd.getId()); } } @@ -214,46 +222,57 @@ public class PayServiceImpl implements PayService { public int payCallback(JSONObject json) { // 待解密的 String data = json.getString("Data"); - log.info("支付回调 payCallback:"+data); + log.info("支付回调 payCallback:" + data); //todo 后续改造为可以配置型 - String url="https://t.masget.com/openapi/rest"; - String sckey ="gRAZZKiNw0UbTuF9";// 密钥 - String appid="910000198"; //应用id - String session="iba3t9dqln8etmcaceq1xtqr7urevia1"; //token + String url = "https://t.masget.com/openapi/rest"; + String sckey = "gRAZZKiNw0UbTuF9";// 密钥 + String appid = "910000198"; //应用id + String session = "iba3t9dqln8etmcaceq1xtqr7urevia1"; //token try { //解密 String desencrypt = AesEncryption.Desencrypt(data, sckey, sckey); //解密 - log.info("支付网关返回解密结果:"+desencrypt); + log.info("支付网关返回解密结果:" + desencrypt); // 转为json JSONObject dataObject = JSONObject.parseObject(desencrypt); - //支付完成 - if (dataObject.getIntValue("respcode") == 2) { - //订单编号 - String ordersn = dataObject.getString("ordernumber"); - //查找订单并更新订单状态 - Order order =orderMapper.getOrderByBatchcode(ordersn); - if(order!=null){ //订单存在,理论上应该是存在的 - //查找订单中的商品 - List ordgdlist = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(ordersn); - //增加销售记录 - for(OrderGoodsDetail ordg:ordgdlist){ - // 根据goodsislicode 查询 - Goods goods = goodsMapper.getGoodsByIsli(ordg.getGoodsIslicode()); - // 更新订单状态 - Map upgmap = new HashMap(); - upgmap.put("sale_count",goods.getSaleCount()+1); - goodsMapper.updateGoods(upgmap,goods.getId()); - } - //更新订单字段 - Map upmap = new HashMap(); - upmap.put("status",2); - upmap.put("pay_status",2); - upmap.put("paymenttime",new Date()); - upmap.put("payid",dataObject.getString("payorderid")); //支付流水单号 - //更新订单指定字段 - orderMapper.updateOrderStatus(upmap,order.getId()); + //订单编号 + String ordersn = dataObject.getString("ordernumber"); + //查找订单并更新订单状态 + Order order = orderMapper.getOrderByBatchcode(ordersn); + if (order != null) { //订单存在,理论上应该是存在的 + //查找订单中的商品 + List ordgdlist = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(ordersn); + //增加销售记录 + for (OrderGoodsDetail ordg : ordgdlist) { + // 根据goodsislicode 查询 + Goods goods = goodsMapper.getGoodsByIsli(ordg.getGoodsIslicode()); + // 更新订单状态 + Map upgmap = new HashMap(); + upgmap.put("sale_count", goods.getSaleCount() + 1); + goodsMapper.updateGoods(upgmap, goods.getId()); + } + //使用的支付方式 + int ichargeChannel = 3;//默认银联支付 + String paymenttypename = dataObject.getString("paymenttypename"); + + if (paymenttypename.startsWith("支付宝")) { + ichargeChannel = 2; } + if (paymenttypename.startsWith("微信")) { + ichargeChannel = 1; + } + + //更新订单字段 + Map upmap = new HashMap(); + upmap.put("status", 2); + upmap.put("pay_status", 2); + upmap.put("paymenttime", new Date()); + //支付方式 + upmap.put("charge_channel", ichargeChannel); + upmap.put("payid", dataObject.getString("payorderid")); //支付流水单号 + //更新订单指定字段 + orderMapper.updateOrderStatus(upmap, order.getId()); + // 处理订单其他信息 payFinishOperate(order.getBatchcode()); //买家发票信息等 @@ -262,59 +281,60 @@ public class PayServiceImpl implements PayService { invoiceSellerOperate(order.getBatchcode()); } - }catch (Exception ex){ - log.error(ex.getLocalizedMessage()); + } catch (Exception ex) { + log.error("支付返回结果解密异常:"+ex.getMessage()); } return 0; } /** * 买家发票信息 + * * @param bathcode * @return */ @Override public int invoiceBuyOperate(String bathcode) { //发票存放路径 - String pdfpath= ChConstant.INVOICE; + String pdfpath = ChConstant.INVOICE; //订单 Order order = orderMapper.getOrderByBatchcode(bathcode); //用户信息 - OrderUser orderUser = orderUserMapper.getUserOrder(bathcode,order.getBuyIslicode()); + OrderUser orderUser = orderUserMapper.getUserOrder(bathcode, order.getBuyIslicode()); //发票数据集合 Map invoiceMap = new HashMap(); - invoiceMap.put("buyerName",orderUser.getName()); - invoiceMap.put("buyerType","01"); //购买方类型01:企业 - invoiceMap.put("buyerTaxNo",orderUser.getUscc());//税号 + invoiceMap.put("buyerName", orderUser.getName()); + invoiceMap.put("buyerType", "01"); //购买方类型01:企业 + invoiceMap.put("buyerTaxNo", orderUser.getUscc());//税号 //订单商品详情 - List ordglist = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(bathcode); + List ordglist = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(bathcode); //发票信息 - List taxlist = TaxUtils.TaxSpilt(ordglist,orderUser); + List taxlist = TaxUtils.TaxSpilt(ordglist, orderUser); // - for(int i=0;i - - + ${k} = #{v} - where id=#{gid} diff --git a/src/main/resources/mapper/szwh/OrderGoodsDetailMapper.xml b/src/main/resources/mapper/szwh/OrderGoodsDetailMapper.xml index a38f84e..0202098 100644 --- a/src/main/resources/mapper/szwh/OrderGoodsDetailMapper.xml +++ b/src/main/resources/mapper/szwh/OrderGoodsDetailMapper.xml @@ -198,7 +198,7 @@ update - + ${k} = #{v} diff --git a/src/main/resources/mapper/szwh/OrderMapper.xml b/src/main/resources/mapper/szwh/OrderMapper.xml index 5f5d127..12c36bf 100644 --- a/src/main/resources/mapper/szwh/OrderMapper.xml +++ b/src/main/resources/mapper/szwh/OrderMapper.xml @@ -223,8 +223,8 @@ update - - ${k} = #{v} + + ${k} = #{v} where id=#{id} @@ -235,6 +235,6 @@ update set `status`=5,`shuttime`=#{shuttime} - where batchcode=#{batchcode} + where batchcode=#{batchcode} and status!=2 \ No newline at end of file diff --git a/src/test/java/cn/chjyj/szwh/PayTest.java b/src/test/java/cn/chjyj/szwh/PayTest.java index 07fb1a0..09ba60e 100644 --- a/src/test/java/cn/chjyj/szwh/PayTest.java +++ b/src/test/java/cn/chjyj/szwh/PayTest.java @@ -1,5 +1,6 @@ package cn.chjyj.szwh; +import cn.chjyj.szwh.constant.PayConstant; import cn.chjyj.szwh.utils.pay.security.AesEncryption; import com.alibaba.fastjson2.JSONObject; import org.junit.Test; @@ -41,4 +42,25 @@ public class PayTest { ex.printStackTrace(); } } + + @Test + public void mkcrpy(){ + String wstr ="{\"businesstypename\":\"现场收款\",\"subpaymenttypeid\":12,\n" + + "\"latitude\":0.0,\"bankaccount\":\"12_null\",\n" + + "\"channelpayorderid\":\"2022112422001401901438361289\",\"payorderid\":\"30331021124201835748\",\n" + + "\"subcompanyname\":\"深圳文化产权交易所有限公司(测试商户)\",\"body\":\"qq112401\",\"respcode\":2,\n" + + "\"channelordernumber\":\"288590033351202211247208767226\",\"businesstype\":1001,\"rcompanyname\":\"深圳文化产权交易所有限公司(测试商户)\",\n" + + "\"settlementtype\":1,\"companyid\":910000198,\"ordernumber\":\"1669292311057413\",\"rcompanyid\":910000198,\"respmsg\":\"支付完成\",\"longitude\":0.0,\n" + + "\"amount\":1,\"subcompanyid\":910000198,\"bankcardtype\":0,\"loginname\":\"深圳文化产权交易所有限公司(测试商户)\",\"subpaymenttypename\":\"支付宝扫码支付\",\n" + + "\"paymenttypename\":\"支付宝支付\",\"companyname\":\"深圳文化产权交易所有限公司(测试商户)\",\"businesstime\":\"2022-11-24 20:19:20\",\"paymenttypeid\":12,\n" + + "\"stationid\":0,\"ordertype\":307}"; + + try { + //加密 + String aftAcrpy = AesEncryption.Desencrypt(wstr, PayConstant.TOKEN_SECRETKEY, PayConstant.TOKEN_SESSION); + System.out.println("加密后:"+aftAcrpy); + }catch (Exception ex){ + ex.printStackTrace(); + } + } } diff --git a/src/test/java/cn/chjyj/szwh/mapper/OrderMapperTest.java b/src/test/java/cn/chjyj/szwh/mapper/OrderMapperTest.java index 1eace8f..b66fa77 100644 --- a/src/test/java/cn/chjyj/szwh/mapper/OrderMapperTest.java +++ b/src/test/java/cn/chjyj/szwh/mapper/OrderMapperTest.java @@ -50,9 +50,10 @@ public class OrderMapperTest { @Test public void getOrderById() { - int id=2; + int id=262; Order gorder = orderMapper.getOrderById(id); - System.out.println(gorder.getId()); + System.out.println(gorder.getPayid()); + System.out.println(gorder); } @Test @@ -76,6 +77,21 @@ public class OrderMapperTest { orderMapper.updateOrderStatus(con,oid); } + //更新支付时间,订单状态等 + @Test + public void upordstatus(){ + int oid=262; + Map upmap = new HashMap(); + upmap.put("status", 2); + upmap.put("pay_status", 2); + upmap.put("paymenttime", new Date()); + //支付方式 + upmap.put("charge_channel", "2"); + upmap.put("payid", "3037102113012202719"); //支付流水单号 + //do it + orderMapper.updateOrderStatus(upmap,oid); + } + /** * 订单关闭 */