From 7e9976fe57ab5133b019a9258e7c054f74e1d2ab Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 18 Apr 2022 09:52:44 +0800
Subject: [PATCH] add ipad code

---
 zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderDao.java                   |    8 
 zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java           |    5 
 zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderDao.xml                      |   88 +++
 zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml                    |    4 
 zq-erp/src/main/java/com/matrix/system/padApi/vo/PadOrderDetailVo.java             |  181 +++++++
 zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java         |    1 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java |    1 
 zq-erp/src/main/java/com/matrix/system/padApi/dto/WebPadLoginDto.java              |   19 
 zq-erp/src/main/java/com/matrix/system/padApi/action/PadApiCommonAction.java       |  100 ++++
 zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java                   |    5 
 zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java                 |    4 
 zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java               |    2 
 zq-erp/src/main/java/com/matrix/system/padApi/vo/UserInfoVo.java                   |   27 +
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java   |   12 
 zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml                  |   15 
 zq-erp/src/main/java/com/matrix/system/padApi/action/PadServiceAction.java         |  182 +++++++
 zq-erp/src/test/java/com/matrix/JyyTests2.java                                     |  140 +++++
 zq-erp/src/main/java/com/matrix/system/padApi/dto/PadOrderListDto.java             |   95 ++++
 zq-erp/src/main/java/com/matrix/system/padApi/action/PadVipAction.java             |  184 ++++++++
 zq-erp/src/main/java/com/matrix/system/padApi/vo/PadOrderDetailItemVo.java         |  122 +++++
 zq-erp/src/main/java/com/matrix/system/padApi/dto/PadVipListDto.java               |   21 
 zq-erp/src/main/java/com/matrix/system/padApi/action/PadOrderAction.java           |  120 +++++
 22 files changed, 1,326 insertions(+), 10 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java
index 2fafe6a..c2dfea6 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java
@@ -455,5 +455,10 @@
 	 */
 	private Integer validFlag;
 
+	/**
+	 * Pad端查询条件
+	 */
+	private String padQueryKey;
+
 
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderDao.java
index 22ef160..fed00d8 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderDao.java
@@ -5,6 +5,8 @@
 import com.matrix.system.app.vo.OrderDetailVo;
 import com.matrix.system.app.vo.RankingVo;
 import com.matrix.system.hive.bean.SysOrder;
+import com.matrix.system.padApi.dto.PadOrderListDto;
+import com.matrix.system.padApi.vo.PadOrderDetailVo;
 import com.matrix.system.shopXcx.api.dto.ErpOrderListDto;
 import com.matrix.system.shopXcx.api.vo.ErpOrderDetailVo;
 import org.apache.ibatis.annotations.Param;
@@ -44,9 +46,13 @@
 
 	List<OrderDetailVo> selectApiOrderListInPage(@Param("record") OrderListDto orderListDto, @Param("pageVo") PaginationVO pageVo);
 
+	List<PadOrderDetailVo> selectPadApiOrderListInPage(PadOrderListDto orderListDto, PaginationVO pageVo);
+
 	int selectApiOrderListTotal(@Param("record") OrderListDto orderListDto);
 
 	OrderDetailVo selectApiOrderDetailById(@Param("orderId") Long orderId);
+
+	PadOrderDetailVo selectPadApiOrderDetailById(@Param("orderId") Long orderId);
 
 	List<RankingVo> selectShopAchieveRanking(@Param("record") SysOrder sysOrder);
 
@@ -57,4 +63,6 @@
 	ErpOrderDetailVo findUserOrderById(Long orderId);
 
 	BigDecimal selectArrearsByVipId(Long vipId);
+
+	int selectPadApiOrderListTotal(@Param("record") PadOrderListDto orderListDto);
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java
index 2c88504..cbb6fb9 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderItemDao.java
@@ -3,6 +3,7 @@
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.system.app.vo.OrderDetailItemVo;
 import com.matrix.system.hive.bean.SysOrderItem;
+import com.matrix.system.padApi.vo.PadOrderDetailItemVo;
 import com.matrix.system.shopXcx.api.vo.ErpOrderDetailItemVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -62,6 +63,7 @@
 	public int   deleteByOrderId(Long id);
 
 	List<OrderDetailItemVo> selectApiOrderDetailItemsByOrderId(@Param("orderId") Long orderId);
+	List<PadOrderDetailItemVo> selectPadApiOrderDetailItemsByOrderId(@Param("orderId") Long orderId);
 
     List<ErpOrderDetailItemVo> selectErpOrderItemByOrderId(String orderId);
 
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java
index fd8fba7..0d1055a 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java
@@ -1,10 +1,12 @@
 package com.matrix.system.hive.dao;
 
+import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.system.app.dto.VipInfoListDto;
 import com.matrix.system.app.vo.VipInfoListVo;
 import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.hive.pojo.VipInfoVo;
+import com.matrix.system.padApi.dto.PadVipListDto;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -219,4 +221,6 @@
 	List<Map<String, Object>> selectVipArrearsStatistics(@Param("record") SysVipInfo sysVipInfo, @Param("pageVo") PaginationVO pageVo);
 
 	Integer selectVipArrearsStatisticsTotal(@Param("record") SysVipInfo sysVipInfo);
+
+	AjaxResult selectVipInfoListInPage(@Param("record")PadVipListDto padVipListDto);
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java
index 3b8db13..91f18c7 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysOrderService.java
@@ -8,6 +8,8 @@
 import com.matrix.system.hive.bean.SysOrder;
 import com.matrix.system.hive.plugin.util.BaseServices;
 import com.matrix.system.hive.pojo.CzXkVo;
+import com.matrix.system.padApi.dto.PadOrderListDto;
+import com.matrix.system.padApi.vo.PadOrderDetailVo;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -114,6 +116,8 @@
 
 	List<OrderDetailVo> findApiOrderListInPage(OrderListDto orderListDto, PaginationVO pageVo);
 
+	List<PadOrderDetailVo> findPadApiOrderListInPage(PadOrderListDto orderListDto, PaginationVO pageVo);
+
 	int findApiOrderListTotal(OrderListDto orderListDto);
 
 	OrderDetailVo findApiOrderDetailByOrderId(Long orderId);
@@ -122,4 +126,5 @@
 
 	BigDecimal findVipArrearsByVipId(Long vipId);
 
+	int findPadApiOrderListTotal(PadOrderListDto orderListDto);
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java
index a31f4d0..ae8f69e 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java
@@ -217,4 +217,5 @@
     List<Map<String, Object>> findVipArrearsStatistics(SysVipInfo sysVipInfo, PaginationVO pageVo);
 
 	Integer findVipArrearsStatisticsTotal(SysVipInfo sysVipInfo);
+
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
index a47e379..19b45ec 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -35,6 +35,8 @@
 import com.matrix.system.hive.plugin.util.CollectionUtils;
 import com.matrix.system.hive.pojo.CzXkVo;
 import com.matrix.system.hive.service.*;
+import com.matrix.system.padApi.dto.PadOrderListDto;
+import com.matrix.system.padApi.vo.PadOrderDetailVo;
 import com.matrix.system.score.service.ScoreVipDetailService;
 import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting;
 import com.matrix.system.wechart.templateMsg.UniformMsgParam;
