shenhao 4 лет назад
Родитель
Сommit
cb334742c3

+ 130 - 0
src/main/java/com/ssj/bean/weixin/sales/domain/LibInvoiceManage.java

@@ -0,0 +1,130 @@
+package com.ssj.bean.weixin.sales.domain;
+
+import com.ssj.bean.common.framework.core.domain.BaseEntity;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author sh
+ * @className LibInvoiceManage
+ * @description 开票明细
+ * @date 2021/4/21
+ */
+@Entity
+@Table(name="tb_lib_invoice_manage")
+public class LibInvoiceManage extends BaseEntity {
+
+    /**
+     * 发票抬头类型 1-个人 2-企业
+     */
+    private Integer type;
+    /**
+     * 发票抬头
+     */
+    private String invoiceTitle;
+    /**
+     * 纳税人识别号
+     */
+    private String taxpayerId;
+
+    /**
+     * 接收电子邮箱
+     */
+    private String email;
+
+    /**
+     * 发票类型(增值税电子普通发票)
+     */
+    private String invoiceType;
+
+    /**
+     * 发票内容(咨询服务费)
+     */
+    private String invoiceContent;
+
+
+    private BigDecimal price;
+
+    private Date createTime;
+
+    /**
+     * 订单表id tb_lib_order_details.id
+     */
+    private String orderDetailId;
+
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getInvoiceTitle() {
+        return invoiceTitle;
+    }
+
+    public void setInvoiceTitle(String invoiceTitle) {
+        this.invoiceTitle = invoiceTitle;
+    }
+
+    public String getTaxpayerId() {
+        return taxpayerId;
+    }
+
+    public void setTaxpayerId(String taxpayerId) {
+        this.taxpayerId = taxpayerId;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getInvoiceType() {
+        return invoiceType;
+    }
+
+    public void setInvoiceType(String invoiceType) {
+        this.invoiceType = invoiceType;
+    }
+
+    public String getInvoiceContent() {
+        return invoiceContent;
+    }
+
+    public void setInvoiceContent(String invoiceContent) {
+        this.invoiceContent = invoiceContent;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public String getOrderDetailId() {
+        return orderDetailId;
+    }
+
+    public void setOrderDetailId(String orderDetailId) {
+        this.orderDetailId = orderDetailId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 14 - 0
src/main/java/com/ssj/bean/weixin/sales/domain/LibOrderDetails.java

@@ -183,6 +183,11 @@ public class LibOrderDetails  extends BaseEntity{
 	 */
 	private Date startTime;
 
+	/**
+	 * 是否已开票 1-是 2-申请中 其它未开具
+	 */
+	private Integer invoiceState;
+
 	public Date getStartTime() {
 		return startTime;
 	}
@@ -423,4 +428,13 @@ public class LibOrderDetails  extends BaseEntity{
 	public void setIsClose(Integer isClose) {
 		this.isClose = isClose;
 	}
+
+	public Integer getInvoiceState() {
+		return invoiceState;
+	}
+
+	public void setInvoiceState(Integer invoiceState) {
+		this.invoiceState = invoiceState;
+	}
+
 }

+ 15 - 0
src/main/java/com/ssj/dao/weixin/adminsale/dao/InvoiceManageDao.java

@@ -0,0 +1,15 @@
+package com.ssj.dao.weixin.adminsale.dao;
+
+import com.ssj.bean.weixin.sales.domain.LibInvoiceManage;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author sh
+ * @className InvoiceManageDao
+ * @description Repository
+ * @date 2021/4/21
+ */
+@Repository
+public interface InvoiceManageDao extends JpaRepository<LibInvoiceManage,String> {
+}

+ 6 - 2
src/main/java/com/ssj/dao/weixin/sales/dao/impl/LibOrderDetailsQueryDaoImpl.java

@@ -58,8 +58,12 @@ public class LibOrderDetailsQueryDaoImpl  implements LibOrderDetailsQueryDao {
 		        }
 		        if (searchParams.get("order_no") != null && !searchParams.get("order_no").equals("")) {
 	        		selSQL.append(" and d.order_no = ?  ");
-	        	queryParams.add(searchParams.get("order_no"));
-	        }
+	        		queryParams.add(searchParams.get("order_no"));
+	        	}
+		        if (searchParams.get("userId") != null && !searchParams.get("userId").equals("")) {
+	        		selSQL.append(" and d.user_id = ?  ");
+	        		queryParams.add(searchParams.get("userId"));
+	        	}
 		        
 		        selSQL.append(" order by d.create_time  desc  ");
 		    return dao.findPage(selSQL.toString(), queryParams.toArray(), pageable);

+ 23 - 0
src/main/java/com/ssj/service/weixin/adminsale/service/InvoiceManageService.java

@@ -0,0 +1,23 @@
+package com.ssj.service.weixin.adminsale.service;
+
+import com.ssj.bean.weixin.sales.domain.LibInvoiceManage;
+import com.ssj.framework.core.common.service.BaseService;
+
+/**
+ * @author sh
+ * @className InvoiceManageService
+ * @description interface
+ * @date 2021/4/21
+ */
+public interface InvoiceManageService extends BaseService<LibInvoiceManage,String> {
+    /**
+     * 保存开票信息
+     * @param detailId
+     * @param rds
+     * @param yourName
+     * @param companyName
+     * @param companySn
+     * @param email
+     */
+    void saveInvoiceInfo(String detailId, String rds, String yourName, String companyName, String companySn, String email);
+}

+ 59 - 0
src/main/java/com/ssj/service/weixin/adminsale/service/impl/InvoiceManageServiceImpl.java

@@ -0,0 +1,59 @@
+package com.ssj.service.weixin.adminsale.service.impl;
+
+import com.ssj.bean.weixin.sales.domain.LibInvoiceManage;
+import com.ssj.bean.weixin.sales.domain.LibOrderDetails;
+import com.ssj.dao.weixin.adminsale.dao.InvoiceManageDao;
+import com.ssj.framework.core.common.service.BaseServiceImpl;
+import com.ssj.service.weixin.adminsale.service.InvoiceManageService;
+import com.ssj.service.weixin.sales.service.LibOrderDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * @author sh
+ * @className InvoiceManageServiceImpl
+ * @description impl
+ * @date 2021/4/21
+ */
+@Service
+public class InvoiceManageServiceImpl extends BaseServiceImpl<LibInvoiceManage,String> implements InvoiceManageService {
+
+    @Autowired
+    private InvoiceManageDao dao;
+
+    @Autowired
+    private LibOrderDetailsService libOrderDetailsService;
+
+    @Override
+    public PagingAndSortingRepository<LibInvoiceManage, String> getDao() {
+        return dao;
+    }
+
+    @Override
+    public void saveInvoiceInfo(String detailId, String rds, String yourName, String companyName, String companySn, String email) {
+        LibOrderDetails orderDetail = libOrderDetailsService.getById(detailId);
+        //开票中
+        orderDetail.setInvoiceState(2);
+        libOrderDetailsService.save(orderDetail);
+
+        LibInvoiceManage invoiceManage = new LibInvoiceManage();
+        invoiceManage.setOrderDetailId(detailId);
+        if("0".equals(rds)){
+            invoiceManage.setInvoiceTitle(yourName);
+            invoiceManage.setType(1);
+        }else{
+            invoiceManage.setInvoiceTitle(companyName);
+            invoiceManage.setTaxpayerId(companySn);
+            invoiceManage.setType(2);
+        }
+        invoiceManage.setEmail(email);
+        invoiceManage.setInvoiceType("增值税电子普通发票");
+        invoiceManage.setInvoiceContent("咨询服务费");
+        invoiceManage.setCreateTime(new Date());
+        invoiceManage.setPrice(orderDetail.getPrice());
+        this.save(invoiceManage);
+    }
+}

+ 1 - 11
src/main/java/com/ssj/service/weixin/sales/service/impl/LibOrderDetailsServiceImpl.java

@@ -1584,17 +1584,7 @@ public class LibOrderDetailsServiceImpl extends BaseServiceImpl<LibOrderDetails,
 			tokenManager.createServiceCount("ZUOYB_SERVICE_"+libVip.getId()+"_"+libOrderDetails.getLibId(), "1");	
 			
 			logger.info("小塾学伴缴费支付成功后,添加销售订单"+libOrderDetails.getId());
-			
-			if(user!=null && StringUtils.isNotEmpty(user.getAccount())){
-			    String fromUrl="https://pan.baidu.com/s/16IWXLP4s7U3reZRUxX5afg";
-				TextCustom  textCustom  =new TextCustom();
-				textCustom.setMsgtype("text");
-				textCustom.setTouser(user.getAccount());
-				Text text = new  Text();
-				text.setContent("恭喜您成功领取价值399元的『1-6年级全科开学大礼包』,<a href=\""+fromUrl+"\">点击打开网盘地址</a>");
-				textCustom.setText(text);
-				NewsUtil.send(tokenManager.getSSJAccessToken(), textCustom);
-		    }
+
 		}catch(Exception e){
 			e.printStackTrace();
 			logger.error("保存购卡信息异常");

+ 76 - 0
src/main/java/com/ssj/weixin/adminsale/controller/AdminSaleController.java

@@ -1,18 +1,22 @@
 package com.ssj.weixin.adminsale.controller;
 
 import com.ssj.bean.weixin.card.domain.LibCardInfo;
+import com.ssj.bean.weixin.libmy.domain.LibReadVip;
 import com.ssj.bean.weixin.libmy.domain.LibVip;
 import com.ssj.bean.weixin.libmy.domain.TbLibJoin;
 import com.ssj.bean.weixin.problem.domain.Experience;
 import com.ssj.bean.weixin.problem.domain.RequestMethodLog;
+import com.ssj.bean.weixin.sales.domain.LibOrderDetails;
 import com.ssj.bean.weixin.sales.domain.LibSalesPrice;
 import com.ssj.bean.weixin.sales.domain.LibVipService;
 import com.ssj.bean.weixin.user.domain.User;
 import com.ssj.framework.basic.common.bean.SplitPage;
 import com.ssj.framework.basic.utils.DateHelper;
 import com.ssj.framework.core.common.controller.BaseController;
+import com.ssj.framework.core.util.ResponseConstant;
 import com.ssj.framework.core.util.ResponseEntity;
 import com.ssj.service.weixin.adminsale.service.AdminSaleService;
+import com.ssj.service.weixin.adminsale.service.InvoiceManageService;
 import com.ssj.service.weixin.card.service.ILibMainCardService;
 import com.ssj.service.weixin.library.service.IBookManagerService;
 import com.ssj.service.weixin.library.service.ILibJoinService;
@@ -83,6 +87,9 @@ public class AdminSaleController  extends BaseController {
 	
 	@Autowired
     private RequestMethodLogService requestMethodLogService;
+
+	@Autowired
+	private InvoiceManageService invoiceManageService;
 	
 	
 	@RequestMapping("/index")
@@ -643,4 +650,73 @@ public class AdminSaleController  extends BaseController {
 		responseEntity.success(data, "获取馆信息成功");
 		return responseEntity;
 	}
+
+
+	@RequestMapping(value = "/userOrderList",method = RequestMethod.POST)
+	@ResponseBody
+	public ResponseEntity userOrderList(Model model,
+									   @RequestParam(required = false, defaultValue = "10") int pageSize,
+									   @RequestParam(required = false, defaultValue = "1") int pageNo,String dateStr)
+			 {
+		ResponseEntity responseEntity = new ResponseEntity();
+		Map<String, Object> params = new HashMap<String, Object>();
+		Map<String, Object> data = new HashMap<String, Object>();
+		if(!"全部订单".equals(dateStr)){
+			params.put("beginDate", DateHelper.format(DateHelper.parseDate(dateStr, "yyyy-MM"),"yyyy-MM-dd HH:mm:ss"));
+			params.put("endDate", DateHelper.format(DateHelper.getNextMonthFirstDay(DateHelper.parseDate(dateStr, "yyyy-MM")), "yyyy-MM-dd HH:mm:ss"));
+
+		}
+		String userId = UserUtil.getUserId(request);
+		params.put("userId",userId);
+
+		Page<Map<String, Object>>  page= libOrderDetailsService.findForPageList(params, initPage(pageNo,pageSize));
+		//sp.setRowCnt((int) page.getTotalElements());
+		data.put("list", page.getContent());
+		data.put("pageNo", pageNo);
+		data.put("pageSize", pageSize);
+		data.put("totalSize", page.getTotalElements());
+		responseEntity.success(data, "获取成功");
+		return responseEntity;
+	}
+
+
+	@RequestMapping("/userOrder")
+	public String userOrder(Model model){
+		return "weixin/invoice/user_order";
+	}
+
+	@RequestMapping("/userServiceDetail")
+	public String userServiceDetail(Model model,String detailId){
+
+		Map<String, Object> orderDetail = adminSaleService.findOrderById(detailId);
+		model.addAttribute("orderDetail", orderDetail);
+		return "weixin/invoice/user_order_details";
+	}
+	@RequestMapping("/addInvoice")
+	public String addInvoice(Model model,String detailId){
+
+		LibOrderDetails orderDetail = libOrderDetailsService.getById(detailId);
+		model.addAttribute("orderDetail", orderDetail);
+		return "weixin/invoice/add_invoice";
+	}
+
+	/**
+	 *
+	 * @ResponseEntity
+	 */
+	@RequestMapping(value="/saveInvoiceInfo" ,method=RequestMethod.POST)
+	@ResponseBody
+	public ResponseEntity saveInvoiceInfo(Model model,String  detailId ,String rds,String yourName,String companyName,String companySn
+			,String email){
+		ResponseEntity response = new ResponseEntity();
+		Map<String, Object> data = new HashMap<>();
+		//查询用户是否有保存过之前的抬头
+		try {
+			invoiceManageService.saveInvoiceInfo(detailId,rds,yourName,companyName,companySn,email);
+			response.success(data, "申请成功,七个工作日内会将发票发送到您输入的电子邮箱内,请注意查收!");
+		}catch (Exception e){
+			response.failure("申请开票失败,请稍后重试!");
+		}
+		return response;
+	}
 }

+ 2 - 2
src/main/resources/static/style/page.css

@@ -736,7 +736,7 @@ textarea {
     color: #3399ff;
 }
 .bountyMoney h4 span{
-	color: #3399ff;margin-left:8px;font-weight: normal;font-weight: ;
+	color: #3399ff;margin-left:8px;font-weight: normal ;
 	font-size: 14px;
 }
 .bountyMoney ul {
@@ -3354,7 +3354,7 @@ filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */
 	top:0px
 }
 .invite_box .gift_box>.title{
-	margin:0 auto
+	margin:0 auto;
 	width: 189px;
 	text-align:center;
 	font-size:16px;

+ 14 - 3
src/main/resources/static/style/vipcard.css

@@ -95,13 +95,13 @@
 
 }*/
 .vipcard .panel .Ttitle{
-	margin: -15px -15px 0;
+	margin: -15px -15px 0 10px;
 	font-size: 15px;
 	color: #48A3FE;
 	border-bottom: 1px solid #E6E6E6;
 	height: 54px;
 	line-height: 54px;
-	text-align: center;
+	text-align: left;
 }
 .vipcard .panel .Ttitle i{
 	display: inline-block;
@@ -119,6 +119,17 @@
 .vipcard .lineform{
 	margin-top: 15px;
 }
+
+.vipcard .lineform .dc_hd{
+	-webkit-box-flex: 1;
+	/*-webkit-flex: 1;*/
+	/*flex: 1;*/
+	/*min-width: 0;*/
+	display: inline-block;
+	margin: 0 15px 15px 0;
+	width:70%;
+}
+
 .vipcard .lineform .type{
 	font-size: 14px;
 	color: #666666;
@@ -126,7 +137,7 @@
 }
 .vipcard .lineform input,.vipcard .lineform select{
 	background-color: #F8F8F8;
-	border: 1px solid #CCCCCC !important;
+	border: 0px solid #CCCCCC !important;
 	border-radius: 4px;
 	height: 38px;
 	padding: 0 10px;

+ 204 - 0
src/main/resources/templates/weixin/invoice/add_invoice.html

@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+<title>开具发票</title>
+<link href="style/jquery-weui.css" th:href="@{/static/style/jquery-weui.css(version=${#dates.format(#calendars.createNow(),'yyyyMMdd')})}" rel="stylesheet"/>
+<script th:include="weixin/common/includeJS_CSS" th:remove="tag" ></script>
+<link href="style/vipcard.css" th:href="@{/static/style/vipcard.css(version=${#dates.format(#calendars.createNow(),'yyyyMMdd')})}" rel="stylesheet"/>
+<script src="js/jquery-weui.js" th:src="@{/static/js/jquery-weui.js}"></script>
+<style>
+.radio_ma{
+	margin-top:15px;
+}
+.div_font{
+	font-size:14px;
+}
+.radio_ma .type{
+	font-size: 14px;
+	color: #666666;
+	margin-right: 18px;
+}
+.radio_inline{
+	display: inline-block;
+	width:70%;
+}
+.radio_inline span{
+	/*width: 20%;*/
+	padding-left: 30px;
+}
+.radio_inline input[type=radio]{
+	/*width: 15%;*/
+	right: auto;
+}
+.self{
+	display: none;
+}
+.company_block{
+	display: block;
+}
+.company_none{
+	display: none;
+}
+.change .mui-radio input[type='radio']:checked:before{
+	content: '\e442';color:red;font-size:20px;}
+.change .mui-radio input[type='radio']:before{
+	font-size:20px;}
+</style>
+</head>
+<body class="bg_f2">
+	<!--内容-->
+	<div class="mui-content">
+		<div class="vipcard">
+			<div class="panel">
+				<div class="Ttitle">
+					<i>1</i>发票详情
+				</div>
+
+				<div class="dc_flex mui-input-row radio_ma change">
+					<div class="type">抬头类型</div>
+					<span class="radio_inline mui-radio">
+						<input name="radio1" type="radio" id="radio_man" checked value="1" class="rds">
+						<span for="radio_man" style="width:20%;">企业</span>
+						<input name="radio1" type="radio" id="radio_woman" value="0" class="rds">
+						<span for="radio_woman" style="width:60%;">个人或非企业单位</span>
+					</span>
+				</div>
+				<div class="lineform self" id="self">
+					<div class="dc_flex">
+						<div class="type">发票抬头</div>
+						<div class="dc_hd"><input type="text" name="yourName" id="yourName" placeholder="填写需要开具发票的姓名"/></div>
+					</div>
+				</div>
+				<div class="lineform company" id="company">
+					<div class="dc_flex">
+						<div class="type">发票抬头</div>
+						<div class="dc_hd">
+							<input type="text" name="companyName" id="companyName" placeholder="填写需要开具发票的企业名称"/>
+						</div>
+					</div>
+				</div>
+				<div class="lineform company" id="company1">
+					<div class="dc_flex">
+						<div class="type">&nbsp; &nbsp; &nbsp; 税号</div>
+						<div class="dc_hd">
+							<input type="text" name="companySn" id="companySn" placeholder="填写纳税人识别号"/>
+						</div>
+					</div>
+				</div>
+				<div class="lineform">
+					<div class="dc_flex">
+						<div class="type">发票类型</div>
+						<div class="dc_hd div_font">增值税电子普通发票</div>
+					</div>
+				</div>
+				<div class="lineform">
+					<div class="dc_flex">
+						<div class="type">发票内容</div>
+						<div class="dc_hd div_font" >咨询服务费</div>
+					</div>
+				</div>
+				<div class="lineform">
+					<div class="dc_flex">
+						<div class="type">&nbsp;&nbsp;  总金额</div>
+						<div class="dc_hd"><input type="tel" disabled name="phone" id="phone" th:value="${orderDetail.price}+' 元'"/></div>
+					</div>
+				</div>
+				<div class="Ttitle">
+					<i>2</i>接收方式
+				</div>
+				<div class="lineform">
+					<div class="dc_flex">
+						<div class="type">电子邮箱</div>
+						<div class="dc_hd"><input class="wsinput" type="text" id="email" placeholder="请输入接收电子发票的邮箱" name="email" value=""/></div>
+					</div>
+				</div>
+			</div>
+			<div class="panelbttom">
+				<a href="javascript:save();" id="save"  class="btn-blue">确定</a>
+			</div>
+		</div>
+	</div>
+ <script type="text/javascript">
+	 $(document).on('click','.radio_ma',function(){
+			var rds = getRadioRes("rds");
+			if(rds =="0"){
+				$("#self").attr("style","display:block;");
+				$("#company").attr("style","display:none");
+				$("#company1").attr("style","display:none");
+			}else{
+				$(".company").attr("style","display:block");
+				$(".company1").attr("style","display:block");
+				$(".self").attr("style","display:none");
+			}
+	 });
+	 function getRadioRes(className) {
+		 var rdsObj = document.getElementsByClassName(className);
+		 var chackVal = null;
+		 for(i = 0; i < rdsObj.length; i++) {
+			 if (rdsObj[i].checked) {
+				 chackVal = rdsObj[i].value;
+			 }
+		 }
+		 return chackVal;
+	 }
+		mui('.mui-content').on('tap','a.btnweizhi,#save,a.dc_hd',function(){document.location.href=this.href;});
+		function save(){
+			var rds = getRadioRes("rds");
+			var yourName = $('#yourName').val();
+			var companyName = $('#companyName').val();
+			var companySn = $('#companySn').val();
+			if(rds =="0") { //个人开票
+				if(yourName === undefined || yourName ===''){
+					$.toast("请填写需要开具发票的姓名","cancel");
+					return false;
+				}
+			}else{
+				if(companyName === undefined || companyName ===''){
+					$.toast("请填写需要开具发票的企业名称","cancel");
+					return false;
+				}
+				if(companySn === undefined || companySn ===''){
+					$.toast("请填写纳税人识别号","cancel");
+					return false;
+				}
+			}
+
+
+			var email = $.trim($('#email').val());
+			if(email === undefined || email ===''){
+				 $.toast("请输入接收电子发票的电子邮箱","cancel");
+				 return false;
+			}else{
+				if(!(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/.test(email))){
+			        $.toast("邮箱输入有误,请重新填写","cancel");
+			        return false; 
+			    } 
+			}
+			
+		    $('#save').attr('href','javascript:void(0);');
+		    var url ="[[${sysUrl}]]/weixin/adminsale/saveInvoiceInfo";
+     		 var params ={
+     				 'detailId' : '[[${orderDetail.id}]]',
+     				 'rds' : rds,
+     				 'yourName' : yourName,
+     				 'companyName' : companyName,
+     				 'companySn' : companySn,
+     				 'email' : email
+     		 };
+ 			$.post(url,params,function(data){
+ 				if (data.code == 999) {
+					$.toast(data.msg,"ok");
+					var jumpUrl ="[[${sysUrl}]]/weixin/adminsale/userOrder";
+ 					location.replace(jumpUrl);
+				    event.returnValue=false;
+     			    return false;
+ 				 }else{
+					 $.toast(data.msg,"cancel");
+ 					 $('#save').attr('href','javascript:save();');
+ 				 }
+ 			});
+		}	
+</script>
+
+</body>
+</html>

+ 214 - 0
src/main/resources/templates/weixin/invoice/user_order.html

@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<html lang="zh-cmn-Hans" xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
+    <title>订单管理</title>
+    <script th:include="weixin/common/includeJS_CSS" th:remove="tag" ></script>
+    <link href="style/sale.css" th:href="@{/static/style/sale.css(version=1003)}" rel="stylesheet"/>
+    <link href="style/administrator.css" th:href="@{/static/style/administrator.css(version=${#dates.format(#calendars.createNow(),'yyyyMMdd')})}" rel="stylesheet"/>
+    <link href="style/jquery-weui.css" th:href="@{/static/style/jquery-weui.css(version=${#dates.format(#calendars.createNow(),'yyyyMMdd')})}" rel="stylesheet"/>
+	<script src="js/jquery-weui.js" th:src="@{/static/js/jquery-weui.js}"></script>
+	<link rel="stylesheet" type="text/css" th:href="@{/static/style/mui.picker.min.css}" />
+	<script th:src="@{/static/js/mui/mui.picker.min.js}"></script>
+</head>
+<style>
+
+</style>
+<body class="bg_f2">
+	<nav class="mui-bar mui-bar-nav">
+		<div class="mui-date">
+			<div class="mui-gray" id="showTotal"></div>
+			<div class="mui-date-content" id="dateStr" data-options='{"type":"month","beginYear":2014,"endYear":2025}'>全部订单</div>
+		</div>
+	</nav>
+	<!--内容-->
+	<div id="pullrefresh" class="mui-content mui-scroll-wrapper">
+		<div class="mui-content">
+			<div class="salebox">
+				<div class="buy_fuwu_item" id="list">
+						<!-- 数据显示 -->
+				</div>
+				<div class="weui-loadmore weui-loadmore_line">
+	            <span class="weui-loadmore__tips">已经到底啦</span>
+	        </div>
+			</div>
+		</div>
+	</div>
+	<script type="text/javascript">
+		(function($) {
+			$.init();
+			var result = $('.mui-date-content');
+			var btns = $('.mui-date-content');
+			btns.each(function(i, btn) {
+				
+				btn.addEventListener('tap', function() {
+					var _self = this;
+					result[i].className += ' active';
+					if(_self.picker) {
+						_self.picker.show(function (rs) {
+							result[i].innerText = rs.text.split('-').join('年') + '月';
+							result[i].className = result[i].className.replace('active', '');
+							_self.picker.dispose();
+							_self.picker = null;
+						});
+					} else {
+						var optionsJson = this.getAttribute('data-options') || '{}';
+						var options = JSON.parse(optionsJson);
+						var id = this.getAttribute('id');
+						/*
+						 * 首次显示时实例化组件
+						 * 示例为了简洁,将 options 放在了按钮的 dom 上
+						 * 也可以直接通过代码声明 optinos 用于实例化 DtPicker
+						 */
+						_self.picker = new $.DtPicker(options);
+						_self.picker.show(function(rs) {
+							/*
+							 * rs.value 拼合后的 value
+							 * rs.text 拼合后的 text
+							 * rs.y 年,可以通过 rs.y.vaue 和 rs.y.text 获取值和文本
+							 * rs.m 月,用法同年
+							 * rs.d 日,用法同年
+							 * rs.h 时,用法同年
+							 * rs.i 分(minutes 的第二个字母),用法同年
+							 */
+							result[i].innerText = rs.text;
+							result[i].className = result[i].className.replace('active', '');
+							showNew();
+							/* 
+							 * 返回 false 可以阻止选择框的关闭
+							 * return false;
+							 */
+							/*
+							 * 释放组件资源,释放后将将不能再操作组件
+							 * 通常情况下,不需要示放组件,new DtPicker(options) 后,可以一直使用。
+							 * 当前示例,因为内容较多,如不进行资原释放,在某些设备上会较慢。
+							 * 所以每次用完便立即调用 dispose 进行释放,下次用时再创建新实例。
+							 */
+							_self.picker.dispose();
+							_self.picker = null;
+						});
+					}
+					
+				}, false);
+			});
+		})(mui);
+	</script>
+<script id="list_tpl" type="text/html">
+{{# if(d.list!=null && d.list.length > 0){ }}
+{{# for(var i = 0, len = d.list.length; i < len; i++){ }}
+<div class="list">
+	<p class="type">{{=d.list[i].details}}</p>
+	<p class="txt">孩子姓名:{{=d.list[i].child_name}}</p>
+	{{# if(d.list[i].invoice_state == 1) { }}
+		<p class="txt buy_fuwu_item_edit">订单金额:{{=d.list[i].price}} <span class="edit" >已开票</span></p>
+	{{# }else if(d.list[i].invoice_state == 2){ }}
+	    <p class="txt buy_fuwu_item_edit">订单金额:{{=d.list[i].price}} <span class="edit" >开票中</span></p>
+	{{# }else{}}
+		<p class="txt buy_fuwu_item_edit">订单金额:{{=d.list[i].price}} <span class="edit" onclick="editFp('{{=d.list[i].id}}')" >申请开票<span class="arrow_right"></span></span></p>
+	{{# } }}
+	<p class="txt buy_fuwu_item_edit">购买时间:{{=d.list[i].create_time}}<span class="edit" onclick="editDetai('{{=d.list[i].id}}')" >详情<span class="arrow_right"></span></span></p>
+</div>
+{{# } }}
+{{# } }}
+</script>
+
+ <script type="text/javascript">
+    mui.init({
+		pullRefresh: {
+			container: '#pullrefresh',
+			up: {
+				contentrefresh: '正在加载...',
+				callback: pullupRefresh
+			}
+		}
+	});
+	
+	var pageVal = 0;
+ 	var totalPage = 1;
+ 	var countVal = 10;
+	
+ 	/**
+ 	 * 上拉加载具体业务实现
+ 	 */
+ 	function pullupRefresh() {
+ 		var dateStr = $("#dateStr").html();
+ 		setTimeout(function() {
+ 			mui('#pullrefresh').pullRefresh().endPullupToRefresh((pageVal++ > totalPage -1)); //参数为true代表没有更多数据了。
+ 							
+ 			
+ 			var paramVal = {pageNo:pageVal,pageSize:countVal,dateStr:dateStr};
+ 			
+ 			
+ 			loadData(paramVal);
+ 			
+ 		}, 1000);
+ 	}
+ 	
+ 	function showNew(){
+ 		 pageVal = 1;
+ 	 	 totalPage = 1;
+ 	 	 countVal = 10;
+ 	 	var dateStr = $("#dateStr").html();
+		var paramVal = {pageNo:pageVal,pageSize:countVal,dateStr:dateStr};
+		loadData(paramVal);
+ 	}
+ 	mui.ready(function() {
+ 		mui('#pullrefresh').pullRefresh().pullupLoading();
+ 	});
+ 	
+ 	function editDetai(id){
+ 		window.location.href = "[[${sysUrl}]]/weixin/adminsale/userServiceDetail.html?detailId="+id;
+ 	}
+ 	function editFp(id){
+ 		window.location.href = "[[${sysUrl}]]/weixin/adminsale/addInvoice.html?detailId="+id;
+ 	}
+ 	mui("body").on('tap','.list span',function(event){
+ 		this.click();
+ 	});
+ 	//加载数据
+ 	function loadData(params){
+ 		setTimeout(function () {
+ 			mui.ajax('[[@{/weixin/adminsale/userOrderList}]]',{
+ 				data:params,
+ 				dataType:'json',
+ 				type:'POST',
+ 				success:function(data){
+ 					if(data && data.code == 999){
+ 						if(data.data.totalSize > 0){
+ 					 		var table = document.getElementById("list")
+ 					 		var listTpl = document.getElementById("list_tpl").innerHTML;
+ 					 
+ 							 if(data.data.pageNo == 1){
+ 								 $("#showTotal").html("共"+data.data.totalSize+"条订单数据");
+ 					        	laytpl(listTpl).render(data.data, function(html){
+ 									table.innerHTML = html;
+ 								});
+ 					        }else{
+ 				        	 	laytpl(listTpl).render(data.data, function(html){
+ 									table.insertAdjacentHTML('beforeEnd', html);
+ 							 	});
+ 					        }
+ 					 
+ 					 		var rowCount = data.data.totalSize;
+ 					 		
+ 							 if ((rowCount % countVal) == 0) {
+ 								 totalPage = rowCount / countVal;
+ 							} else {
+ 								totalPage = parseInt((rowCount / countVal)) + 1;
+ 							}
+ 						}else{
+ 							
+ 						}		 
+ 					}else{
+ 						
+ 					}
+ 				 },
+ 				error : function() {
+ 				}
+ 			});
+ 		}, 200);
+ 	} 
+ </script>
+</body>
+</html>

+ 67 - 0
src/main/resources/templates/weixin/invoice/user_order_details.html

@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="zh-cmn-Hans">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
+    <title>订单详情</title>
+     <script th:include="weixin/common/includeJS_CSS" th:remove="tag" ></script>
+    <link href="style/sale.css" th:href="@{/static/style/sale.css(version=1003)}" rel="stylesheet"/>
+    <link href="style/administrator.css" th:href="@{/static/style/administrator.css(version=${#dates.format(#calendars.createNow(),'yyyyMMdd')})}" rel="stylesheet"/>
+    <link href="style/jquery-weui.css" th:href="@{/static/style/jquery-weui.css(version=${#dates.format(#calendars.createNow(),'yyyyMMdd')})}" rel="stylesheet"/>
+	<script src="js/jquery-weui.js" th:src="@{/static/js/jquery-weui.js}"></script>
+</head>
+<style>
+
+</style>
+<body class="bg_f2">
+	<div class="admin_footbox">
+		<div class="dc_flex">
+			<div class="dc_hd"><a th:href="@{/weixin/adminsale/userOrder.html}" class="btn_qx">返回</a></div>
+		</div>
+	</div>
+	<div class="mui-content">
+		<div class="admin_hyglbox">
+			<div class="panel">
+				<div class="">
+					<div class="list">
+						<div class="dc_flex">
+							<div class="typetxt">孩子姓名</div>
+							<div class="dc_hd">[[${orderDetail.child_name}]]</div>
+						</div>
+					</div>
+					<div class="list">
+						<div class="dc_flex">
+							<div class="typetxt">家长姓名</div>
+							<div class="dc_hd">[[${orderDetail.parent_name}]]</div>
+						</div>
+					</div>
+					<div class="list">
+						<div class="dc_flex">
+							<div class="typetxt">产品类型</div>
+							<div class="dc_hd">[[${orderDetail.details}]]</div>
+						</div>
+					</div>
+					<div class="list">
+						<div class="dc_flex">
+							<div class="typetxt">金额</div>
+							<div class="dc_hd">[[${orderDetail.price}]]</div>
+						</div>
+					</div>
+					<div class="list">
+						<div class="dc_flex">
+							<div class="typetxt">购卡时间</div>
+							<div class="dc_hd" th:text="${#calendars.format(orderDetail.create_time,'yyyy-MM-dd HH:mm:ss')}"></div>
+						</div>
+					</div>
+					<div class="list">
+						<div class="dc_flex">
+							<div class="typetxt">订单状态</div>
+							<div class="dc_hd" th:text="${orderDetail.order_status == 1 ?'已支付':orderDetail.order_status == 2?'已退款':'财务手动添加'}">[[${orderDetail.order_status}]]</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</body>
+</html>