bruce

仓管费

package com.cjs.site.action.user.fund;
import com.cjs.site.biz.user.pick.PickPayBiz;
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.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
* Created by bruce on 2019-05-14 13:41
*/
@Controller
@RequestMapping("/pick/pay")
public class PickPayAction {
@Autowired
private PickPayBiz pickPayBiz;
//创建订单
@RequestMapping(value = "/createOrder", method = RequestMethod.GET)
@ResponseBody
public Object createOrder() {
return pickPayBiz.createOrder();
}
//支付通知
@RequestMapping(value = "notify", method = RequestMethod.POST)
public String notify(HttpServletRequest request) {
pickPayBiz.isValidNotify(request);
return "/jsp/payResult.jsp";
}
}
......@@ -92,7 +92,7 @@ public class PickAction {
}
/**自提*/
@RequestMapping("self")
@RequestMapping("self")//todo 自提方式重定向页面应跳转到待支付页面
public String selfPick(OutpropApplyPickInfo pickInfo, Model model,
RedirectAttributes attributes) {
ResultInfo resultInfo = pickBiz.selfPick(pickInfo);
......@@ -101,7 +101,7 @@ public class PickAction {
if (resultInfo.getCode() == 0) {
return "user/pick/self.jsp";
}
return "redirect:/user/pick/success?pickType=self";
return "redirect:/user/pick/payInfo?pickType=2";
}
/**网点自提*/
......@@ -115,7 +115,7 @@ public class PickAction {
}
attributes.addFlashAttribute("warehouse",
warehouseDao.queryByCode(pickInfo.getWarehouseCode()));
return "redirect:/user/pick/success?pickType=self";
return "redirect:/user/pick/payInfo?pickType=2";
}
/**顺丰到付*/
......@@ -134,7 +134,7 @@ public class PickAction {
}
/**转赵涌在线拍卖*/
@RequestMapping("zhaoonline")
@RequestMapping("zhaoonline")//todo `转赵涌在线拍卖跳转
public String zhaoonlinePick(OutpropApplyPickInfo pickInfo, Model model,
RedirectAttributes attributes) {
ResultInfo resultInfo = pickBiz.zhaoonlinePick(pickInfo);
......@@ -180,7 +180,7 @@ public class PickAction {
pickTotal += apply.getOccurAmount();
}
Double totoalAmount = 0.01D * DateUtil.getTrustCycle() * pickTotal;
model.addAttribute("pickType",pickType);
model.addAttribute("pickType", pickType);
model.addAttribute("applyList", applyList);
model.addAttribute("warehousingCharges", totoalAmount);
model.addAttribute("totalAmount", totoalAmount + 6D);
......
......@@ -529,7 +529,7 @@ public class PickBiz {
}
/**生成订单号*/
private String createPickNo() {
public String createPickNo() {
String pickNo = DateUtil.getNow(DateEnum.UNSIGNED_DATE);
String sequence = jedisTemplate.incr(pickNo).toString();
sequence = StringUtils.leftPad(sequence, 4, "0");
......
package com.cjs.site.biz.user.pick;
import com.cjs.site.dao.user.pick.OutpropApplyPayDao;
import com.cjs.site.dao.user.pick.PickPackDao;
import com.cjs.site.model.union.CreateQrCode;
import com.cjs.site.model.union.UnionResponse;
import com.cjs.site.model.user.pick.OutpropApplyPayInfo;
import com.cjs.site.model.user.pick.PickPackInfo;
import com.cjs.site.util.lang.DateEnum;
import com.cjs.site.util.lang.DateUtil;
import com.cjs.site.util.lang.JsonUtil;
import com.cjs.site.util.union.UnionConstants;
import com.cjs.site.util.union.UnionPayUtil;
import com.cjs.site.util.web.ActionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by bruce on 2019-05-06 17:22
*/
@Service
public class PickPayBiz {
@Autowired
private OutpropApplyPayDao outpropApplyPayDao;
@Autowired
private PickPackDao pickPackDao;
@Autowired
private PickBiz pickBiz;
@Autowired
@Qualifier("transactionManagerOracle")
private DataSourceTransactionManager transactionManager;
public Map<String, Object> createOrder() {
Map<String, Object> result = new HashMap<String, Object>();
result.put("code", true);
String userId = ActionUtil.getUser().getUserId();
List<PickPackInfo> applyList = pickPackDao.queryUserPosition(userId);
int pickTotal = 0;
for (PickPackInfo apply : applyList) {
pickTotal += apply.getCurrentAmount();
}
Double totalAmount = (0.01D * DateUtil.getTrustCycle() * pickTotal) + 6D;
result.put("totalAmount", totalAmount);
String pickNo = pickBiz.createPickNo();
try {
CreateQrCode createQrCode = new CreateQrCode();
createQrCode.setBillNo(UnionPayUtil.getOrderNo());
createQrCode.setTotalAmount(totalAmount.toString());
createQrCode.setRequestTimestamp(DateUtil.getNow());
createQrCode.setBillDate(DateUtil.getNow(DateEnum.DATE));
createQrCode.setSrcReserve(pickNo);
@SuppressWarnings("unchecked")
Map<String, String> mapTypes = JsonUtil.fromJson(JsonUtil.toJson(createQrCode), Map.class);
String json = UnionPayUtil.sendPost(UnionConstants.CREATE_ORDER, mapTypes);
UnionResponse response = JsonUtil.fromJson(json, UnionResponse.class);
if (response != null && response.getErrCode().equals(UnionConstants.SUCCESS_CODE)) {
result.put("qrCode", UnionPayUtil.createQrCode(createQrCode.getBillNo()));
insertPickPay(userId, createQrCode.getBillNo(), pickNo);
} else {
result.put("code", false);
result.put("msg", response.getErrMsg());
}
} catch (Exception e) {
result.put("code", false);
result.put("msg", e.getMessage());
}
return result;
}
public Boolean isValidNotify(HttpServletRequest request) {
Map<String, String> result = UnionPayUtil.getRequestParams(request);
if (UnionPayUtil.checkSign(result)) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(def);
try {
OutpropApplyPayInfo info = outpropApplyPayDao.selectByTradeNo(result.get("billNo"));
if (!info.getStatus().equals("2")) {
OutpropApplyPayInfo update = new OutpropApplyPayInfo();
update.setTradeNo(result.get("srcReserve"));
update.setStatus("2");
outpropApplyPayDao.update(update);
//todo 更新库存,生成提货单<包含提货类型,提货人,提货日期,保价费>
}
transactionManager.commit(status);
return true;
} catch (Exception e) {
transactionManager.rollback(status);
}
}
return false;
}
private void insertPickPay(String clientId, String tradeNo, String applyNo) {
OutpropApplyPayInfo insert = new OutpropApplyPayInfo();
insert.setCreatedAt(DateUtil.getNow());
insert.setClientId(clientId);
insert.setStatus("1");
insert.setTradeNo(tradeNo);
insert.setApplyNo(applyNo);
outpropApplyPayDao.insert(insert);
}
}
package com.cjs.site.dao.user.pick;
import com.cjs.site.model.user.pick.OutpropApplyPayInfo;
import org.springframework.stereotype.Repository;
/**
* Created by bruce on 2019-05-06 16:22
*/
@Repository
public interface OutpropApplyPayDao {
void insert(OutpropApplyPayInfo entity);
void update(OutpropApplyPayInfo entity);
OutpropApplyPayInfo selectByTradeNo(String tradeNo);
}
package com.cjs.site.model.union;
import com.cjs.site.util.union.UnionConstants;
import java.io.Serializable;
/**
* Created by bruce on 2019-05-14 11:00
*/
public class CreateQrCode implements Serializable {
private static final long serialVersionUID = 4945657951041450816L;
private String msgSrc = "赵涌牛";
private String msgType = "bills.getQRCode";
private String requestTimestamp;
private String srcReserve;
private String mid = UnionConstants.MID;
private String tid = UnionConstants.TID;
private String instMid = "QRPAYDEFAULT";
private String billNo;
private String billDate;
private String totalAmount;
public String getMsgSrc() {
return msgSrc;
}
public void setMsgSrc(String msgSrc) {
this.msgSrc = msgSrc;
}
public String getMsgType() {
return msgType;
}
public void setMsgType(String msgType) {
this.msgType = msgType;
}
public String getRequestTimestamp() {
return requestTimestamp;
}
public void setRequestTimestamp(String requestTimestamp) {
this.requestTimestamp = requestTimestamp;
}
public String getSrcReserve() {
return srcReserve;
}
public void setSrcReserve(String srcReserve) {
this.srcReserve = srcReserve;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getTid() {
return tid;
}
public void setTid(String tid) {
this.tid = tid;
}
public String getInstMid() {
return instMid;
}
public void setInstMid(String instMid) {
this.instMid = instMid;
}
public String getBillNo() {
return billNo;
}
public void setBillNo(String billNo) {
this.billNo = billNo;
}
public String getBillDate() {
return billDate;
}
public void setBillDate(String billDate) {
this.billDate = billDate;
}
public String getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(String totalAmount) {
this.totalAmount = totalAmount;
}
}
package com.cjs.site.model.union;
import java.io.Serializable;
/**
* Created by bruce on 2019-05-14 10:59
*/
public class UnionResponse implements Serializable {
private static final long serialVersionUID = 890856890563059584L;
private String errCode;
private String errMsg;
private String msgSrc;
private String responseTimestamp;
private String srcReserve;
private String sign;
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public String getMsgSrc() {
return msgSrc;
}
public void setMsgSrc(String msgSrc) {
this.msgSrc = msgSrc;
}
public String getResponseTimestamp() {
return responseTimestamp;
}
public void setResponseTimestamp(String responseTimestamp) {
this.responseTimestamp = responseTimestamp;
}
public String getSrcReserve() {
return srcReserve;
}
public void setSrcReserve(String srcReserve) {
this.srcReserve = srcReserve;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
}
package com.cjs.site.model.user.pick;
import com.cjs.site.model.BaseInfo;
/**
* Created by bruce on 2019-05-06 16:25
*/
public class OutpropApplyPayInfo extends BaseInfo {
private static final long serialVersionUID = 6737890770319470632L;
private String tradeNo;
private String clientId;
private String applyNo;
private String status;//1待支付;2已支付;3支付失败
private String payAt;
private String createdAt;
private String updatedAt;
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getApplyNo() {
return applyNo;
}
public void setApplyNo(String applyNo) {
this.applyNo = applyNo;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getPayAt() {
return payAt;
}
public void setPayAt(String payAt) {
this.payAt = payAt;
}
public String getCreatedAt() {
return createdAt;
}
public void setCreatedAt(String createdAt) {
this.createdAt = createdAt;
}
public String getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(String updatedAt) {
this.updatedAt = updatedAt;
}
}
......@@ -30,8 +30,10 @@ public enum DateEnum {
DATETIME("yyyy-MM-dd HH:mm:ss"),
/** yyyy-MM-dd HH:mm */
DATETIME2("yyyy-MM-dd HH:mm");
DATETIME2("yyyy-MM-dd HH:mm"),
//yyyyMMddmmHHssSSS
UNSIGNED_DATE_TIME_MILLS("yyyyMMddmmHHssSSS");
private String value;
private DateEnum(String value) {
......
......@@ -86,7 +86,7 @@ public final class DateUtil {
Date targetDate;
Date currentDate;
try {
targetDate = sdf.parse("2019-04-18");
targetDate = sdf.parse("2019-05-01");
currentDate = new Date();
result =(int)((currentDate.getTime()-targetDate.getTime())/(24*60*60*1000));
} catch (ParseException e) {
......
......@@ -95,7 +95,6 @@ public class SandPayUtil {
e.printStackTrace();
return "转码出错";
}
}
private static String getReqTime() {
......@@ -136,7 +135,7 @@ public class SandPayUtil {
return result;
}
private static String map2String(Map<String, String> params) {
public static String map2String(Map<String, String> params) {
List<String> keys = new ArrayList<String>(params.keySet());
Collections.sort(keys);
StringBuilder prestr = new StringBuilder();
......
package com.cjs.site.util.union;
/**
* Created by bruce on 2019-05-14 10:11
*/
public class UnionConstants {
/**
* 银联商务支付网关
*/
private static final String BASE_URL = "https://qr-test2.chinaums.com";
/**
* 银联商务发起订单请求url
*/
public static final String CREATE_ORDER = BASE_URL + "/netpay-route-server/api/";
/**
* 银联商务生成二维码的url
*/
public static final String QRCODE_URL = BASE_URL + "/bills/qrCode.do?id=";
/**
* 银联商务分配的来源编号
*/
public static final String MSG_ID = "0001";
/**
* 银联商务分配的商户号
*/
public static final String MID = "98632165101";
/**
* 终端号,默认赋值
*/
public static final String TID = "A00000001";
/**
* 银联商务分配的密钥
*/
public static final String MD5_KEY = "SFASDGSDDFERQRSADFAYTJRGJGFH";
/**
* 银联商务response返回正确的状态码
*/
public static final String SUCCESS_CODE = "BAD_REQUEST";
}
package com.cjs.site.util.union;
import com.cjs.site.model.union.CreateQrCode;
import com.cjs.site.model.union.UnionResponse;
import com.cjs.site.util.lang.DateEnum;
import com.cjs.site.util.lang.DateUtil;
import com.cjs.site.util.lang.JsonUtil;
import com.cjs.site.util.sand.SandPayUtil;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Created by bruce on 2019-05-14 10:07
*/
public class UnionPayUtil {
public static String createQrCode(String qrCodeId) {
return UnionConstants.QRCODE_URL + qrCodeId;
}
private static String makeSign(Map<String, String> params) {
String preStr = SandPayUtil.map2String(params);
String text = preStr + UnionConstants.MD5_KEY;
return DigestUtils.md5Hex(getContentBytes(text)).toUpperCase();
}
public static Boolean checkSign(Map<String, String> params) {
String sign = params.get("sign");
if (StringUtils.isBlank(sign)) {
return false;
}
String signV = makeSign(params);
return StringUtils.equalsIgnoreCase(sign, signV);
}
public static String getOrderNo() {
String date = DateUtil.parseDate(new Date(), DateEnum.UNSIGNED_DATE_TIME_MILLS);
String rand = RandomStringUtils.randomNumeric(7);
return UnionConstants.MSG_ID + date + rand;
}
private static byte[] getContentBytes(String content) {
try {
return content.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("签名过程中出现错误");
}
}
public static Map<String, String> getRequestParams(HttpServletRequest request) {
Map<String, String[]> params = request.getParameterMap();
Map<String, String> params2 = new HashMap<String, String>();
for (String key : params.keySet()) {
String[] values = params.get(key);
if (values.length > 0) {
params2.put(key, values[0]);
}
}
return params2;
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
CreateQrCode createQrCode = new CreateQrCode();
createQrCode.setBillNo(getOrderNo());
createQrCode.setTotalAmount("1D");
createQrCode.setRequestTimestamp(DateUtil.getNow());
createQrCode.setBillDate(DateUtil.getNow(DateEnum.DATE));
createQrCode.setSrcReserve("201905140001");
Map<String, String> mapTypes = JsonUtil.fromJson(JsonUtil.toJson(createQrCode), Map.class);
String json = sendPost(UnionConstants.CREATE_ORDER, mapTypes);
UnionResponse response = JsonUtil.fromJson(json, UnionResponse.class);
System.out.println(JsonUtil.toJson(response));
}
public static String sendPost(String url, Map<String, String> data) {
PrintWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder();
Map<String, String> params = new HashMap<String, String>();
params.put("sign", makeSign(data));
try {
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
out.print(SandPayUtil.map2String(params));
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
e.printStackTrace();
result.append(e.getMessage());
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
try {
return URLDecoder.decode(result.toString(), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "转码出错";
}
}
}
This diff is collapsed. Click to expand it.
/** layui-v2.2.5 MIT License By https://www.layui.com */
;!function(e){"use strict";var t=document,n={modules:{},status:{},timeout:10,event:{}},o=function(){this.v="2.2.5"},r=function(){var e=t.currentScript?t.currentScript.src:function(){for(var e,n=t.scripts,o=n.length-1,r=o;r>0;r--)if("interactive"===n[r].readyState){e=n[r].src;break}return e||n[o].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),a=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},i="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),u={layer:"modules-2.2.5/layer",laydate:"modules-2.2.5/laydate",laypage:"modules-2.2.5/laypage",laytpl:"modules-2.2.5/laytpl",layim:"modules-2.2.5/layim",layedit:"modules-2.2.5/layedit",form:"modules-2.2.5/form",upload:"modules-2.2.5/upload",tree:"modules-2.2.5/tree",table:"modules-2.2.5/table",element:"modules-2.2.5/element",util:"modules-2.2.5/util",flow:"modules-2.2.5/flow",carousel:"modules-2.2.5/carousel",code:"modules-2.2.5/code",jquery:"modules-2.2.5/jquery",mobile:"modules-2.2.5/mobile","layui.all":"../layui.all"};o.prototype.cache=n,o.prototype.define=function(e,t){var o=this,r="function"==typeof e,a=function(){var e=function(e,t){layui[e]=t,n.status[e]=!0};return"function"==typeof t&&t(function(o,r){e(o,r),n.callback[o]=function(){t(e)}}),this};return r&&(t=e,e=[]),layui["layui.all"]||!layui["layui.all"]&&layui["layui.mobile"]?a.call(o):(o.use(e,a),o)},o.prototype.use=function(e,o,l){function s(e,t){var o="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||o.test((e.currentTarget||e.srcElement).readyState))&&(n.modules[f]=t,d.removeChild(v),function r(){return++m>1e3*n.timeout/4?a(f+" is not a valid module"):void(n.status[f]?c():setTimeout(r,4))}())}function c(){l.push(layui[f]),e.length>1?y.use(e.slice(1),o,l):"function"==typeof o&&o.apply(layui,l)}var y=this,p=n.dir=n.dir?n.dir:r,d=t.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(y.each(e,function(t,n){"jquery"===n&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var f=e[0],m=0;if(l=l||[],n.host=n.host||(p.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&u[f]||!layui["layui.all"]&&layui["layui.mobile"]&&u[f])return c(),y;if(n.modules[f])!function g(){return++m>1e3*n.timeout/4?a(f+" is not a valid module"):void("string"==typeof n.modules[f]&&n.status[f]?c():setTimeout(g,4))}();else{var v=t.createElement("script"),h=(u[f]?p+"layui/":/^\{\/\}/.test(y.modules[f])?"":n.base||"")+(y.modules[f]||f)+".js";h=h.replace(/^\{\/\}/,""),v.async=!0,v.charset="utf-8",v.src=h+function(){var e=n.version===!0?n.v||(new Date).getTime():n.version||"";return e?"?v="+e:""}(),d.appendChild(v),!v.attachEvent||v.attachEvent.toString&&v.attachEvent.toString().indexOf("[native code")<0||i?v.addEventListener("load",function(e){s(e,h)},!1):v.attachEvent("onreadystatechange",function(e){s(e,h)}),n.modules[f]=h}return y},o.prototype.getStyle=function(t,n){var o=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return o[o.getPropertyValue?"getPropertyValue":"getAttribute"](n)},o.prototype.link=function(e,o,r){var i=this,u=t.createElement("link"),l=t.getElementsByTagName("head")[0];"string"==typeof o&&(r=o);var s=(r||e).replace(/\.|\//g,""),c=u.id="layuicss-"+s,y=0;return u.rel="stylesheet",u.href=e+(n.debug?"?v="+(new Date).getTime():""),u.media="all",t.getElementById(c)||l.appendChild(u),"function"!=typeof o?i:(function p(){return++y>1e3*n.timeout/100?a(e+" timeout"):void(1989===parseInt(i.getStyle(t.getElementById(c),"width"))?function(){o()}():setTimeout(p,100))}(),i)},n.callback={},o.prototype.factory=function(e){if(layui[e])return"function"==typeof n.callback[e]?n.callback[e]:null},o.prototype.addcss=function(e,t,o){return layui.link("http://m.ytgrading.com/lib/css/layui/modules-2.2.5/"+e.substring(8),t,o)},o.prototype.img=function(e,t,n){var o=new Image;return o.src=e,o.complete?t(o):(o.onload=function(){o.onload=null,t(o)},void(o.onerror=function(e){o.onerror=null,n(e)}))},o.prototype.config=function(e){e=e||{};for(var t in e)n[t]=e[t];return this},o.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),o.prototype.extend=function(e){var t=this;e=e||{};for(var n in e)t[n]||t.modules[n]?a("模块名 "+n+" 已被占用"):t.modules[n]=e[n];return t},o.prototype.router=function(e){var t=this,e=e||location.hash,n={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(e)?(n.href=e=e.replace(/^#\//,""),e=e.replace(/([^#])(#.*$)/,"$1").split("/")||[],t.each(e,function(e,t){/^\w+=/.test(t)?function(){t=t.split("="),n.search[t[0]]=t[1]}():n.path.push(t)}),n):n},o.prototype.data=function(t,n,o){if(t=t||"layui",o=o||localStorage,e.JSON&&e.JSON.parse){if(null===n)return delete o[t];n="object"==typeof n?n:{key:n};try{var r=JSON.parse(o[t])}catch(a){var r={}}return"value"in n&&(r[n.key]=n.value),n.remove&&delete r[n.key],o[t]=JSON.stringify(r),n.key?r[n.key]:r}},o.prototype.sessionData=function(e,t){return this.data(e,t,sessionStorage)},o.prototype.device=function(t){var n=navigator.userAgent.toLowerCase(),o=function(e){var t=new RegExp(e+"/([^\\s\\_\\-]+)");return e=(n.match(t)||[])[1],e||!1},r={os:function(){return/windows/.test(n)?"windows":/linux/.test(n)?"linux":/iphone|ipod|ipad|ios/.test(n)?"ios":/mac/.test(n)?"mac":void 0}(),ie:function(){return!!(e.ActiveXObject||"ActiveXObject"in e)&&((n.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:o("micromessenger")};return t&&!r[t]&&(r[t]=o(t)),r.android=/android/.test(n),r.ios="ios"===r.os,r},o.prototype.hint=function(){return{error:a}},o.prototype.each=function(e,t){var n,o=this;if("function"!=typeof t)return o;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;n<e.length&&!t.call(e[n],n,e[n]);n++);return o},o.prototype.sort=function(e,t,n){var o=JSON.parse(JSON.stringify(e||[]));return t?(o.sort(function(e,n){var o=/^-?\d+$/,r=e[t],a=n[t];return o.test(r)&&(r=parseFloat(r)),o.test(a)&&(a=parseFloat(a)),r&&!a?1:!r&&a?-1:r>a?1:r<a?-1:0}),n&&o.reverse(),o):o},o.prototype.stope=function(t){t=t||e.event;try{t.stopPropagation()}catch(n){t.cancelBubble=!0}},o.prototype.onevent=function(e,t,n){return"string"!=typeof e||"function"!=typeof n?this:o.event(e,t,null,n)},o.prototype.event=o.event=function(e,t,o,r){var a=this,i=null,u=t.match(/\((.*)\)$/)||[],l=(e+"."+t).replace(u[0],""),s=u[1]||"",c=function(e,t){var n=t&&t.call(a,o);n===!1&&null===i&&(i=!1)};return r?(n.event[l]=n.event[l]||{},n.event[l][s]=[r],this):(layui.each(n.event[l],function(e,t){return"{*}"===s?void layui.each(t,c):(""===e&&layui.each(t,c),void(e===s&&layui.each(t,c)))}),i)},e.layui=new o}(window);
/*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */
;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?'<h3 style="'+(e?n.title[1]:"")+'">'+(e?n.title[0]:n.title)+"</h3>":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e='<span yes type="1">'+n.btn[0]+"</span>",2===t&&(e='<span no type="0">'+n.btn[1]+"</span>"+e),'<div class="layui-m-layerbtn">'+e+"</div>"):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content='<i></i><i class="layui-m-layerload"></i><i></i><p>'+(n.content||"")+"</p>"),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"<div "+("string"==typeof n.shade?'style="'+n.shade+'"':"")+' class="layui-m-layershade"></div>':"")+'<div class="layui-m-layermain" '+(n.fixed?"":'style="position:static;"')+'><div class="layui-m-layersection"><div class="layui-m-layerchild '+(n.skin?"layui-m-layer-"+n.skin+" ":"")+(n.className?n.className:"")+" "+(n.anim?"layui-m-anim-"+n.anim:"")+'" '+(n.style?'style="'+n.style+'"':"")+">"+l+'<div class="layui-m-layercont">'+n.content+"</div>"+c+"</div></div></div>",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;o<r;o++)l.touch(s[o],a);if(e.shade&&e.shadeClose){var c=t[i]("layui-m-layershade")[0];l.touch(c,function(){layer.close(n.index,e.end)})}e.end&&(l.end[n.index]=e.end)},e.layer={v:"2.0",index:r,open:function(e){var t=new c(e||{});return t.index},close:function(e){var n=a("#"+o[0]+e)[0];n&&(n.innerHTML="",t.body.removeChild(n),clearTimeout(l.timer[e]),delete l.timer[e],"function"==typeof l.end[e]&&l.end[e](),delete l.end[e])},closeAll:function(){for(var e=t[i](o[0]),n=0,a=e.length;n<a;n++)layer.close(0|e[0].getAttribute("index"))}},"function"==typeof define?define(function(){return layer}):function(){var e=document.scripts,n=e[e.length-1],i=n.src,a=i.substring(0,i.lastIndexOf("/")+1);n.getAttribute("merge")||document.head.appendChild(function(){var e=t.createElement("link");return e.href=a+"need/layer.css?2.0",e.type="text/css",e.rel="styleSheet",e.id="layermcss",e}())}()}(window);
\ No newline at end of file
.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}
\ No newline at end of file
This diff is collapsed. Click to expand it.
......@@ -13,15 +13,74 @@
<link href="${ctx }/resource/css/jquery-date/latoja.datepicker.css" rel="stylesheet" />
<link href="${ctx }/resource/css/detail.css" rel="stylesheet" type="text/css" />
<link href="${ctx }/resource/css/home.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="${ctx }/resource/js/utils/jquery/jquery-ui-1.10.1.min.js"></script>
<script type="text/javascript" src="${ctx }/resource/js/utils/jquery/jquery.ui.datepicker-zh-cn.js"></script>
<script type="text/javascript" src="${ctx }/resource/js/user/pick/pick.js"></script>
<script type="text/javascript" src="${ctx }/resource/js/user/pick/self.js"></script>
<script type="text/javascript" src="${ctx }/resource/js/layer/jquery.min.js"></script>
<script type="text/javascript" src="${ctx }/resource/js/layer/layer.js"></script>
<script type="text/javascript" src="${ctx }/resource/js/layer/layui-2.2.5.js"></script>
<%--<script type="text/javascript" src="${ctx }/resource/js/layer/qrcode.js"></script>--%>
<script type="text/javascript" src="//cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="//static.runoob.com/assets/qrcode/qrcode.min.js"></script>
<script type="text/javascript">
var errorMessage = '${ resultInfo.message }';
//最小提货日期(0:普通自提;1:封装自提)
var minDate = '${sessionScope.pack}' == '1' ? '+7' : '+0';
$(function() {
var Pay = {
init: function() {
this.bind();
this.render();
},
bind: function() {
$(document).on('click', '#payBtn', this.showPayDialog);
},
render: function() {
},
showPayDialog: function(){
$.ajax({
type: "get",
url: "/pick/pay/createOrder",
success : function(data){
if(data.code){
var laytpl = layui.laytpl;
layer.open({
type: 1,
title: '付款码',
closeBtn: 1,
area: ['800px;', '500px'],
shade: 0.8,
id: 'payDialogContent',
skin: 'payDialogContent',
btnAlign: 'c',
moveType: 1,
content: ''
});
var htmlStr = '';
htmlStr += '<div style="width:100%;height:50px;font-size:16px;text-align:center;padding-top:30px;">'
htmlStr += '请打开微信或支付宝app扫码进行支付'
htmlStr += '</div>'
htmlStr += '<div style="width:100%;height:60px;font-size:22px;text-align:center;color:#f20000;font-weight:bold;">'
htmlStr += data.totalAmount + '元'
htmlStr += '</div>'
htmlStr += '<div style="width: 200px;height: 200px;margin: 0 auto;">'
htmlStr += '<div style="width:100%;height:100%;" id="qrcode"></div>'
htmlStr += '</div>'
htmlStr += '<div style="width:100%;height:30px;font-size:16px;text-align:center;padding-top:30px;">'
htmlStr += '付款码每2分钟刷新一次,请在规定时间内完成付款'
htmlStr += '</div>'
$('#payDialogContent').html(htmlStr);
var qrcode = new QRCode(document.getElementById("qrcode"));
qrcode.makeCode(data.qrCode);
}else{
layer.msg(data.msg, {icon: '2'});
}
}
});
}
};
window.Pay = Pay;
Pay.init();
});
</script>
<style>
#qrcode img { width: 100%; }
</style>
</head>
<body>
<jsp:include page="${ctx }/view/common/header.jsp" />
......@@ -151,7 +210,7 @@
<span id="spPickType"></span>
<span id="spDelegateName"></span>
<span id="spDelegateId" class="bold"></span>
<a style="text-align: center;" class="red-btn">确认支付</a>
<a id="payBtn" style="text-align: center;" class="red-btn">确认支付</a>
</p>
</div>
</div>
......@@ -159,6 +218,19 @@
</div>
</div>
<div class="clear"></div>
<script type="text/html" id="payDialog">
<div style="width: 600px;height: 500px;">
<div style="width: 100%;height: 30px;line-height: 30px;text-align: center;font-size: 18px;font-weight: bold;">
付款码
</div>
<div>
请打开微信或支付宝app扫码进行支付
</div>
<div>
付款码每2分钟刷新一次,请在规定时间内完成付款
</div>
</div>
</script>
<jsp:include page="${ctx }/view/common/bottom.jsp" />
</body>
</html>
\ No newline at end of file
......