Browse Source

付款后的处理

master
xyiege 3 years ago
parent
commit
d1de8446f9
  1. 20
      src/main/java/cn/chjyj/szwh/controller/api/OrderController.java
  2. 8
      src/main/java/cn/chjyj/szwh/mapper/OrderGoodsDetailMapper.java
  3. 7
      src/main/java/cn/chjyj/szwh/mapper/TicketMapper.java
  4. 7
      src/main/java/cn/chjyj/szwh/service/OrderService.java
  5. 13
      src/main/java/cn/chjyj/szwh/service/PayService.java
  6. 47
      src/main/java/cn/chjyj/szwh/service/impl/OrderServiceImpl.java
  7. 2
      src/main/java/cn/chjyj/szwh/service/impl/OrderTaskServiceImpl.java
  8. 232
      src/main/java/cn/chjyj/szwh/service/impl/PayServiceImpl.java
  9. 11
      src/main/resources/mapper/szwh/OrderGoodsDetailMapper.xml
  10. 29
      src/main/resources/mapper/szwh/TiketMapper.xml
  11. 31
      src/test/java/cn/chjyj/szwh/Taxtest.java
  12. 16
      src/test/java/cn/chjyj/szwh/service/PayServiceTest.java

20
src/main/java/cn/chjyj/szwh/controller/api/OrderController.java