@@ -514,11 +516,21 @@
     }
 
     @Override
+    public List<PadOrderDetailVo> findPadApiOrderListInPage(PadOrderListDto orderListDto, PaginationVO pageVo) {
+        return sysOrderDao.selectPadApiOrderListInPage(orderListDto, pageVo);
+    }
+
+    @Override
     public int findApiOrderListTotal(OrderListDto orderListDto) {
         return sysOrderDao.selectApiOrderListTotal(orderListDto);
     }
 
     @Override
+    public int findPadApiOrderListTotal(PadOrderListDto orderListDto) {
+        return sysOrderDao.selectPadApiOrderListTotal(orderListDto);
+    }
+
+    @Override
     public OrderDetailVo findApiOrderDetailByOrderId(Long orderId) {
         OrderDetailVo orderDetail = sysOrderDao.selectApiOrderDetailById(orderId);
 
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java
index 9cdcdb4..59e8f34 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java
@@ -690,4 +690,5 @@
 	public Integer findVipArrearsStatisticsTotal(SysVipInfo sysVipInfo) {
 		return sysVipInfoDao.selectVipArrearsStatisticsTotal(sysVipInfo);
 	}
+
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/action/PadApiCommonAction.java b/zq-erp/src/main/java/com/matrix/system/padApi/action/PadApiCommonAction.java
new file mode 100644
index 0000000..39b0a28
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/action/PadApiCommonAction.java
@@ -0,0 +1,100 @@
+package com.matrix.system.padApi.action;
+
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.tools.RSAUtils;
+import com.matrix.core.tools.UUIDUtil;
+import com.matrix.system.app.vo.UserInfoVo;
+import com.matrix.system.common.authority.DefaultAuthorityManager;
+import com.matrix.system.common.authority.strategy.AccountPasswordLogin;
+import com.matrix.system.common.authority.strategy.LoginStrategy;
+import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.dao.SysCompanyDao;
+import com.matrix.system.common.init.LocalCache;
+import com.matrix.system.common.service.SysUsersService;
+import com.matrix.system.hive.bean.SysShopInfo;
+import com.matrix.system.hive.dao.SysShopInfoDao;
+import com.matrix.system.hive.service.SysShopInfoService;
+import com.matrix.system.padApi.dto.WebPadLoginDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@CrossOrigin(origins = "*")
+@Api(value = "PadApiCommonAction", tags = "pad端公共请求类(含登陆)")
+@RestController
+@RequestMapping(value = "/api/common/pad")
+public class PadApiCommonAction {
+
+    @Autowired
+    private SysUsersService sysUsersService;
+
+    @Autowired
+    private DefaultAuthorityManager authorityManager;
+
+    @Autowired
+    SysShopInfoDao sysShopInfoDao;
+
+    @Autowired
+    SysCompanyDao sysCompanyDao;
+
+    @Autowired
+    private SysShopInfoService sysShopInfoService;
+
+    @Value("${login_public_key}")
+    private String publicKey;
+
+    @ApiOperation(value = "登陆接口", notes = "pad端登陆接口")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "OK",  response = UserInfoVo.class)
+    })
+    @PostMapping(value = "/login")
+    public AjaxResult dologin(@RequestBody @Validated WebPadLoginDto loginDto)  throws Exception {
+
+        SysUsers user = new SysUsers();
+        user.setSuAccount(loginDto.getUsername());
+        user.setSuPassword(loginDto.getPassword());
+        LoginStrategy apLogin = new AccountPasswordLogin(user, sysUsersService);
+        user = authorityManager.login(apLogin);
+
+        UserInfoVo userInfoVo = new UserInfoVo();
+        if(user.getShopId()!=null){
+            SysShopInfo shopInfo = sysShopInfoService.findById(user.getShopId());
+            user.setShopName(shopInfo.getShopName());
+            userInfoVo.setShopName(shopInfo.getShopShortName());
+        }
+        user.setSuPassword(null);
+
+        String token = UUIDUtil.getRandomID();
+        LocalCache.save(token, user);
+
+        userInfoVo.setId(user.getSuId());
+        userInfoVo.setName(user.getSuName());
+        userInfoVo.setRoleName(user.getRoleName());
+        userInfoVo.setPhoto(user.getSuPhoto());
+
+        String sb = token + "_1" + "_/api/vip/findVipInfoById/972";
+        AjaxResult result = AjaxResult.buildSuccessInstance("登陆成功");
+        authorityManager.initUserPower(result);
+        result.putInMap("user", userInfoVo);
+        result.putInMap("token", token);
+        result.putInMap("rasToken", RSAUtils.encryptByPublicKey(sb, publicKey));
+        return result;
+    }
+
+    @ApiOperation(value = "用户退出系统", notes = "用户退出系统")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "ok", response = AjaxResult.class)
+    })
+    @GetMapping(value = "/loginOut")
+    public AjaxResult loginOut() {
+        authorityManager.getLoginOut();
+        return AjaxResult.buildSuccessInstance("退出系统成功");
+    }
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/action/PadOrderAction.java b/zq-erp/src/main/java/com/matrix/system/padApi/action/PadOrderAction.java
new file mode 100644
index 0000000..348df51
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/action/PadOrderAction.java
@@ -0,0 +1,120 @@
+package com.matrix.system.padApi.action;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.matrix.core.constance.MatrixConstance;
+import com.matrix.core.exception.GlobleException;
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.pojo.PaginationVO;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.core.tools.WebUtil;
+import com.matrix.system.app.vo.OrderDetailVo;
+import com.matrix.system.common.bean.BusParameterSettings;
+import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.tools.DataAuthUtil;
+import com.matrix.system.constance.Dictionary;
+import com.matrix.system.enums.BooleanEnum;
+import com.matrix.system.hive.action.BaseController;
+import com.matrix.system.hive.action.util.QueryUtil;
+import com.matrix.system.hive.bean.SysOrder;
+import com.matrix.system.hive.service.SysOrderService;
+import com.matrix.system.padApi.dto.PadOrderListDto;
+import com.matrix.system.padApi.vo.PadOrderDetailVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@CrossOrigin(origins = "*")
+@Api(value = "PadOrderAction", tags = "pad端订单请求")
+@RestController
+@RequestMapping(value = "/api/pad/order")
+public class PadOrderAction extends BaseController {
+
+    @Resource
+    private SysOrderService sysOrderService;
+
+    @Resource
+    private SysOrderService orderService;
+
+    @Autowired
+    private BusParameterSettingsDao busParameterSettingsDao;
+
+    @ApiOperation(value = "获取订单列表", notes = "获取订单列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "ok", response = PadOrderDetailVo.class)
+    })
+    @PostMapping(value = "/findOrderList")
+    public AjaxResult findOrderList(@RequestBody @Validated PadOrderListDto orderListDto) {
+        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        int offset = (orderListDto.getPageNum() - 1) * orderListDto.getPageSize();
+        int limit = orderListDto.getPageSize();
+        PaginationVO pageVo = new PaginationVO();
+        pageVo.setOffset(offset);
+        pageVo.setLimit(limit);
+
+        if (!DataAuthUtil.hasAllShopAuth()) {
+            orderListDto.setShopId(user.getShopId());
+        }
+        QueryUtil.setQueryLimitCom(orderListDto);
+        return AjaxResult.buildSuccessInstance(sysOrderService.findPadApiOrderListInPage(orderListDto, pageVo),
+                sysOrderService.findPadApiOrderListTotal(orderListDto));
+    }
+
+    @ApiOperation(value = "获取订单详情", notes = "获取订单详情")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "ok", response = OrderDetailVo.class)
+    })
+    @GetMapping(value = "/findOrderDetail/{orderId}")
+    public AjaxResult findOrderDetail(@PathVariable("orderId") Long orderId) {
+        OrderDetailVo orderDetail = sysOrderService.findApiOrderDetailByOrderId(orderId);
+        AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("获取成功");
+        ajaxResult.putInMap("orderDetail", orderDetail);
+        return ajaxResult;
+    }
+
+    @ApiOperation(value = "取消订单", notes = "取消订单")
+    @GetMapping(value = "/cancelOrder/{id}")
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult cancelOrder(Long id) {
+
+        SysOrder order = orderService.findById(id);
+        if (ObjectUtil.isEmpty(order)) {
+            return new AjaxResult(AjaxResult.STATUS_FAIL, "订单不存在!");
+        }
+
+        BusParameterSettings shopManageAbleCancelDfkOrder = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_ABLE_CANCEL_DFK_ORDER, order.getCompanyId());
+        if (StringUtils.isNotBlank(shopManageAbleCancelDfkOrder.getParamValue())
+                && BooleanEnum.TRUE.getValue() == shopManageAbleCancelDfkOrder.getIntParamValue()) {
+
+            if (!Dictionary.ORDER_STATU_DFK.equals(order.getStatu())) {
+                return new AjaxResult(AjaxResult.STATUS_FAIL, "您只能取消待付款订单");
+            }
+        }
+        orderService.cancelOrder(id);
+        return AjaxResult.buildSuccessInstance("取消成功");
+    }
+
+    @ApiOperation(value = "收款", notes = "收款")
+    @PostMapping(value = "/sk")
+    public AjaxResult sk(@RequestBody SysOrder order) throws GlobleException {
+        orderService.payOrder(order);
+        return AjaxResult.buildSuccessInstance("收款成功");
+    }
+
+    @ApiOperation(value = "补交", notes = "补交")
+    @PostMapping(value = "/bj")
+    public AjaxResult bj(@RequestBody SysOrder order){
+        orderService.updateAfterMoney(order);
+        return AjaxResult.buildSuccessInstance("补交成功");
+    }
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/action/PadServiceAction.java b/zq-erp/src/main/java/com/matrix/system/padApi/action/PadServiceAction.java
new file mode 100644
index 0000000..0332323
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/action/PadServiceAction.java
@@ -0,0 +1,182 @@
+package com.matrix.system.padApi.action;
+
+import cn.hutool.core.collection.CollUtil;
+import com.matrix.core.exception.GlobleException;
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.pojo.PaginationVO;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.core.tools.WebUtil;
+import com.matrix.system.common.bean.BusParameterSettings;
+import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.constance.AppConstance;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.service.SysUsersService;
+import com.matrix.system.common.tools.DataAuthUtil;
+import com.matrix.system.constance.Dictionary;
+import com.matrix.system.enums.BooleanEnum;
+import com.matrix.system.hive.action.BaseController;
+import com.matrix.system.hive.action.util.QueryUtil;
+import com.matrix.system.hive.bean.*;
+import com.matrix.system.hive.dao.*;
+import com.matrix.system.hive.service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@CrossOrigin(origins = "*")
+@Api(value = "PadServiceAction", tags = "pad端服务单请求")
+@RestController
+@RequestMapping(value = "/api/pad/service")
+public class PadServiceAction extends BaseController {
+
+    @Resource
+    private SysProjServicesService projServicesSerivce;
+    @Resource
+    private SysProjUseService projUseService;
+    @Resource
+    private SysBedInfoService bedInfoService;
+    @Autowired
+    SysProjGoodsDao sysProjGoodsDao;
+    @Resource
+    private SysProjServicesService sysProjServicesService;
+    @Resource
+    private SysVipInfoService sysVipInfoService;
+    @Autowired
+    private SysBeauticianStateDao beauticianStateDao;
+    @Autowired
+    AchieveNewService achieveNewService;
+    @Autowired
+    private SysBedStateDao sysBedStateDao;
+    @Autowired
+    ShoppingGoodsAssembleDao goodsAssembleDao;
+    @Autowired
+    SysShopInfoDao shopInfoDao;
+    @Resource
+    private SysUsersService usersService;
+    @Autowired
+    private SysProjServicesDao sysProjServicesDao;
+    @Autowired
+    BusParameterSettingsDao busParameterSettingsDao;
+
+    /**
+     * 显示所有服务单列表
+     */
+    @ApiOperation(value = "显示所有服务单列表", notes = "显示所有服务单列表")
+    @PostMapping(value = "/showList")
+    public AjaxResult showList(@RequestBody SysProjServices projService, PaginationVO pageVo) {
+
+        //默认排序
+        if (StringUtils.isBlank(pageVo.getSort())) {
+            pageVo.setSort("create_time");
+        }
+        if (StringUtils.isBlank(pageVo.getOrder())) {
+            pageVo.setOrder("desc");
+        }
+        if (!DataAuthUtil.hasAllShopAuth()) {
+            projService.setShopId(getMe().getShopId());
+        }
+        QueryUtil.setQueryLimitCom(projService);
+        List<SysProjServices> dataList = projServicesSerivce.findInPage(projService, pageVo);
+        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, dataList, projServicesSerivce.findTotal(projService));
+        return result;
+    }
+    /**
+     * 进入预约排班详情
+     *
+     * @author 姜友瑶
+     */
+    @ApiOperation(value = "进入预约排班详情", notes = "进入预约排班详情")
+    @PostMapping(value = "/serviceInfo")
+    public AjaxResult findPbxq(@RequestBody SysProjServices projServicesVo) {
+        QueryUtil.setQueryLimitCom(projServicesVo);
+        // 获取服务单信息
+        SysProjServices projServices = null;
+        if(projServicesVo.getId()!=null){
+            projServices=   sysProjServicesService.findById(projServicesVo.getId());
+        }else if(StringUtils.isNotBlank(projServicesVo.getServiceNo())) {
+            List<SysProjServices> byModel = sysProjServicesService.findByModel(projServicesVo);
+            if (byModel.size() == 1) {
+                projServices=   sysProjServicesService.findById( byModel.get(0).getId());
+            }
+        }
+        if(projServices==null){
+            throw new GlobleException("未查询到单据信息");
+        }
+        // 获取服务单所有信息
+        // 设置会员信息
+        projServices.setVipInfo(sysVipInfoService.findById(projServices.getVipId()));
+        //补充服务单扩展信息===============
+        List<SysBeauticianState> beauticianStateList = beauticianStateDao.selectBySerIds(projServices.getId());
+        if (CollUtil.isNotEmpty(beauticianStateList)) {
+            for (SysBeauticianState sysBeauticianState : beauticianStateList) {
+                if (sysBeauticianState.getProjUse().getTaocanId() != null) {
+                    SysProjUse sysProjUse = projUseService.findById(sysBeauticianState.getProjUse().getTaocanId());
+                    if(sysProjUse != null) {
+                        sysBeauticianState.getProjInfo().setName(sysProjUse.getProjName() + "--" + sysBeauticianState.getProjInfo().getName());
+                    }
+                }
+            }
+        }
+        projServices.setServiceItems(beauticianStateList);
+
+        SysBedState sysBedState = sysBedStateDao.selectBySerIdAndBedId(projServices.getId(), projServices.getBedId());
+        projServices.setBedState(sysBedState);
+        //补充服务单扩展信息===============END
+
+        // 根据岗位名称查询员工
+        List<SysUsers> pls = usersService.findByRoleName(true, Dictionary.STAFF_POST_PLS);
+        pls.addAll(usersService.findByRoleName(true, Dictionary.STAFF_POST_PLZG));
+        List<SysUsers> mls = usersService.findByRoleName(true, Dictionary.STAFF_POST_MLS);
+        WebUtil.getRequest().setAttribute("pls", pls);
+        WebUtil.getRequest().setAttribute("mls", mls);
+
+        SysBedInfo bedInfo = new SysBedInfo();
+        bedInfo.setShopId(getMe().getShopId());
+        // 显示当前查询的服务订单的项目信息
+        AjaxResult result = AjaxResult.buildSuccessInstance("");
+        result.putInMap("obj", projServices);
+        result.putInMap("serviceId", projServicesVo.getId());
+        result.putInMap("pageFlae", projServicesVo.getPageFlae());
+        result.putInMap("cw", bedInfoService.findByModel(bedInfo));
+        result.putInMap("pls", pls);
+        result.putInMap("mls", mls);
+        return result;
+    }
+    /**
+     * 根据id取消预约
+     */
+    @ApiOperation(value = "根据id取消预约", notes = "根据id取消预约")
+    @GetMapping(value = "/cancelOrder/{id}")
+    public AjaxResult cancelOrder(@PathVariable("id")Long id) {
+
+        SysProjServices checkProjServices = sysProjServicesDao.selectById(id);
+        QueryUtil.setQueryLimitCom(checkProjServices);
+        BusParameterSettings shopManageAbleCancelDfkOrder = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_ABLE_CANCEL_DFK_ORDER, checkProjServices.getCompanyId());
+        if (StringUtils.isNotBlank(shopManageAbleCancelDfkOrder.getParamValue())
+                && BooleanEnum.TRUE.getValue() == shopManageAbleCancelDfkOrder.getIntParamValue()) {
+
+            if (!checkProjServices.getState().equals(Dictionary.SERVICE_STATU_DYY)
+                    && !checkProjServices.getState().equals(Dictionary.SERVICE_STATU_DQR)) {
+                return new AjaxResult(AjaxResult.STATUS_FAIL, "您只能取消待预约订单");
+            }
+        }else{
+            if (checkProjServices.getState().equals(Dictionary.SERVICE_STATU_FWWC)
+                    || checkProjServices.getState().equals(Dictionary.SERVICE_STATU_FFJS)) {
+                return new AjaxResult(AjaxResult.STATUS_FAIL, "当前状态无法取消订单");
+            }
+        }
+
+        int i = sysProjServicesService.modifyCancelProjServices(checkProjServices);
+        if (i > 0) {
+            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "取消预约成功");
+        } else {
+            return new AjaxResult(AjaxResult.STATUS_FAIL, "取消预约失败");
+        }
+    }
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/action/PadVipAction.java b/zq-erp/src/main/java/com/matrix/system/padApi/action/PadVipAction.java
new file mode 100644
index 0000000..975668d
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/action/PadVipAction.java
@@ -0,0 +1,184 @@
+package com.matrix.system.padApi.action;
+
+import cn.hutool.core.util.StrUtil;
+import com.matrix.component.asyncmessage.AsyncMessageManager;
+import com.matrix.core.constance.MatrixConstance;
+import com.matrix.core.pojo.AjaxResult;
+import com.matrix.core.pojo.PaginationVO;
+import com.matrix.core.tools.DateUtil;
+import com.matrix.core.tools.WebUtil;
+import com.matrix.system.common.bean.CustomerDataDictionary;
+import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.dao.CustomerDataDictionaryDao;
+import com.matrix.system.common.service.SysUsersService;
+import com.matrix.system.constance.Dictionary;
+import com.matrix.system.hive.action.BaseController;
+import com.matrix.system.hive.action.util.QueryUtil;
+import com.matrix.system.hive.bean.SysOrder;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.MoneyCardUseDao;
+import com.matrix.system.hive.dao.ShoppingGoodsDao;
+import com.matrix.system.hive.dao.SysVipLabelDao;
+import com.matrix.system.hive.pojo.CzXkVo;
+import com.matrix.system.hive.service.MoneyCardUseService;
+import com.matrix.system.hive.service.SysOrderService;
+import com.matrix.system.hive.service.SysVipInfoService;
+import com.matrix.system.padApi.dto.PadVipListDto;
+import com.matrix.system.score.dao.ScoreVipDetailDao;
+import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting;
+import com.matrix.system.wechart.templateMsg.UniformMsgParam;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@CrossOrigin(origins = "*")
+@Api(value = "PadVipAction", tags = "pad端Vip客户请求")
+@RestController
+@RequestMapping(value = "/api/pad/vipInfo")
+public class PadVipAction extends BaseController {
+
+    @Resource
+    private SysVipInfoService vipInfoService;
+    @Resource
+    private SysOrderService sysOrderService;
+    @Autowired
+    ShoppingGoodsDao shoppingGoodsDao;
+    @Autowired
+    private ScoreVipDetailDao scoreVipDetailDao;
+    @Resource
+    private MoneyCardUseService cardUseService;
+    @Autowired
+    private MoneyCardUseDao moneyCardUseDao;
+    @Autowired
+    private SysVipLabelDao sysVipLabelDao;
+    @Resource
+    private SysOrderService orderService;
+    @Autowired
+    private AsyncMessageManager asyncMessageManager;
+    @Autowired
+    private SysUsersService sysUsersService;
+    @Autowired
+    private CustomerDataDictionaryDao dataDictionaryDao;
+
+    /**
+     * 显示所有的会员信息
+     */
+    @ApiOperation(value = "显示所有的会员信息列表", notes = "显示所有的会员信息列表")
+    @PostMapping(value = "/showVipInfoList")
+    public AjaxResult showList(@RequestBody @Validated PadVipListDto padVipListDto) {
+
+        SysVipInfo vipInfo = new SysVipInfo();
+        QueryUtil.setQueryLimit(vipInfo);
+        String queryKey = padVipListDto.getQueryKey();
+        if(StrUtil.isNotEmpty(queryKey)){
+            vipInfo.setPadQueryKey(queryKey);
+        }
+        int offset = (padVipListDto.getPageNum() - 1) * padVipListDto.getPageSize();
+        int limit = padVipListDto.getPageSize();
+        PaginationVO pageVo = new PaginationVO();
+        pageVo.setOffset(offset);
+        pageVo.setLimit(limit);
+
+        return showList(vipInfoService, vipInfo, pageVo);
+    }
+
+    /**
+     * 添加或修改会员信息
+     */
+    @ApiOperation(value = "添加或修改会员信息", notes = "添加或修改会员信息")
+    @PostMapping(value = "/addOrModify")
+    public AjaxResult addOrModify(@RequestBody SysVipInfo vipInfo) {
+        if (vipInfo.getId() != null) {
+            return modify(vipInfoService, vipInfo, "会员信息");
+        } else {
+            vipInfo.setVipState(Dictionary.VIP_STATE_HY);
+            SysUsers users = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+            if(vipInfo.getShopId()==null){
+                vipInfo.setShopId(users.getShopId());
+            }
+            if(vipInfo.getCompanyId()==null){
+                vipInfo.setCompanyId(users.getCompanyId());
+            }
+            return add(vipInfoService, vipInfo, "会员信息");
+        }
+    }
+
+    /**
+     * 查看会员信息
+     */
+    @SuppressWarnings("unchecked")
+    @ApiOperation(value = "查看会员信息", notes = "查看会员信息")
+    @GetMapping(value = "/showVipInfo/{phone}")
+    public AjaxResult findByModel(@PathVariable("phone")String phone) {
+        List<SysVipInfo> vips = vipInfoService.findByVipNoOrTel(phone);
+        if (vips.size() > 0) {
+            vips.get(0).setPointAll(scoreVipDetailDao.selectUserTotalScore(vips.get(0).getId()));
+            vips.get(0).setSysOrder(sysOrderService.findSysOrderTjByVipId(vips.get(0).getId()));
+            vips.get(0).setLevelCard(cardUseService.findByVipId(vips.get(0).getId()));
+            vips.get(0).setLabels(sysVipLabelDao.selectByVipId(vips.get(0).getId()));
+            vips.get(0).setAge(DateUtil.getAgeForBirthDay(vips.get(0).getBirthday1()));
+            vips.get(0).setBalance(moneyCardUseDao.selectVipCardTotalMoney(vips.get(0).getId()));
+            vips.get(0).setArrears(sysOrderService.findVipArrearsByVipId(vips.get(0).getId()));
+            AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, vips, 0);
+            return result;
+        } else {
+            return AjaxResult.buildFailInstance("未查到询客户信息");
+        }
+    }
+
+    /**
+     * 充值 查询门店所有员工
+     */
+    @ApiOperation(value = "充值 查询门店所有员工", notes = "充值 查询门店所有员工")
+    @GetMapping(value = "/shopAll")
+    public AjaxResult shopAll() {
+        return new AjaxResult(AjaxResult.STATUS_SUCCESS, sysUsersService.findByRoleName(true, null));
+    }
+    /**
+     * 充值 查询业绩类型
+     */
+    @ApiOperation(value = "充值 查询业绩类型", notes = "充值 查询业绩类型")
+    @GetMapping(value = "getListByParentCode/{parentCode}")
+    public AjaxResult getListByParentCode(@PathVariable String parentCode) {
+        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+
+        List<CustomerDataDictionary> list = dataDictionaryDao.selectByParentCode(parentCode, user.getCompanyId());
+        return new AjaxResult(AjaxResult.STATUS_SUCCESS, list, list.size());
+    }
+
+    /**
+     * 充值 查询当前登录人
+     */
+    @ApiOperation(value = "充值 查询当前登录人", notes = "充值 查询当前登录人")
+    @GetMapping(value = "getLoginUser")
+    public AjaxResult getLoginUser() {
+        AjaxResult result = AjaxResult.buildSuccessInstance("");
+        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        result.putInMap("user", user);
+        return result;
+    }
+
+    /**
+     * 充值
+     */
+    @ApiOperation(value = "充值", notes = "充值")
+    @PostMapping(value = "/cz")
+    public AjaxResult cz(@RequestBody CzXkVo czVo) {
+        SysOrder order=  orderService.moneyCardCz(czVo);
+        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, "充值成功");
+
+        //发送微信公众号提醒
+        UniformMsgParam uniformMsgParam=new UniformMsgParam(order.getCompanyId(),UniformMsgParam.GZH_CZCG);
+        uniformMsgParam.put("orderId",order.getId());
+        asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG ,uniformMsgParam);
+
+        result.putInMap("orderId",order.getId());
+        return result;
+    }
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/dto/PadOrderListDto.java b/zq-erp/src/main/java/com/matrix/system/padApi/dto/PadOrderListDto.java
new file mode 100644
index 0000000..63f102e
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/dto/PadOrderListDto.java
@@ -0,0 +1,95 @@
+package com.matrix.system.padApi.dto;
+
+import com.matrix.system.app.dto.BasePageDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@ApiModel(value = "PadOrderListDto", description = "订单列表接收参数类")
+public class PadOrderListDto extends BasePageDto {
+
+    @ApiModelProperty(value = "订单状态 0-全部 1-待付款 2-已付款 3-欠款 全部默认传空字符串", example = "1")
+    private Integer orderStatus;
+
+    @ApiModelProperty(hidden = true)
+    private String status;
+
+    @ApiModelProperty(value = "查询字段")
+    private String queryKey;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+    private Date orderTime;
+
+    @ApiModelProperty(hidden = true)
+    private Long shopId;
+
+    @ApiModelProperty(hidden = true)
+    private Long companyId;
+
+    public Date getOrderTime() {
+        return orderTime;
+    }
+
+    public void setOrderTime(Date orderTime) {
+        this.orderTime = orderTime;
+    }
+
+    public Long getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Long companyId) {
+        this.companyId = companyId;
+    }
+
+    public Long getShopId() {
+        return shopId;
+    }
+
+    public void setShopId(Long shopId) {
+        this.shopId = shopId;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getQueryKey() {
+        return queryKey;
+    }
+
+    public void setQueryKey(String queryKey) {
+        this.queryKey = queryKey;
+    }
+
+    public Integer getOrderStatus() {
+        return orderStatus;
+    }
+
+    public void setOrderStatus(Integer orderStatus) {
+        this.orderStatus = orderStatus;
+        switch (orderStatus) {
+            case 0 :
+                this.status = "";
+                break;
+            case 1:
+                this.status = "待付款";
+                break;
+            case 2:
+                this.status = "已付款";
+                break;
+            case 3:
+                this.status = "欠款";
+                break;
+            default:
+                this.status = "";
+                break;
+        }
+    }
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/dto/PadVipListDto.java b/zq-erp/src/main/java/com/matrix/system/padApi/dto/PadVipListDto.java
new file mode 100644
index 0000000..e9fc5ad
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/dto/PadVipListDto.java
@@ -0,0 +1,21 @@
+package com.matrix.system.padApi.dto;
+
+import com.matrix.system.app.dto.BasePageDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "PadVipListDto", description = "订单列表接收参数类")
+@Data
+public class PadVipListDto extends BasePageDto {
+
+    @ApiModelProperty(value = "查询字段")
+    private String queryKey;
+
+    @ApiModelProperty(hidden = true)
+    private Long shopId;
+
+    @ApiModelProperty(hidden = true)
+    private Long companyId;
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/dto/WebPadLoginDto.java b/zq-erp/src/main/java/com/matrix/system/padApi/dto/WebPadLoginDto.java
new file mode 100644
index 0000000..b6fb8c6
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/dto/WebPadLoginDto.java
@@ -0,0 +1,19 @@
+package com.matrix.system.padApi.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class WebPadLoginDto {
+
+    @ApiModelProperty(value = "用户名", example = "1234")
+    @NotBlank(message = "用户名或密码错误")
+    private String username;
+
+    @ApiModelProperty(value = "密码", example = "123456")
+    @NotBlank(message = "用户名或密码错误")
+    private String password;
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/vo/PadOrderDetailItemVo.java b/zq-erp/src/main/java/com/matrix/system/padApi/vo/PadOrderDetailItemVo.java
new file mode 100644
index 0000000..e7bb36e
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/vo/PadOrderDetailItemVo.java
@@ -0,0 +1,122 @@
+package com.matrix.system.padApi.vo;
+
+import com.matrix.system.app.vo.OrderDetailAchieveItemVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@ApiModel(value = "PadOrderDetailItemVo", description = "订单详情明细表")
+public class PadOrderDetailItemVo {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "数量")
+    private String count;
+
+    @ApiModelProperty(value = "现金支付")
+    private BigDecimal cashPay;
+
+    @ApiModelProperty(value = "储值卡支付")
+    private BigDecimal cardPay;
+
+    @ApiModelProperty(value = "欠款")
+    private BigDecimal arrears;
+
+    @ApiModelProperty(value = "原价")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "折扣价格")
+    private BigDecimal zkPrice;
+
+    @ApiModelProperty(value = "支付状态")
+    private String status;
+
+    @ApiModelProperty(value = "订单业绩")
+    private List<OrderDetailAchieveItemVo> achieves;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public List<OrderDetailAchieveItemVo> getAchieves() {
+        return achieves;
+    }
+
+    public void setAchieves(List<OrderDetailAchieveItemVo> achieves) {
+        this.achieves = achieves;
+    }
+
+    public String getGoodsName() {
+        return goodsName;
+    }
+
+    public void setGoodsName(String goodsName) {
+        this.goodsName = goodsName;
+    }
+
+    public String getCount() {
+        return count;
+    }
+
+    public void setCount(String count) {
+        this.count = count;
+    }
+
+    public BigDecimal getCashPay() {
+        return cashPay;
+    }
+
+    public void setCashPay(BigDecimal cashPay) {
+        this.cashPay = cashPay;
+    }
+
+    public BigDecimal getCardPay() {
+        return cardPay;
+    }
+
+    public void setCardPay(BigDecimal cardPay) {
+        this.cardPay = cardPay;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public BigDecimal getZkPrice() {
+        return zkPrice;
+    }
+
+    public void setZkPrice(BigDecimal zkPrice) {
+        this.zkPrice = zkPrice;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public BigDecimal getArrears() {
+        return arrears;
+    }
+
+    public void setArrears(BigDecimal arrears) {
+        this.arrears = arrears;
+    }
+}
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/vo/PadOrderDetailVo.java b/zq-erp/src/main/java/com/matrix/system/padApi/vo/PadOrderDetailVo.java
new file mode 100644
index 0000000..5222ced
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/vo/PadOrderDetailVo.java
@@ -0,0 +1,181 @@
+package com.matrix.system.padApi.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.matrix.core.tools.DateUtil;
+import com.matrix.system.app.vo.OrderDetailItemVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@ApiModel(value = "PadOrderDetailVo", description = "订单详情返回参数类")
+public class PadOrderDetailVo {
+
+    @ApiModelProperty(value = "订单ID")
+    private String orderId;
+
+    @ApiModelProperty(value = "会员ID")
+    private String vipId;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "客户")
+    private String vipName;
+
+    @ApiModelProperty(value = "手机")
+    private String phone;
+
+    @ApiModelProperty(value = "状态")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "顾问")
+    private String staffName;
+
+    @ApiModelProperty(value = "订单总价")
+    private BigDecimal needPay;
+
+    @ApiModelProperty(value = "折后价")
+    private BigDecimal realPay;
+
+    @JsonFormat(pattern = DateUtil.DATE_FORMAT_SS, timezone = "GMT+8")
+    @ApiModelProperty(value = "下单时间")
+    private Date orderTime;
+
+    @ApiModelProperty(value = "现金支付金额")
+    private BigDecimal cashPay;
+
+    @ApiModelProperty(value = "储值卡支付金额")
+    private BigDecimal cardPay;
+
+    @ApiModelProperty(value = "优惠金额")
+    private BigDecimal discount;
+
+    @ApiModelProperty(value = "订单明细")
+    private List<OrderDetailItemVo> items;
+
+    @ApiModelProperty(value = "欠款")
+    private BigDecimal arrears;
+
+    public String getVipId() {
+        return vipId;
+    }
+
+    public void setVipId(String vipId) {
+        this.vipId = vipId;
+    }
+
+    public Date getOrderTime() {
+        return orderTime;
+    }
+
+    public void setOrderTime(Date orderTime) {
+        this.orderTime = orderTime;
+    }
+
+    public String getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(String orderId) {
+        this.orderId = orderId;
+    }
+
+    public BigDecimal getArrears() {
+        return arrears;
+    }
+
+    public void setArrears(BigDecimal arrears) {
+        this.arrears = arrears;
+    }
+
+    public String getOrderStatus() {
+        return orderStatus;
+    }
+
+    public void setOrderStatus(String orderStatus) {
+        this.orderStatus = orderStatus;
+    }
+
+    public List<OrderDetailItemVo> getItems() {
+        return items;
+    }
+
+    public void setItems(List<OrderDetailItemVo> items) {
+        this.items = items;
+    }
+
+    public String getVipName() {
+        return vipName;
+    }
+
+    public void setVipName(String vipName) {
+        this.vipName = vipName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getStaffName() {
+        return staffName;
+    }
+
+    public void setStaffName(String staffName) {
+        this.staffName = staffName;
+    }
+
+    public BigDecimal getCashPay() {
+        return cashPay;
+    }
+
+    public void setCashPay(BigDecimal cashPay) {
+        this.cashPay = cashPay;
+    }
+
+    public BigDecimal getCardPay() {
+        return cardPay;
+    }
+
+    public void setCardPay(BigDecimal cardPay) {
+        this.cardPay = cardPay;
+    }
+
+    public BigDecimal getNeedPay() {
+        return needPay;
+    }
+
+    public void setNeedPay(BigDecimal needPay) {
+        this.needPay = needPay;
+    }
+
+    public BigDecimal getRealPay() {
+        return realPay;
+    }
+
+    public void setRealPay(BigDecimal realPay) {
+        this.realPay = realPay;
+    }
+
+    public BigDecimal getDiscount() {
+        return discount;
+    }
+
+    public void setDiscount(BigDecimal discount) {
+        this.discount = discount;
+    }
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/padApi/vo/UserInfoVo.java b/zq-erp/src/main/java/com/matrix/system/padApi/vo/UserInfoVo.java
new file mode 100644
index 0000000..5c1c3dc
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/padApi/vo/UserInfoVo.java
@@ -0,0 +1,27 @@
+package com.matrix.system.padApi.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "UserInfoVo", description = "用户信息返回类")
+@Data
+public class UserInfoVo {
+
+    @ApiModelProperty(value = "用户ID", example = "1")
+    private Long id;
+
+    @ApiModelProperty(value = "用户名称", example = "呵呵")
+    private String name;
+
+    @ApiModelProperty(value = "职位", example = "店长")
+    private String roleName;
+
+    @ApiModelProperty(value = "头像", example = "--")
+    private String photo;
+
+    @ApiModelProperty(value = "门店名称")
+    private String shopName;
+
+}
+
diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderDao.xml
index eb2c3aa..bd66336 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderDao.xml
@@ -558,6 +558,48 @@
         </if>
     </select>
 
+    <select id="selectPadApiOrderListInPage" resultType="com.matrix.system.padApi.vo.PadOrderDetailVo">
+        select
+        a.id orderId,
+        a.VIP_ID vipId,
+        a.ORDER_NO orderNo,
+        a.ORDER_TIME orderTime,
+        a.STATU orderStatus,
+        a.ZK_TOTAL needPay,
+        (a.card_Pay + a.cash_Pay) realPay,
+        a.arrears arrears,
+        b.su_name staffName,
+        c.VIP_NAME vipName,
+        c.PHONE phone
+        from sys_order a
+        left join sys_users b on a.STAFF_ID = b.su_id
+        left join sys_vip_info c on c.id = a.VIP_ID
+        <where>
+            <if test="record.queryKey != null and record.queryKey != ''">
+                and (instr(c.vip_name, #{record.queryKey}) or instr(c.phone, #{record.queryKey}) or instr(a.order_no, #{record.queryKey}))
+            </if>
+            <if test="record.status != null and record.status != ''">
+                and a.statu = #{record.status}
+            </if>
+            <if test="record.orderTime != null  ">
+                and a.ORDER_TIME = #{record.orderTime}
+            </if>
+            <if test="record.shopId != null">
+                and a.shop_id=#{record.shopId}
+            </if>
+            <if test="record.companyId != null">
+                and a.company_id=#{record.companyId}
+            </if>
+        </where>
+        <if test="pageVo !=null"><!-- 判断pageVo对象是否为空 -->
+            order by a.order_time desc
+            <if test="pageVo.offset >=0  and pageVo.limit >0">
+                limit
+                #{pageVo.offset},#{pageVo.limit}
+            </if>
+        </if>
+    </select>
+
     <select id="selectApiOrderListTotal" resultType="java.lang.Integer">
         select
             count(1)
@@ -570,6 +612,31 @@
             </if>
             <if test="record.status != null and record.status != ''">
                 and a.statu = #{record.status}
+            </if>
+            <if test="record.shopId != null">
+                and a.shop_id=#{record.shopId}
+            </if>
+            <if test="record.companyId != null">
+                and a.company_id=#{record.companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectPadApiOrderListTotal" resultType="java.lang.Integer">
+        select
+        count(1)
+        from sys_order a
+        left join sys_users b on a.STAFF_ID = b.su_id
+        left join sys_vip_info c on c.id = a.VIP_ID
+        <where>
+            <if test="record.queryKey != null and record.queryKey != ''">
+                and (instr(c.vip_name, #{record.queryKey}) or instr(c.phone, #{record.queryKey}) or instr(a.order_no, #{record.queryKey}))
+            </if>
+            <if test="record.status != null and record.status != ''">
+                and a.statu = #{record.status}
+            </if>
+            <if test="record.orderTime != null  ">
+                and a.ORDER_TIME = #{record.orderTime}
             </if>
             <if test="record.shopId != null">
                 and a.shop_id=#{record.shopId}
@@ -601,6 +668,27 @@
         where a.id=#{orderId}
     </select>
 
+    <select id="selectPadApiOrderDetailById" resultType="com.matrix.system.padApi.vo.PadOrderDetailVo">
+        select
+            a.id orderId,
+            b.VIP_NAME vipName,
+            b.PHONE phone,
+            a.ORDER_NO orderNo,
+            c.su_name staffName,
+            a.cash_Pay cashPay,
+            a.card_Pay cardPay,
+            a.ZK_TOTAL needPay,
+            a.cash_Pay + a.card_Pay realPay,
+            a.arrears arrears,
+            a.TOTAL - a.ZK_TOTAL discount,
+            a.STATU orderStatus,
+            a.order_time orderTime
+        from sys_order a
+                 inner join sys_vip_info b on a.VIP_ID=b.ID
+                 left join sys_users c on a.STAFF_ID=c.su_id
+        where a.id=#{orderId}
+    </select>
+
     <select id="selectShopAchieveRanking" resultType="com.matrix.system.app.vo.RankingVo">
         select
                b.shop_short_name name,
diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
index 93cdba5..f3fa230 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderItemDao.xml
@@ -547,6 +547,21 @@
         where a.ORDER_ID=#{orderId};
     </select>
 
+    <select id="selectPadApiOrderDetailItemsByOrderId" resultType="com.matrix.system.padApi.vo.PadOrderDetailItemVo">
+        select
+               a.id id,
+               b.name goodsName,
+               a.COUNT count,
+               a.cash_Pay cashPay,
+               a.card_Pay cardPay,
+               a.PRICE price,
+               a.ZK_PRICE zkPrice,
+               a.status status
+        from sys_order_item a
+        inner join shopping_goods b on a.goods_id=b.id
+        where a.ORDER_ID=#{orderId};
+    </select>
+
     <select id="selectErpOrderItemByOrderId"
             resultType="com.matrix.system.shopXcx.api.vo.ErpOrderDetailItemVo">
             select
diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml
index b23d511..efbcb82 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml
@@ -808,6 +808,10 @@
             <if test="record.phone != null and record.phone !='' ">
                 and a.PHONE like CONCAT('%',#{record.phone},'%')
             </if>
+            <if test="record.padQueryKey != null and record.padQueryKey !='' ">
+                and (a.PHONE like CONCAT('%',#{record.padQueryKey},'%')
+                 or instr(a.VIP_NAME ,#{record.padQueryKey}) )
+            </if>
             <if test="record.sex != null and record.sex !='' ">
                 and a.SEX = #{record.sex}
             </if>
diff --git a/zq-erp/src/test/java/com/matrix/JyyTests2.java b/zq-erp/src/test/java/com/matrix/JyyTests2.java
index 4393a4b..d54f063 100644
--- a/zq-erp/src/test/java/com/matrix/JyyTests2.java
+++ b/zq-erp/src/test/java/com/matrix/JyyTests2.java
@@ -4,25 +4,35 @@
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.matrix.core.constance.MatrixConstance;
+import com.matrix.core.exception.GlobleException;
+import com.matrix.core.tools.DateUtil;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.common.bean.BusParameterSettings;
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.common.dao.SysUsersDao;
+import com.matrix.system.common.dao.UtilDao;
+import com.matrix.system.common.service.BusParameterSettingService;
+import com.matrix.system.common.service.OperationLogService;
+import com.matrix.system.common.tools.ServiceUtil;
+import com.matrix.system.constance.Dictionary;
+import com.matrix.system.constance.TableMapping;
 import com.matrix.system.enums.BooleanEnum;
+import com.matrix.system.enums.OperationButtonEnum;
+import com.matrix.system.enums.OperationFunctionEnum;
 import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant;
 import com.matrix.system.fenxiao.dao.ShopSalesmanGradeDao;
 import com.matrix.system.fenxiao.dao.ShopSalesmanOrderDao;
 import com.matrix.system.fenxiao.entity.ShopSalesmanGrade;
 import com.matrix.system.fenxiao.entity.ShopSalesmanOrder;
+import com.matrix.system.hive.bean.SysBeauticianState;
+import com.matrix.system.hive.bean.SysBedState;
+import com.matrix.system.hive.bean.SysProjServices;
 import com.matrix.system.hive.bean.SysVipInfo;
-import com.matrix.system.hive.dao.SysOrderDao;
-import com.matrix.system.hive.dao.SysOrderItemDao;
-import com.matrix.system.hive.dao.SysVipInfoDao;
-import com.matrix.system.hive.service.CodeService;
-import com.matrix.system.hive.service.ShoppingGoodsService;
-import com.matrix.system.hive.service.SysOrderService;
-import com.matrix.system.hive.service.SysVipInfoService;
+import com.matrix.system.hive.dao.*;
+import com.matrix.system.hive.service.*;
+import com.matrix.system.score.service.ScoreVipDetailService;
 import com.matrix.system.shopXcx.bean.ShopOrder;
 import com.matrix.system.shopXcx.bean.ShopOrderDetails;
 import com.matrix.system.shopXcx.bean.ShopProduct;
@@ -39,6 +49,8 @@
 
 import java.io.IOException;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -60,9 +72,6 @@
     @Autowired
     SysVipInfoService sysVipInfoService;
 
-
-    @Autowired
-    private SysVipInfoDao vipDap;
 
     @Autowired
     SysVipInfoDao vipDao;
@@ -98,6 +107,117 @@
     @Autowired
     private BusParameterSettingsDao busParameterSettingsDao;
 
+
+    @Autowired
+    SysBedStateDao sysBedStateDao;
+    @Autowired
+    private SysProjServicesDao sysProjServicesDao;
+
+    @Autowired
+    private SysBedStateDao bedStateDao;
+
+    @Autowired
+    private SysBeauticianStateDao beauticianStateDao;
+
+    @Autowired
+    TaiYanAliyunSmsService taiYanAliyunSmsService;
+
+    @Autowired
+    ServicesFlowDao servicesFlowDao;
+
+    @Autowired
+    SysUsersDao userDao;
+
+    @Autowired
+    ShoppingGoodsAssembleDao shoppingGoodsAssembleDao;
+
+    @Autowired
+    BusParameterSettingService busParameterSettingService;
+
+    @Autowired
+    ScoreVipDetailService scoreVipDetailService;
+
+    @Autowired
+    SysVipInfoDao sysVipInfoDao;
+
+    @Autowired
+    ShoppingGoodsAssembleDao goodsAssembleDao;
+
+    @Autowired
+    private OperationLogService operationLogService;
+    @Autowired
+    private UtilDao utilDao;
+
+    @Autowired
+    private ServiceUtil serviceUtil;
+
+    @Test
+    public void testQuChong(){
+        boolean b = serviceUtil.addCheckRepeatTowColumn(TableMapping.SYS_VIP_INFO, "PHONE", "18229856946",
+                "company_id", 17);
+        System.out.println("___________" + b);
+    }
+
+    private HashMap<String, Object> excuteTow(String tableName, String column1, Object value1, String column2,
+                                              Object value2) {
+        HashMap<String, Object> query = new HashMap<>(MatrixConstance.COLLECTION_SIZE);
+        query.put("tableName", tableName);
+        query.put("column1", column1);
+        query.put("value1", value1);
+        query.put("column2", column2);
+        query.put("value2", value2);
+        query = (HashMap<String, Object>) utilDao.selectRepeatTowColumn(query);
+        return query;
+    }
+
+    @Test
+    public void testServiceError(){
+        SysProjServices projServices = new SysProjServices();
+        projServices.setId(12948L);
+
+        SysProjServices checkprojServices = sysProjServicesDao.selectById(projServices.getId());
+        if (!checkprojServices.getState().equals(Dictionary.SERVICE_STATU_FWZ)) {
+            throw new GlobleException("该服务单状态为" + checkprojServices.getState() + ",不可以进行当前操作!");
+        }
+        SysBeauticianState checkBeauticianState = new SysBeauticianState();
+        checkBeauticianState.setServicesId(projServices.getId());
+        checkBeauticianState.setState(Dictionary.BEATUI_STATE_FWJS);
+        int rerunlt = beauticianStateDao.chengItemState(checkBeauticianState);
+
+        // 验证是否是最后一个美疗师结束服务
+        boolean isOver = true;
+        List<SysBeauticianState> beauticianStateList = beauticianStateDao.selectBySerIds(checkprojServices.getId());
+        for (SysBeauticianState beauticianState : beauticianStateList) {
+            if (!beauticianState.getState().equals(Dictionary.BEATUI_STATE_FWJS)) {
+                isOver = false;
+                break;
+            }
+        }
+        if (isOver) {
+            // 释放床位资源
+            SysBedState checkBedState = sysBedStateDao.selectBySerIdAndBedId(checkprojServices.getBedId(), checkprojServices.getId());
+            if (checkBedState != null) {
+                checkBedState.setBedState(Dictionary.BED_STATE_SYJS);
+                bedStateDao.update(checkBedState);
+            }
+            checkprojServices.setEndTime(new Date());
+            // 计算时差
+            long minspace = DateUtil.getDifTimeMin(checkprojServices.getStartTime(), checkprojServices.getEndTime())
+                    - checkprojServices.getTotalTime();
+            // 判断是服务超时还是服务提前结束,如果minspace大于0则是超时服务,小于0则是提前结束服务
+            checkprojServices.setIsOverTime(minspace + "");
+            checkprojServices.setState(Dictionary.SERVICE_STATU_FWWC);
+            sysProjServicesDao.update(checkprojServices);
+        }
+        //保存单据日志
+        operationLogService.saveOperation(checkprojServices.getCompanyId(), checkprojServices.getShopId(),1028L,
+                OperationFunctionEnum.SERVICE_ORDER,
+                OperationButtonEnum.SERVICE_ORDER_END,
+                checkprojServices.getId(),
+                checkprojServices.getServiceNo(),
+                checkprojServices.getVipId());
+    }
+
     public boolean isSettingOpen(String settingKey,Long companyId) {
         BusParameterSettings busParameterSettings = busParameterSettingsDao.selectCompanyParamByCode(settingKey, companyId);
         return (

--
Gitblit v1.9.1