@ -196,13 +196,29 @@ public class OrderController extends BaseController {
* @return
*/
@RequestMapping("/getBalance")
public JSONObject getBalance() {
public JSONObject getBalance(@RequestBody String reqstr) {
log.info("orderController:"+reqstr);
return jsonObject;
}
/**
* 订单结算回调
* @return
*/
@RequestMapping("/orderCloseCallback")
public JSONObject orderCloseCallback() {
public JSONObject orderCloseCallback(@RequestBody String reqstr) {
log.info("orderCloseCallback"+reqstr);
JSONObject reqjson = JSONObject.parseObject(reqstr);
String reqdata = reqjson.getString("data");
//返回数据
if(StringUtils.isBlank(reqdata)){
log.error(reqjson+" 解析错误");
}
//执行处理
orderService.orderCloseCallback(reqdata);
// 请求转发到远程服务器
jsonObject.put("msg","成功");
return jsonObject;
}

8
src/main/java/cn/chjyj/szwh/mapper/OrderGoodsDetailMapper.java

@ -102,4 +102,12 @@ public interface OrderGoodsDetailMapper {
* @return
*/
int addOrderGoodsDetail(OrderGoodsDetail orderGoodsDetail);
/**
* 更新订单商品信息
* @param map
* @param id
* @return
*/
int updateOrderGoodsDetail(@Param("map") Map map, @Param("id")Integer id);
}

7
src/main/java/cn/chjyj/szwh/mapper/TicketMapper.java

@ -35,4 +35,11 @@ public interface TicketMapper {
* @return
*/
int countOrderTicket(Map map);
/**
* 储存发票信息
* @param ticket
* @return
*/
int addTicket(Ticket ticket);
}

7
src/main/java/cn/chjyj/szwh/service/OrderService.java

@ -126,4 +126,11 @@ public interface OrderService {
* @return
*/
Map<String,Object> buyCarGoods(String userIsli,JSONArray gJsonArray);
/**
* 订单结算回调
* @param cryptStr 待解密字符
* @return
*/
int orderCloseCallback(String cryptStr);
}

13
src/main/java/cn/chjyj/szwh/service/PayService.java

@ -25,4 +25,17 @@ public interface PayService {
*/
public int payCallback(JSONObject jsonObject);
/**
* 买家发票信息
* @param bathcode
* @return
*/
int invoiceBuyOperate(String bathcode);
/**
* 卖家发票信息
* @param bathcode
* @return
*/
int invoiceSellerOperate(String bathcode);
}

47
src/main/java/cn/chjyj/szwh/service/impl/OrderServiceImpl.java

@ -2,10 +2,13 @@ package cn.chjyj.szwh.service.impl;
import cn.chjyj.szwh.bean.*;
import cn.chjyj.szwh.constant.ChConstant;
import cn.chjyj.szwh.constant.PayConstant;
import cn.chjyj.szwh.exception.ChException;
import cn.chjyj.szwh.mapper.*;
import cn.chjyj.szwh.service.OrderService;
import cn.chjyj.szwh.utils.*;
import cn.chjyj.szwh.utils.pay.StringUtil;
import cn.chjyj.szwh.utils.pay.security.AesEncryption;
import cn.chjyj.szwh.vo.OrderDetailVo;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
@ -1052,6 +1055,50 @@ public class OrderServiceImpl implements OrderService {
return outmap;
}
//处理回调信息
@Override
public int orderCloseCallback(String cryptStr) {
try {
String desencrypt = AesEncryption.Desencrypt(cryptStr,
PayConstant.TOKEN_SECRETKEY, PayConstant.TOKEN_SECRETKEY);
//转为json
JSONObject outjson = JSONObject.parseObject(desencrypt);
//结算批号 (订单号)
String ordernumber = outjson.getString("ordernumber");
//支付流水号
String payorderid = outjson.getString("payorderid");
//结算状态
int closeStatus =5;
//返回的信息
String callMsg = outjson.getString("respmsg");
//更新订单商品详情
Map odmap = new HashMap();
odmap.put("close_id",ordernumber);
odmap.put("close_status",closeStatus);
odmap.put("close_serial_number",payorderid);
odmap.put("callback_msg", StringUtils.isNotBlank(callMsg)?callMsg:"-");
List<OrderGoodsDetail> ordglist = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(ordernumber);
//todo 后续更改为更新订单编号
for(OrderGoodsDetail odg:ordglist){
//更新字段
orderGoodsDetailMapper.updateOrderGoodsDetail(odmap,odg.getId());
}
//更新订单状态
Map ordmap = new HashMap();
ordmap.put("status",4);
Date curnow = new Date();
ordmap.put("closetime",curnow);
ordmap.put("completetime",curnow);
Order order = orderMapper.getOrderByBatchcode(ordernumber);
orderMapper.updateOrderStatus(ordmap,order.getId());
}catch (Exception ex){
log.error("支付结果解密异常:"+ex.getMessage());
}
return 0;
}
/**
* 结算
*

2
src/main/java/cn/chjyj/szwh/service/impl/OrderTaskServiceImpl.java

@ -43,7 +43,7 @@ public class OrderTaskServiceImpl implements OrderTaskService {
String now=sdf.format(bdate);
//组装查询条件
Map qmap =new HashMap<>();
qmap.put("staus",1);
qmap.put("staus",3);
qmap.put("createtime",now);
List<Order> orderList= orderMapper.getOrderListUnderDate(now,"1");
// 判断非空

232
src/main/java/cn/chjyj/szwh/service/impl/PayServiceImpl.java

@ -1,16 +1,17 @@
package cn.chjyj.szwh.service.impl;
import cn.chjyj.szwh.bean.Goods;
import cn.chjyj.szwh.bean.Order;
import cn.chjyj.szwh.bean.OrderGoodsDetail;
import cn.chjyj.szwh.bean.OrderUser;
import cn.chjyj.szwh.mapper.GoodsMapper;
import cn.chjyj.szwh.mapper.OrderGoodsDetailMapper;
import cn.chjyj.szwh.mapper.OrderMapper;
import cn.chjyj.szwh.mapper.OrderUserMapper;
import cn.chjyj.szwh.bean.*;
import cn.chjyj.szwh.constant.ChConstant;
import cn.chjyj.szwh.mapper.*;
import cn.chjyj.szwh.service.IndexService;
import cn.chjyj.szwh.service.PayService;
import cn.chjyj.szwh.utils.ProperUtils;
import cn.chjyj.szwh.utils.RequestUtils;
import cn.chjyj.szwh.utils.SzwhApiUtils;
import cn.chjyj.szwh.utils.TaxUtils;
import cn.chjyj.szwh.utils.pay.security.AesEncryption;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
@ -36,6 +37,8 @@ public class PayServiceImpl implements PayService {
//商品信息
@Autowired
private GoodsMapper goodsMapper;
@Autowired
private TicketMapper ticketMapper;
/**
* 关闭七日以前的已经支付了的订单
@ -67,9 +70,11 @@ public class PayServiceImpl implements PayService {
if(order.getPayStatus()!=2){
// do nothing
}
//订单状态
Integer status = order.getStatus();
Integer closeStatus= order.getCloseStatus();
Integer type =order.getType();
//查询购买用户
String buyIslicode = order.getBuyIslicode();
//购买用户
OrderUser oduser = orderUserMapper.getUserOrder(batchcode,buyIslicode);
@ -77,11 +82,10 @@ public class PayServiceImpl implements PayService {
Date paytime = order.getPaymenttime();
// 同步到其他平台
List syncList =new ArrayList<>();
//商品对应的合约编号
Map<Integer,String> ccmap = new HashMap();
//
Calendar cal= Calendar.getInstance();
// 分配比例设置及详情
//订单商品详情
List<OrderGoodsDetail> orderGoodsDetailList = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(batchcode);
for(OrderGoodsDetail odgd:orderGoodsDetailList){
@ -104,25 +108,105 @@ public class PayServiceImpl implements PayService {
// }
//合约关联编码(订单交易isli标识码)
String contractcode="";
if(StringUtils.isEmpty(odgd.getContractCode())){
// $ratio_setting = AccountRatioSetting::where('is_deleted', 0)->where('status', 1)->find();
// $entrust_ratio_detail = AccountRatioDetail::where('setting_id', $ratio_setting->id)->where('role_type', 1)->find();
// $ratio = 0;
// $entrust_number = 0;
// if($entrust_ratio_detail['calculate'] == 1){
// $entrust_number = $entrust_ratio_detail['ratio'];
// }else{
// $entrust_number = $entrust_ratio_detail['amount'];
// }
// $ratio = round(1 - ($entrust_number / 100), 4);
if(StringUtils.isEmpty(odgd.getContractCode()) || "-".equals(odgd.getContractCode())){
String ratio="0.00";
// 远程获取查询对应的 islicode
SzwhApiUtils.getApplyLinkCode(odgd.getGoodsIslicode(),buyIslicode,ratio,transCount,dateStr,batchcode);
JSONObject aplinkCodeJson=SzwhApiUtils.getApplyLinkCode(odgd.getGoodsIslicode(),
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{
contractcode = odgd.getContractCode();
}
//合约关联编号,更新到订单商品详情中
Map ogdmap= new HashMap();
ogdmap.put("contract_code",contractcode);
orderGoodsDetailMapper.updateOrderGoodsDetail(ogdmap,odgd.getId());
//订单商品详情id,为key, 合约编号为键值
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());
//委托周期
String entrmonth=odgd.getContractualPeriod()==1?"永久":"一次性";
syncmap.put("entrustMonth",entrmonth);
//委托类型
String gentr = odgd.getGoodsEntrust()==1?"转让":"许可";
syncmap.put("goodsEntrust" ,gentr);
syncmap.put("goodsOwnership",odgd.getGoodsOwnership());
//商品类型
String gtype =odgd.getGoodsType()==1?"文化资源数据":"文化数字内容";
syncmap.put("goodsType",gtype);
syncmap.put("payStatus", 1);
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;
}
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);
//add to list
syncList.add(syncmap);
}
//list 转为json 发送到相关接口
JSONArray wsynarr = new JSONArray(syncList);
//待同步过去的订单信息
String forsync = wsynarr.toJSONString();
JSONObject outSyncJson =SzwhApiUtils.synchInfo(forsync);
log.info(batchcode+"订单获取下载地址:"+outSyncJson);
//返回链接地址
if("00000000".equals(outSyncJson.getString("resultCode"))){
JSONArray syncArray = outSyncJson.getJSONArray("data");
//获取解密地址
JSONObject sjson = (JSONObject) syncArray.get(0);
//资源下载地址
String sourceUrl= sjson.getString("source_url");
//替换,然后提取出基本的地址信息
String resUrl = sourceUrl.replace("{isliCode}/{contractISLICode}","");
log.info("source base url:"+resUrl);
//遍历数据
for(OrderGoodsDetail ogd:orderGoodsDetailList){
//todo 检查 source_download 是否有内容
//请求依据同步订单信息返回的地址获取解密资源地址
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);
//合约关联编号,更新到订单商品详情中
Map togmap = new HashMap();
togmap.put("source_download",sdown.toString());
orderGoodsDetailMapper.updateOrderGoodsDetail(togmap,ogd.getId());
}
}
return 0;
}
@ -170,13 +254,12 @@ public class PayServiceImpl implements PayService {
//更新订单指定字段
orderMapper.updateOrderStatus(upmap,order.getId());
}
//订单信息发送至分发系统
// 处理订单其他信息
payFinishOperate(order.getBatchcode());
//买家发票信息等
invoiceBuyOperate(order.getBatchcode());
//卖家发票
// $this->payFinishOperate($batchcode);
// $this->invoiceBuyOperate($batchcode);
// $this->invoiceSellerOperate($batchcode);
invoiceSellerOperate(order.getBatchcode());
}
}catch (Exception ex){
@ -184,4 +267,95 @@ public class PayServiceImpl implements PayService {
}
return 0;
}
/**
* 买家发票信息
* @param bathcode
* @return
*/
@Override
public int invoiceBuyOperate(String bathcode) {
//发票存放路径
String pdfpath= ChConstant.INVOICE;
//订单
Order order = orderMapper.getOrderByBatchcode(bathcode);
//用户信息
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());//税号
//订单商品详情
List <OrderGoodsDetail> ordglist = orderGoodsDetailMapper.getOrderGoodsDetailByBatchCode(bathcode);
//发票信息
List taxlist = TaxUtils.TaxSpilt(ordglist,orderUser);
//
for(int i=0;i<taxlist.size();i++){
//taxlist.get(i).add
String taxreq = JSONObject.toJSONString(taxlist.get(i));
//发送请求
JSONObject outTax = SzwhApiUtils.taxRequest(taxreq);
//判断请求结果
if(outTax!=null){
if("S".equals(outTax.getString("operateCode"))){
JSONArray ottaxArr = outTax.getJSONArray("datas");
for(int o=1;o<ottaxArr.size();o++){
JSONObject tdjson = (JSONObject) ottaxArr.get(o);
//下载pdf 文件到 对应目录
String dpdf = outTax.getString("pdfUrl");
//ticketid
Long ticketid = outTax.getLong("serialNo");
// 存储到本地
String path= RequestUtils.downTaxTicket(dpdf,ticketid+".pdfs");
//构建发票实体
Ticket ticket = new Ticket();
ticket.setBatchcode(bathcode);
ticket.setIslicode(order.getBuyIslicode());
ticket.setTicketid(ticketid);
//
String totalTax =outTax.getString("totalAmountTax");
ticket.setTicketmoney(new BigDecimal(totalTax));
ticket.setPdfurl(dpdf);
//
ticket.setTicketStatus(3);
ticket.setTickettime(new Date());
ticket.setTicketapimessage("-");
//插入记录
ticketMapper.addTicket(ticket);
}
}else{ //
//构建发票实体
Ticket ticket = new Ticket();
ticket.setBatchcode(bathcode);
ticket.setIslicode(order.getBuyIslicode());
ticket.setTicketid(0l);
//
String totalTax =outTax.getString("totalAmountTax");
ticket.setTicketmoney(new BigDecimal(totalTax));
//
JSONArray ottaxArr = outTax.getJSONArray("datas");
for(int x=0;x<ottaxArr.size();x++){
JSONObject xjson = (JSONObject) ottaxArr.get(x);
ticket.setPdfurl(xjson.getString("pdfUrl"));
}
//
ticket.setTicketStatus(4);
ticket.setTickettime(new Date());
ticket.setTicketapimessage(outTax.getString("message"));
//insert into
ticketMapper.addTicket(ticket);
}
}
}
return 0;
}
@Override
public int invoiceSellerOperate(String bathcode) {
return 0;
}
}

11
src/main/resources/mapper/szwh/OrderGoodsDetailMapper.xml

@ -193,4 +193,15 @@
<update id="delOrderGoodsByBatchCode" parameterType="java.lang.String">
update <include refid="tbName" /> set is_deleted=1 where batchcode=#{batchcode}
</update>
<!-- 更新订单商品信息的字段 -->
<update id="updateOrderGoodsDetail">
update <include refid="tbName"/>
<set>
<foreach collection="map" item="v" index="k" separator="and">
${k} = #{v}
</foreach>
</set>
where id=#{id}
</update>
</mapper>

29
src/main/resources/mapper/szwh/TiketMapper.xml

@ -154,21 +154,21 @@
</select>
<!--新增用户-->
<insert id="addUser" parameterType="cn.chjyj.szwh.bean.Goods" useGeneratedKeys="true" keyColumn="uid">
insert into
<include refid="tbName"/>
(uname,password,gender,urealname,ubirth,nickname,avatarurl,platfrom,sessionkey,openid)
<insert id="addTicket" parameterType="cn.chjyj.szwh.bean.Ticket" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into <include refid="tbName"/>
(batchcode,islicode,ticketid,ticketmoney,pdfUrl,ticketurl,ticketimage
ticket_status as ticketStatus,ticketApiMessage,tickettime)
values (
#{uname},
#{password},
#{gender},
#{urealname},
#{ubirth},
#{nickname},
#{avatarurl},
#{platfrom},
#{sessionkey},
#{openid}
#{batchcode},
#{islicode},
#{ticketid},
#{ticketmoney},
#{pdfUrl},
#{ticketurl},
#{ticketimage},
#{ticket_status},
#{ticketApiMessage},
#{tickettime}
)
</insert>
@ -186,5 +186,4 @@
where id=#{id}
</update>
</mapper>

31
src/test/java/cn/chjyj/szwh/Taxtest.java

@ -0,0 +1,31 @@
package cn.chjyj.szwh;
import cn.chjyj.szwh.utils.SzwhApiUtils;
import cn.chjyj.szwh.utils.TaxUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.math.BigDecimal;
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class Taxtest {
/**
* 计算发票张数
*/
@Test
public void tpscount(){
BigDecimal cc = new BigDecimal("32000");
int num = TaxUtils.countTaxPapers(cc.longValue(),1);
System.out.println(num);
}
//发票请求凭据
@Test
public void taxrqtokenTest(){
String token = SzwhApiUtils.taxReqToken();
System.out.println(token);
}
}

16
src/test/java/cn/chjyj/szwh/service/PayServiceTest.java

@ -30,6 +30,8 @@ public class PayServiceTest {
private OrderGoodsDetailMapper orderGoodsDetailMapper;
@Autowired
private GoodsMapper goodsMapper;
@Autowired
private PayService payService;
@Test
public void payComplete() {
@ -90,4 +92,18 @@ public class PayServiceTest {
}
//支付完成后的操作
@Test
public void paop(){
String bac ="1669354770578266";
payService.payFinishOperate(bac);
}
//买家发票
@Test
public void invoicebuer(){
String bac ="1669354770578266";
payService.invoiceBuyOperate(bac);
}
}
Loading…
Cancel
Save