jyy
2021-01-28 5d47b1c7a70ebd532e39906c6c238531258405e3
Merge branch 'api' into hive2.0
5 files added
30 files modified
1907 ■■■■ changed files
zq-erp/src/main/java/com/matrix/system/app/action/ApiServiceOrderAction.java 3 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java 68 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java 11 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java 5 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/ProjUseController.java 39 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/action/TaocanController.java 24 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java 15 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjUse.java 14 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderFlowDao.java 6 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/dto/OrderFlowListDto.java 126 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java 6 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java 21 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java 5 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java 61 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java 192 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java 83 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/statistics/OrderFlowAction.java 137 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/statistics/ServiceStatisticsAction.java 1 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/vo/OrderFlowVo.java 152 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpVipInfoController.java 11 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/YuyueAction.java 13 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/MoneyCardUseDao.xml 11 ●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysBeauticianStateDao.xml 4 ●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderFlowDao.xml 104 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysProjServicesDao.xml 2 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml 61 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/static/css/styleOne/style.min.css 9 ●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/static/js/systools/AjaxProxyVue.js 11 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/jyls.html 330 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/statistics-projSercice-item.html 12 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/cz-form.html 9 ●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html 34 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/statistics/jyls.html 305 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/statistics/statistics-projSercice-item.html 17 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/app/action/ApiServiceOrderAction.java
@@ -42,7 +42,6 @@
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -131,7 +130,7 @@
        if (CollectionUtils.isNotEmpty(serviceTcVos)) {
            serviceTcVos.forEach(item -> {
                List<SysProjUse> sysProjUses = projUseService.selectTaocanProjUse(item.getId());
                List<SysProjUse> sysProjUses = projUseService.selectTaocanProjUse(item.getId(), queryUse.getStatus());
                List<ServiceProjVo> taocanProj = SysProjUseMapper.INSTANCE.entityListToProjVoList(sysProjUses);
                item.setProj(taocanProj);
            });
zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java
@@ -55,9 +55,10 @@
    @Resource
    private SysVipInfoService vipInfoService;
    @Autowired
    @Resource
    private MoneyCardUseFlowDao moneyCardUseFlowDao;
    @Autowired
    @Resource
    private   MoneyCardUseDao moneyCardUseDao;
@@ -76,20 +77,9 @@
    @RequestMapping(value = "/editFormCz")
    public String editFormCz(Long id) {
        MoneyCardUse cardUseInfo = cardUseService.findByVipId(id);
        if (cardUseInfo == null) {
            cardUseInfo = new MoneyCardUse();
            cardUseInfo.setVipId(id);
            cardUseInfo.setCardName("储值卡");
            cardUseInfo.setIsVipCar(Dictionary.FLAG_YES_Y);
            cardUseInfo.setRealMoney(0D);
            cardUseInfo.setGiftMoney(0D);
            cardUseInfo.setSource("-");
            cardUseInfo.setFailTime(DateUtil.stringToDate("2050-01-01 00:00",DateUtil.DATE_FORMAT_MM));
            cardUseInfo.setStatus(Dictionary.MONEYCARD_STATUS_YX);
            moneyCardUseDao.insert(cardUseInfo);
            cardUseInfo=vipInfoService.addVipDefaultCard(id);
        }
        WebUtil.getRequest().setAttribute("obj", cardUseInfo);
        return "admin/hive/beautySalon/cz-form";
    }
@@ -381,57 +371,7 @@
        return new AjaxResult(AjaxResult.STATUS_FAIL, "冻结失败");
    }
    /**
     * 退款
     *
     * @return
     */
    @RequestMapping(value = "getEffectCard")
    public @ResponseBody
    AjaxResult getEffectCard(MoneyCardUse moneyCardUse) {
        AjaxResult result = AjaxResult.buildSuccessInstance("");
        //要退款的充值卡
        MoneyCardUse srcCardUse = cardUseService.findById(moneyCardUse.getId());
        if (!srcCardUse.getStatus().equals(Dictionary.TAOCAN_STATUS_YX)) {
            throw new GlobleException("不是有效充值卡");
        }
        //该会员是否有有效会籍卡
        MoneyCardUse targetCardUse = cardUseService.findByVipId(moneyCardUse.getVipId());
        double money = srcCardUse.getRealMoney();
        if (targetCardUse != null) {
            targetCardUse.setRealMoney(money);
            List<MoneyCardUse> list = Arrays.asList(targetCardUse);
            if (targetCardUse.getId().equals(srcCardUse.getId())) {
                result.setInfo("会籍卡退款只能退现金");
                result.setRows(list);
            } else {
                result.setInfo("有有效会籍卡");
                result.setRows(list);
            }
        } else {
            //无会员卡则new一个,为了把钱传递到前台
            targetCardUse = new MoneyCardUse();
            targetCardUse.setRealMoney(money);
            List<MoneyCardUse> list1 = Arrays.asList(targetCardUse);
            result.setInfo("无有效会籍卡,退现金");
            result.setRows(list1);
        }
        return result;
    }
    @RequestMapping(value = "/returnMoney")
    public @ResponseBody
    AjaxResult returnMoney(MoneyCardUse moneyCardUse, Long hjkId, String tcRemark, Long
            shopId, Double money
            , String tcName) {
        int i = cardUseService.returnMoney(moneyCardUse, hjkId);
        if (i > 0) {
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "退款成功");
        }
        return new AjaxResult(AjaxResult.STATUS_FAIL, "冻结失败");
    }
}
zq-erp/src/main/java/com/matrix/system/hive/action/OrderController.java
@@ -293,16 +293,7 @@
        MoneyCardUse cardUseInfo = cardUseService.findByVipId(order.getVipId());
        if (cardUseInfo == null) {
            cardUseInfo = new MoneyCardUse();
            cardUseInfo.setVipId(order.getVipId());
            cardUseInfo.setCardName("储值卡");
            cardUseInfo.setIsVipCar(Dictionary.FLAG_YES_Y);
            cardUseInfo.setRealMoney(0D);
            cardUseInfo.setGiftMoney(0D);
            cardUseInfo.setSource("-");
            cardUseInfo.setStatus(Dictionary.MONEYCARD_STATUS_YX);
            cardUseInfo.setFailTime(DateUtil.stringToDate("2050-01-01 00:00",DateUtil.DATE_FORMAT_MM));
            moneyCardUseDao.insert(cardUseInfo);
            cardUseInfo=sysVipInfoService.addVipDefaultCard(order.getVipId());
        }
        //打印需求加入门店信息
zq-erp/src/main/java/com/matrix/system/hive/action/ProjServiceController.java
@@ -18,11 +18,8 @@
import com.matrix.system.constance.Dictionary;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.core.tools.DateUtil;
import com.matrix.system.hive.pojo.TaoCanVo;
import com.matrix.system.hive.service.*;
import org.apache.commons.collections.CollectionUtils;
import org.jsoup.helper.DataUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
@@ -197,7 +194,7 @@
        queryUse.setType(Dictionary.SHOPPING_GOODS_TYPE_TC);
        List<SysProjUse> taoCanList = projUseService.findInPage(queryUse, null);
        taoCanList.forEach(item->{
            item.setTaocanProjUse(projUseService.selectTaocanProjUse(item.getId()));
            item.setTaocanProjUse(projUseService.selectTaocanProjUse(item.getId(), queryUse.getStatus()));
            item.setProjInfo(shoppingGoodsDao.selectById(item.getProjId()));
        });
        result.putInMap("projList", projList);
zq-erp/src/main/java/com/matrix/system/hive/action/ProjUseController.java
@@ -168,21 +168,7 @@
        return new AjaxResult(AjaxResult.STATUS_FAIL, "项目转让失败");
    }
    @RequestMapping(value = "/returnProj")
    public @ResponseBody
    AjaxResult returnTc(SysProjUse sysProjUse, Long moneyCardUseId, String tcRemark, Long shopId, Double money, String tcName) {
        MoneyCardUse card = null;
        if (moneyCardUseId != null) {
            card = moneyCardUseService.findById(moneyCardUseId);
        }
        int i = projUseService.returnMoneyProj(sysProjUse, card, moneyCardUseId);
        if (i > 0) {
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "退款成功");
        }
        return new AjaxResult(AjaxResult.STATUS_FAIL, "退款失败");
    }
    /**
@@ -203,31 +189,6 @@
    }
    /**
     * 退款
     *
     * @return
     */
    @RequestMapping(value = "/getEffectCard")
    public @ResponseBody
    AjaxResult getEffectCard(SysProjUse sysProjUse) {
        MoneyCardUse cardUse = moneyCardUseService.findByVipId(sysProjUse.getVipId());
        double money = projUseService.getTotalMoneyProj(sysProjUse);
        if (cardUse != null) {
            cardUse.setRealMoney(money);
            List<MoneyCardUse> list = new ArrayList<MoneyCardUse>();
            list.add(cardUse);
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, null, "有有效会籍卡", list, null);
        } else {
            //无会员卡则new一个,为了把钱传递到前台
            cardUse = new MoneyCardUse();
            cardUse.setRealMoney(money);
            List<MoneyCardUse> list = new ArrayList<MoneyCardUse>();
            list.add(cardUse);
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, null, "无有效会籍卡", list, null);
        }
    }
    /**
     * 冻结会员项目
zq-erp/src/main/java/com/matrix/system/hive/action/TaocanController.java
@@ -65,7 +65,7 @@
        List<SysProjUse> projUseList =sysProjUseService.findInPage(sysProjUse,null);
        //设置套餐中的项目
        projUseList.forEach(taocanProjUse -> {
            taocanProjUse.setTaocanProjUse(sysProjUseService.selectTaocanProjUse(taocanProjUse.getId()));
            taocanProjUse.setTaocanProjUse(sysProjUseService.selectTaocanProjUse(taocanProjUse.getId(),sysProjUse.getStatus()));
        });
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, projUseList, sysProjUseService.findTotal(sysProjUse));
    }
@@ -123,21 +123,7 @@
        return new AjaxResult(AjaxResult.STATUS_FAIL, "套餐转让失败");
    }
    @RequestMapping(value = "/returnTc")
    public @ResponseBody
    AjaxResult returnTc(SysProjUse sysProjUse, Long moneyCardUseId, String tcRemark, Long shopId, Double money, String tcName) {
        System.out.println("moneyCardUseId = " + moneyCardUseId);
        MoneyCardUse card = moneyCardUseService.findById(moneyCardUseId);
        System.out.println("card = " + card);
        int i = sysProjUseService.returnMoneyTc(sysProjUse, card, moneyCardUseId);
        if (i > 0) {
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "退款成功");
        }
        return new AjaxResult(AjaxResult.STATUS_FAIL, "退款失败");
    }
    /**
@@ -158,11 +144,7 @@
    }
    /**
     * 退款
     *
     * @return
     */
    @RequestMapping(value = "/getEffectCard")
    public @ResponseBody
    AjaxResult getEffectCard(SysProjUse sysProjUse) {
@@ -194,7 +176,7 @@
    public String editForm(Long id) {
        if (id != null) {
            SysProjUse sysProjUse = sysProjUseService.findById(id);
            sysProjUse.setTaocanProjUse(sysProjUseService.selectTaocanProjUse(sysProjUse.getId()));
            sysProjUse.setTaocanProjUse(sysProjUseService.selectTaocanProjUse(sysProjUse.getId(), sysProjUse.getStatus()));
            WebUtil.getRequest().setAttribute("obj", sysProjUse);
        }
        return "admin/hive/vip/tc-form";
zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java
@@ -77,6 +77,11 @@
     * 充值卡的id
     */
    private Long  goodsId;
    /**
     * 订单ID
     */
    private Long  orderId;
            
    
    private Long  vipId;
@@ -88,7 +93,7 @@
    private String  isOver;
            
    /**
     * 是会籍卡? Y 是,N否
     * 是默认储值卡? Y 是,N否
     */
    private String  isVipCar;
    /**
@@ -105,6 +110,14 @@
     */
    private String cardName;
    public Long getOrderId() {
        return orderId;
    }
    public void setOrderId(Long orderId) {
        this.orderId = orderId;
    }
    public String getCardName() {
        return cardName;
    }
zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjUse.java
@@ -63,6 +63,12 @@
    private Long orderItemId;
    /**
     * 订单id
     */
    @Extend
    private Long orderId;
    /**
     * 单次扣减金额(理解为单次手工业绩)
     * =订单金额/订单数量
     * 如果是赠送则等于产品原价,业绩记录为赠销
@@ -138,6 +144,14 @@
    private String updateRemark;
    public Long getOrderId() {
        return orderId;
    }
    public void setOrderId(Long orderId) {
        this.orderId = orderId;
    }
    public String getUpdateRemark() {
        return updateRemark;
    }
zq-erp/src/main/java/com/matrix/system/hive/dao/SysOrderFlowDao.java
@@ -1,6 +1,8 @@
package com.matrix.system.hive.dao;
import com.matrix.system.hive.bean.SysOrderFlow;
import com.matrix.system.hive.dto.OrderFlowListDto;
import com.matrix.system.hive.vo.OrderFlowVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -12,4 +14,8 @@
    public List<SysOrderFlow> selectByOrderId(@Param("orderId") Long orderId);
    public List<SysOrderFlow> selectPayMethodsAmountByOrderId(@Param("orderId") Long orderId);
    List<OrderFlowVo> selectInPage(@Param("record") OrderFlowListDto orderFlowListDto);
    Integer selectTotal(@Param("record")OrderFlowListDto orderFlowListDto);
}
zq-erp/src/main/java/com/matrix/system/hive/dto/OrderFlowListDto.java
New file
@@ -0,0 +1,126 @@
package com.matrix.system.hive.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.matrix.core.pojo.PaginationDto;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
 * @author jyy
 * @date 2021-01-27
 **/
@ApiModel(value = "OrderFlowListDto", description = "交易流水查询参数")
public class OrderFlowListDto extends PaginationDto {
    @ApiModelProperty(value = "客户姓名/拼音/手机")
    private String queryKey;
    @ApiModelProperty(value ="操作人")
    private String oprationMan;
    @ApiModelProperty(value ="订单号")
    private String orderNo;
    @ApiModelProperty(value ="交易类型")
    private String flowType;
    @ApiModelProperty(value ="支付方式")
    private String payMethod;
    @JsonFormat(pattern = DateUtil.DATE_FORMAT_DD, timezone = "GMT+8")
    @ApiModelProperty(value = "查询参数开始时间", example = "2021-01-10")
    private Date startTime;
    @JsonFormat(pattern = DateUtil.DATE_FORMAT_DD, timezone = "GMT+8")
    @ApiModelProperty(value = "查询参数结束时间", example = "2021-01-10")
    private Date endTime;
    @ApiModelProperty(hidden = true)
    private Long shopId;
    @ApiModelProperty(hidden = true)
    private Long companyId;
    public String getQueryKey() {
        return queryKey;
    }
    public void setQueryKey(String queryKey) {
        this.queryKey = queryKey;
    }
    public String getOprationMan() {
        return oprationMan;
    }
    public void setOprationMan(String oprationMan) {
        this.oprationMan = oprationMan;
    }
    public String getOrderNo() {
        return orderNo;
    }
    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }
    public String getFlowType() {
        return flowType;
    }
    public void setFlowType(String flowType) {
        this.flowType = flowType;
    }
    public String getPayMethod() {
        return payMethod;
    }
    public void setPayMethod(String payMethod) {
        this.payMethod = payMethod;
    }
    public Date getStartTime() {
        return startTime;
    }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
    public Long getShopId() {
        return shopId;
    }
    public void setShopId(Long shopId) {
        this.shopId = shopId;
    }
    public Long getCompanyId() {
        return companyId;
    }
    public void setCompanyId(Long companyId) {
        this.companyId = companyId;
    }
}
zq-erp/src/main/java/com/matrix/system/hive/service/MoneyCardUseService.java
@@ -93,11 +93,7 @@
     */
    public void transfer(MoneyCardUse moneyCardUse, Long vipId2, Double money);
    /**
     * 退款
     * jyy
     */
    public int returnMoney(MoneyCardUse moneyCardUse, Long hjkId);
    /**
     * 设置为有效
zq-erp/src/main/java/com/matrix/system/hive/service/SysProjUseService.java
@@ -94,12 +94,7 @@
    public int invalidTc(SysProjUse sysProjUse);
    
    /**
     * 退款
     * @param sysProjUse
     * @return
     */
    public int returnMoneyTc(SysProjUse sysProjUse, MoneyCardUse cardUse, Long moneyCardUseId);
    /**
     * 设置为有效套餐
     * @param proj
@@ -134,28 +129,16 @@
    
    /**
     * 退款
     * @param sysProjUse
     * @return
     */
    public int returnMoneyProj(SysProjUse sysProjUse, MoneyCardUse cardUse, Long moneyCardUseId);
    /**
     * 设置为有效套餐
     * @param proj
     * @return
     */
    public AjaxResult activeProj(SysProjUse proj);
    /**
     * 退款项目
     * @param sysProjUse
     * @return
     */
    public double getTotalMoneyProj(SysProjUse sysProjUse);
    public int updateProjUseTck(SysProjUse projUse);
    public List<SysProjUse> selectTaocanProjUse(Long id);
    public List<SysProjUse> selectTaocanProjUse(Long id, String status);
}
zq-erp/src/main/java/com/matrix/system/hive/service/SysVipInfoService.java
@@ -6,14 +6,13 @@
import com.matrix.system.app.dto.VipInfoListDto;
import com.matrix.system.app.vo.VipInfoDetailVo;
import com.matrix.system.app.vo.VipInfoListVo;
import com.matrix.system.hive.bean.MoneyCardUse;
import com.matrix.system.hive.bean.SysVipInfo;
import com.matrix.system.hive.plugin.util.BaseServices;
import com.matrix.system.hive.pojo.VipInfoVo;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.List;
/**
@@ -22,7 +21,7 @@
 */
public interface SysVipInfoService  extends BaseServices<SysVipInfo>{
    public  int addVipDefaultCard(Long vipId);
    public MoneyCardUse addVipDefaultCard(Long vipId);
    /**
     * 新增SysVipInfo
     * 
zq-erp/src/main/java/com/matrix/system/hive/service/imp/MoneyCardUseServiceImpl.java
@@ -42,6 +42,10 @@
    @Autowired
    private SysVipLevelDao viplevelDao;
    @Override
    public int add(MoneyCardUse moneyCardUse) {
@@ -213,64 +217,7 @@
        }
    }
    //退款
    @Override
    public int returnMoney(MoneyCardUse moneyCardUse, Long hjkId) {
        MoneyCardUse realObj = moneyCardUseDao.selectById(moneyCardUse.getId());
        //检测商品是否已付款完成
        if (realObj.getOrderItemId() != 1) {//不是数据迁移过来的判断付款状态
            checkOrderStatu(realObj.getOrderItemId());
        }
        if (!realObj.getStatus().equals(Dictionary.TAOCAN_STATUS_YX)) {
            throw new GlobleException("不是有效充值卡");
        }
        if (realObj.getSource().contains(Dictionary.TAOCAN_SOURCE_ZR)) {
            throw new GlobleException("转让的充值卡不能退款");
        }
        if (realObj.getSource().contains(Dictionary.TAOCAN_SOURCE_ZS)) {
            throw new GlobleException("赠送的充值卡不能退款");
        }
        if (Dictionary.FLAG_YES_Y.equals(realObj.getIsVipCar())) {
            //更新会员等级
            realObj.getVipInfo().setLevelId(0L);
            infoDao.update(realObj.getVipInfo());
        }
        StringBuilder content = new StringBuilder();
        //有会籍卡退到会籍卡中,无则退了现金
        if (hjkId != null && !hjkId.equals("")) {
            MoneyCardUse vipCard = moneyCardUseDao.selectById(hjkId);
            vipCard.setRealMoney(vipCard.getRealMoney() + realObj.getRealMoney());
            moneyCardUseDao.update(vipCard);
            content.append(realObj.getCardName() + "退款¥" + realObj.getRealMoney() + "到会籍卡")
                    .append(vipCard.getCardName())
                    .append(",余次:" + vipCard.getLastCountName())
                    .append(",本金余额:" + vipCard.getRealMoney())
                    .append(",有效期:" + DateUtil.dateToString(vipCard.getFailTime(), DateUtil.DATE_FORMAT_MM))
                    .append(",是否赠送:" + vipCard.getSourceName());
        } else {
            content.append(realObj.getCardName() + "退款现金¥" + moneyCardUse.getReturnMonery() + "");
        }
        DecimalFormat df = new DecimalFormat("#.00");
        double d = Double.valueOf(df.format(realObj.getRealMoney() - Double.valueOf(moneyCardUse.getReturnMonery())));
        //退款的本金为零,状态为已退款
        realObj.setRealMoney(d);
        //赠送金额也清零
        realObj.setGiftMoney(0.0);
        if (d <= 0) {
            realObj.setStatus(Dictionary.TAOCAN_STATUS_TK);
        }
        int i = moneyCardUseDao.update(realObj);
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        //新增退款流水
        return i;
    }
    //设置为有效
    @Override
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -4,7 +4,6 @@
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.app.dto.OrderListDto;
@@ -17,10 +16,8 @@
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.dao.SysUsersDao;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.constance.SystemConstance;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.hievEnum.PayMethodEnum;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.core.tools.DateUtil;
import com.matrix.system.hive.plugin.util.MoneyUtil;
@@ -36,6 +33,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import javax.validation.constraints.NotEmpty;
import java.util.*;
@@ -113,7 +111,7 @@
    @Value("${evn}")
    private  String evn;
    private String evn;
    @Autowired
    private RabiitMqTemplate rabiitMqTemplate;
@@ -147,7 +145,7 @@
    @Override
    public List<SysOrder> findInPage(SysOrder sysOrder, PaginationVO pageVo) {
        if(pageVo!=null){
        if (pageVo != null) {
            pageVo.setSort("desc");
            pageVo.setSort("orderTime");
        }
@@ -211,7 +209,7 @@
            // 订单欠款减去支付金额 设置实际欠款
            Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
            zkTotal=MoneyUtil.add(zkTotal, itemZkTotal);
            zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
            item.setStatus(orderStatus);
        }
@@ -222,12 +220,12 @@
        sysOrder.setCompanyId(source != null ? source.getCompanyId() : user.getCompanyId());
        sysOrder.setPayTime(new Date());
        if(sysOrder.getId()==null){
        if (sysOrder.getId() == null) {
            //新增订单
            sysOrder.setOrderNo(codeService.getOrderCode());
            sysOrderDao.insert(sysOrder);
        }else{
        } else {
            //更新订单
            sysOrderDao.update(sysOrder);
            //删除原有订单明细
@@ -269,9 +267,9 @@
            order.setArrears(0D);
            //发送微信公众号提醒
            UniformMsgParam uniformMsgParam=new UniformMsgParam(order.getCompanyId(),UniformMsgParam.GZH_DDQX);
            uniformMsgParam.put("orderId",order.getId());
            rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG+evn,uniformMsgParam.toJSONString());
            UniformMsgParam uniformMsgParam = new UniformMsgParam(order.getCompanyId(), UniformMsgParam.GZH_DDQX);
            uniformMsgParam.put("orderId", order.getId());
            rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_UNIFORM_TEMPLATE_MSG + evn, uniformMsgParam.toJSONString());
            return sysOrderDao.update(order);
@@ -296,12 +294,12 @@
                        // 根据订单明细判断是赠送金额购买还是本金购买
                            moneyCardUseFlow.setTotal(orderItem.getCardPay());
                            moneyCardUse.setRealMoney(MoneyUtil.add(moneyCardUse.getRealMoney(), orderItem.getCardPay()));
                        moneyCardUseFlow.setTotal(orderItem.getCardPay());
                        moneyCardUse.setRealMoney(MoneyUtil.add(moneyCardUse.getRealMoney(), orderItem.getCardPay()));
                        //TODO 目前无法退回到具体的赠送金额还是本金
                        if (!moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)) {
                            if(moneyCardUse.getLastCount()!=null) {
                            if (moneyCardUse.getLastCount() != null) {
                                moneyCardUse.setLastCount(moneyCardUse.getLastCount() + 1);
                                moneyCardUseFlow.setTimes(1);
                            }
@@ -316,7 +314,7 @@
                        moneyCardUseFlow.setCreateTime(new Date());
                        moneyCardUseFlow.setOperationId(user.getSuId());
                        moneyCardUseFlow.setContent(moneyCardUse.getChangeRemark());
                        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney()+moneyCardUse.getRealMoney());
                        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
                        moneyCardUseFlowDao.insert(moneyCardUseFlow);
                    }
                }
@@ -484,7 +482,6 @@
    @Transactional(rollbackFor = Exception.class)
    public void updateReceiptMoney(SysOrder pageOrder) throws GlobleException {
        if (!Dictionary.ORDER_STATU_DFK.equals(pageOrder.getStatu())) {
            throw new GlobleException("该订单已经收过款,请刷新页面再试!");
        }
@@ -497,78 +494,92 @@
            sysVipInfoDao.update(vipInfo);
        }
        //设置订单的成交状态
        changeOrderStatu(pageOrder);
        // 设置会员充值卡使用情况
        addMoneyCardUse(pageOrder);
        // 新增出库单
        addOutStore(pageOrder);
        // 改变客户项目套餐使用情况
        addTaocanProj(pageOrder);
        // 新增出库单
        addOutStore(pageOrder);
        // 设置业绩
        achieveNewService.addAchaeveByOrder(pageOrder);
        setShopSelCount(pageOrder);
    }
    /**
     * 收款改变订单状态,划扣金额
     *
     * @author:姜友瑶
     */
    private void changeOrderStatu(SysOrder sourceOrder) {
        int i = 1;
        String orderStatus = Dictionary.ORDER_STATU_YFK;
        String flowType = SysOrderFlow.FLOW_TYPE_BUY;
        double cashPayTotal = 0D;
        double cardPayTotal = 0D;
        //处理支付流水
        int flowCount = 1;
        for (SysOrderFlow flow : sourceOrder.getFlows()) {
            flow.setFlowNo(codeService.getFlowCode() + "-" + i);
            //支付内容摘要设置
            Long goodsId = sourceOrder.getItems().get(0).getGoodsId();
            ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
            flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品");
            // 若是退款,则取负数
            if (Dictionary.ORDER_STATU_TK.equals(sourceOrder.getStatu())) {
                flowType = SysOrderFlow.FLOW_TYPE_REFUND;
                // 若是退款,则取负数
                flow.setAmount(flow.getAmount().negate());
                flow.setOrderId(sourceOrder.getOldOrderId());
            } else {
                flow.setOrderId(sourceOrder.getId());
            }
            flow.setVipId(sourceOrder.getVipId());
            flow.setFlowType(flowType);
            // 若使用储值卡付款
            if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                if (flow.getCardId() != null) {
                    MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
                    cardPaySk(moneyCardUse, sourceOrder, flow);
                    cardPayTotal += flow.getAmount().doubleValue();
                }
            }
            //欠款处理
            if (SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod())) {
                orderStatus = Dictionary.ORDER_STATU_QK;
                sourceOrder.setArrears(flow.getAmount().doubleValue());
            }
            if (!SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod()) && !SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
            //统计储值卡支付
            if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                if (flow.getCardId() != null) {
                    MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
                    cardPayTotal += flow.getAmount().doubleValue();
                    //修改储值卡余额
                    cardPaySk(moneyCardUse, sourceOrder, flow);
                }else{
                    throw new GlobleException("无效的储值卡支付方式");
                }
            }
            //统计现金支付
            if (!SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod())
                    && !SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                cashPayTotal += flow.getAmount().doubleValue();
            }
            flow.setFlowNo(codeService.getFlowCode() + "-" + flowCount);
            flow.setVipId(sourceOrder.getVipId());
            flow.setFlowType(flowType);
            flow.setShopId(sourceOrder.getShopId());
            flow.setCompanyId(sourceOrder.getCompanyId());
            sysOrderFlowDao.insert(flow);
            i++;
            flowCount++;
        }
        //修改订单信息
        if (Dictionary.ORDER_STATU_TK.equals(sourceOrder.getStatu())) {
            orderStatus = Dictionary.ORDER_STATU_TK;
        }
        // 更新收款状态
        sourceOrder.setStatu(orderStatus);
        sourceOrder.setCardPay(cardPayTotal);
@@ -606,7 +617,6 @@
    }
    /**
     * 使用充值卡付款操作
     *
@@ -624,48 +634,31 @@
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow();
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
            if(moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) {
            if (moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) {
                double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue());
                moneyCardUse.setGiftMoney(surplus);
                moneyCardUseFlow.setGiftMoney(0D - flow.getAmount().doubleValue());
            } else {
                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
            }
        } else {
            if(moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) {
            if (moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) {
                double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue());
                moneyCardUse.setRealMoney(surplus);
                moneyCardUseFlow.setTotal(0 - flow.getAmount().doubleValue());
            } else {
                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
            }
        }
        //设置卡项使用流水
        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
        moneyCardUseFlow.setOrderNo(sourceOrder.getOrderNo());
        moneyCardUseFlow.setVipId(sourceOrder.getVipId());
        moneyCardUseFlow.setTimes(-1);
        moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(user.getSuId());
        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney()+moneyCardUse.getRealMoney());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
        // 达到使用次数后自动清空余额
        if (!moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)
                && moneyCardUse.getLastCount() <= 0) {
            moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
            moneyCardUse.setLastCount(0);
            moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
        }
        if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
            moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
            moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
        if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
            //余额为0时充值卡变为无效
            if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
                moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
                moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
            }
        }
        ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId());
@@ -675,6 +668,16 @@
        }
        // 更新充值卡信息
        moneyCardUseDao.update(moneyCardUse);
        //设置卡项使用流水
        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
        moneyCardUseFlow.setOrderNo(sourceOrder.getOrderNo());
        moneyCardUseFlow.setVipId(sourceOrder.getVipId());
        moneyCardUseFlow.setTimes(-1);
        moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(user.getSuId());
        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
    }
    /**
@@ -747,7 +750,7 @@
            // 如果购买的是充值卡
            if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_CZK)) {
                for(int i = 0; i < sysOrderItem.getCount(); i++) {
                for (int i = 0; i < sysOrderItem.getCount(); i++) {
                    ShoppingGoods moneyCar = shoppingGoodsDao.selectById(sysOrderItem.getGoodsId());
                    MoneyCardUse moneyCardUse = new MoneyCardUse();
                    moneyCardUse.setVipId(sourceOrder.getVipId());
@@ -759,13 +762,8 @@
                    moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
                    moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
                    moneyCardUse.setCardName(moneyCar.getName());
                    if (Dictionary.FLAG_YES.equals(moneyCar.getCarIsAll())) {
                        moneyCardUse.setIsVipCar(Dictionary.FLAG_YES_Y);
                    } else {
                        // 非会籍卡
                        moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N);
                    }
                    moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N);
                    moneyCardUse.setVipId(sourceOrder.getVipId());
                    // 是否为赠送
                    if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) {
@@ -773,6 +771,7 @@
                    } else {
                        moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
                    }
                    //余次处理
                    if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) {
                        moneyCardUse.setUseTotal(999999999);
                        moneyCardUse.setLastCount(999999999);
@@ -780,8 +779,7 @@
                        moneyCardUse.setUseTotal(moneyCar.getCarUseCount());
                        moneyCardUse.setLastCount(moneyCar.getCarUseCount());
                    }
                    moneyCardUse.setVipId(sourceOrder.getVipId());
                    //失效时间处理
                    Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null);
                    moneyCardUse.setFailTime(invalidTime);
@@ -831,16 +829,16 @@
            i++;
        }
        boolean haQk=false;
        boolean haQk = false;
        if (refundTotal == pageOrder.getArrears()) {
            haQk = true;
        }
        //更新收款状态
        if(haQk){
        if (haQk) {
            sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK);
        }else{
        } else {
            sourceOrder.setStatu(Dictionary.ORDER_STATU_QK);
        }
@@ -1000,7 +998,8 @@
            //综合卡中包含的项目
            List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_XM);
            assembleList.forEach(item -> {
                createProjuseByAssemble(order, sysOrderItem, item, null);
                //TODO 补综合卡逻辑
                createProjuseByAssemble(order, sysOrderItem, item, null, null);
            });
            //处理综合卡中包含的套餐
@@ -1021,9 +1020,9 @@
     * 通过组合关系创建用户项目余次
     */
    private SysProjUse createProjuseByAssemble(SysOrder order, SysOrderItem sysOrderItem,
                                               ShoppingGoodsAssemble goodsAssemble, Long taocanId) {
                                               ShoppingGoodsAssemble goodsAssemble, Long taocanId, Date failTime) {
        //计算折扣
        Double zk=sysOrderItem.getZkPrice()/sysOrderItem.getPrice();
        Double zk = sysOrderItem.getZkPrice() / sysOrderItem.getPrice();
        SysProjUse puse = new SysProjUse();
        puse.setIsOver(Dictionary.DELETED_N);
@@ -1037,9 +1036,9 @@
        puse.setTaocanId(taocanId);
        puse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM);
        if (taocanId == null) {
            puse.setPrice(goodsAssemble.getShoppingGoods().getPrice() * zk );
            puse.setPrice(goodsAssemble.getShoppingGoods().getPrice() * zk);
        } else {
            puse.setPrice(goodsAssemble.getPrice() * zk  );
            puse.setPrice(goodsAssemble.getPrice() * zk);
        }
        puse.setBalance(MoneyUtil.mul(puse.getPrice(), Double.valueOf(puse.getSurplusCount())));
        // 赠送和打折后金额为0的都视为赠送项目
@@ -1048,10 +1047,7 @@
        } else {
            puse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
        }
        // 设置失效时间
        Calendar cal = Calendar.getInstance();
        cal.set(2200, 1, 1);
        puse.setFailTime(cal.getTime());
        puse.setFailTime(failTime);
        sysProjUseDao.insert(puse);
        return puse;
    }
@@ -1093,20 +1089,20 @@
        taocanProjUse.setFailTime(invalidTime);
        sysProjUseDao.insert(taocanProjUse);
        //计划次数
        int surplusCount=0;
        int surplusCount = 0;
        //总余额
        Double sumBanance = 0D;
        //创建套餐绑定的项目
        List<ShoppingGoodsAssemble> assembleList = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(projId, ShoppingGoods.SHOPPING_GOODS_TYPE_XM);
        for (ShoppingGoodsAssemble assemble : assembleList) {
            SysProjUse tempUse = createProjuseByAssemble(order, sysOrderItem, assemble, taocanProjUse.getId());
            SysProjUse tempUse = createProjuseByAssemble(order, sysOrderItem, assemble, taocanProjUse.getId(),taocanProjUse.getFailTime());
            sumBanance += tempUse.getBalance();
            surplusCount+=tempUse.getSurplusCount();
            surplusCount += tempUse.getSurplusCount();
        }
        if(Dictionary.FLAG_NO_N.equals(taocanShoppingGoods.getIsCourse())){
        if (Dictionary.FLAG_NO_N.equals(taocanShoppingGoods.getIsCourse())) {
            //固定套餐,剩余次数等于绑定项目的次数
            taocanProjUse.setSurplusCount(surplusCount);
        }else{
        } else {
            //任选套餐剩余次数等于最大使用次数
            taocanProjUse.setSurplusCount(taocanShoppingGoods.getCarUseCount());
        }
@@ -1148,6 +1144,7 @@
    /**
     * 会员卡充值
     *
     * @param czVo
     */
    @Override
@@ -1197,7 +1194,7 @@
        orderItem.setOrderId(order.getId());
        orderItem.setOrderNo(order.getOrderNo());
        orderItem.setArrears(0D);
        ShoppingGoods shoppingGoods= shoppingGoodsDao.selectVipCzGoods();
        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectVipCzGoods();
        orderItem.setGoodsId(shoppingGoods.getId());
        orderItem.setPayMethod(Dictionary.PAY_TYPE_MOENY);
        orderItem.setCashPay(czVo.getBjmoney());
@@ -1216,7 +1213,7 @@
        //设置卡项使用流水
        MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow();
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        moneyCardUseFlow.setTotal(czVo.getBjmoney());
        moneyCardUseFlow.setGiftMoney(czVo.getGiftMoney());
        moneyCardUseFlow.setCarUseId(czVo.getCardId());
@@ -1225,7 +1222,7 @@
        moneyCardUseFlow.setOrderNo(order.getOrderNo());
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(user.getSuId());
        moneyCardUseFlow.setBalance(cardUser.getGiftMoney()+cardUser.getRealMoney());
        moneyCardUseFlow.setBalance(cardUser.getGiftMoney() + cardUser.getRealMoney());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
        order.setFlows(czVo.getFlows());
@@ -1281,7 +1278,8 @@
    @Override
    public void refundOrderMoney(SysOrder pageOrder) {
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        // 插入订单流水
        // 修改订单状态
        changeOrderStatu(pageOrder);
        List<SysOrderItem> returnItems = new ArrayList<>();
@@ -1325,7 +1323,7 @@
                    throw new GlobleException("数据异常");
                }
                for(int i = 0; i < item.getCount(); i++) {
                for (int i = 0; i < item.getCount(); i++) {
                    SysProjUse sysProjUse = sysProjUses.get(i);
                    sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
                    sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
@@ -1347,7 +1345,7 @@
                queryCardUse.setOrderItemId(item.getOldItemId());
                List<MoneyCardUse> moneyCardUses = moneyCardUseDao.selectByModel(queryCardUse);
                for(int i = 0; i < item.getCount(); i++) {
                for (int i = 0; i < item.getCount(); i++) {
                    MoneyCardUse moneyCardUse = moneyCardUses.get(i);
                    moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
                    moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java
@@ -11,15 +11,12 @@
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.core.tools.DateUtil;
import com.matrix.system.hive.plugin.util.MoneyUtil;
import com.matrix.system.hive.service.SysProjUseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.xml.crypto.Data;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -407,23 +404,7 @@
        return i;
    }
    /**
     * cardUser暂时没有用到
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int returnMoneyTc(SysProjUse sysProjUse, MoneyCardUse cardUse, Long moneyCardUseId) {
        //充值记录
        //SysRechargeFlow flow=new SysRechargeFlow();
        // 计算出套餐所有项目的剩余次数的钱
        getTotalMoney(sysProjUse, cardUse, moneyCardUseId);
        //3、套餐下的项目状态改为退款
        sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
        int j = sysProjUseDao.updateProjStatus(sysProjUse);
        return j;
    }
    /*********************以下为项目使用情况操作***********************/
@@ -553,49 +534,7 @@
    }
    /**
     * 退款
     *
     * @param sysProjUse
     * @return
     */
    public int returnMoneyProj(SysProjUse sysProjUse, MoneyCardUse cardUse, Long moneyCardUseId) {
        int i = 0;
        sysProjUse = sysProjUseDao.selectById(sysProjUse.getId());
        //判断套餐是否存在欠款
        checkOrderStatu(sysProjUse);
        if (!(sysProjUse.getStatus().equals(Dictionary.TAOCAN_STATUS_YX))) {
            throw new GlobleException("不是有效项目");
        }
        if (sysProjUse.getSource().equals(Dictionary.TAOCAN_SOURCE_ZR)) {
            throw new GlobleException("转让的项目不能退款");
        }
        if (sysProjUse.getSource().equals(Dictionary.TAOCAN_SOURCE_ZS)) {
            throw new GlobleException("赠送的项目不能退款");
        }
        StringBuilder content = new StringBuilder();
        ShoppingGoodsAssemble shoppingGoodsAssemble = shoppingGoodsAssembleDao.selectById(sysProjUse.getAssembleId());
        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(shoppingGoodsAssemble.getShoppingGoodsId());
        content.append(shoppingGoods + "退款");
        if (cardUse != null) {
            // 1、金额退到该用户的有效会籍卡中
            MoneyCardUse upCard = moneyCardUseDao.selectById(cardUse.getId());
            upCard.setRealMoney(upCard.getRealMoney() + sysProjUse.getBalance());
            ;
            moneyCardUseDao.update(upCard);
            content.append("到会籍卡(" + upCard.getCardName() + ")" + sysProjUse.getBalance() + "元")
                    .append(",余次:" + upCard.getLastCountName())
                    .append(",本金余额:" + upCard.getRealMoney())
                    .append(",有效期:" + DateUtil.dateToString(upCard.getFailTime(), DateUtil.DATE_FORMAT_MM))
                    .append(",是否赠送:" + upCard.getSourceName());
        } else {
            content.append("现金" + sysProjUse.getBalance() + "元");
        }
        sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_TK);
        return sysProjUseDao.update(sysProjUse);
    }
    /**
     * 设置为有效套餐
@@ -646,25 +585,6 @@
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功");
    }
    /**
     * 退款项目
     */
    @Override
    public double getTotalMoneyProj(SysProjUse sysProjUse) {
        sysProjUse = sysProjUseDao.selectById(sysProjUse.getId());
        //判断套餐是否存在欠款
        checkOrderStatu(sysProjUse);
        if (!(sysProjUse.getStatus().equals(Dictionary.TAOCAN_STATUS_YX))) {
            throw new GlobleException("不是有效项目");
        }
        if (sysProjUse.getSource().equals(Dictionary.TAOCAN_SOURCE_ZR)) {
            throw new GlobleException("转让的项目不能退款");
        }
        if (sysProjUse.getSource().contains(Dictionary.TAOCAN_SOURCE_ZS)) {
            throw new GlobleException("赠送的项目不能退款");
        }
        return sysProjUse.getBalance();
    }
    @Override
@@ -673,9 +593,10 @@
    }
    @Override
    public List<SysProjUse> selectTaocanProjUse(Long taocanId) {
    public List<SysProjUse> selectTaocanProjUse(Long taocanId, String status) {
        SysProjUse projUse = new SysProjUse();
        projUse.setTaocanId(taocanId);
        projUse.setStatus(status);
        return sysProjUseDao.selectByModel(projUse);
    }
}
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysVipInfoServiceImpl.java
@@ -74,7 +74,7 @@
     * @return
     */
    @Override
    public  int addVipDefaultCard(Long vipId){
    public MoneyCardUse addVipDefaultCard(Long vipId){
        MoneyCardUse defaultCardUse=new MoneyCardUse();
        defaultCardUse.setVipId(vipId);
        defaultCardUse.setCardName("储值卡");
@@ -83,7 +83,8 @@
        defaultCardUse.setGiftMoney(0D);
        defaultCardUse.setSource("-");
        defaultCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
        return  moneyCardUseDao.insert(defaultCardUse);
        moneyCardUseDao.insert(defaultCardUse);
        return  defaultCardUse;
    }
zq-erp/src/main/java/com/matrix/system/hive/statistics/OrderFlowAction.java
New file
@@ -0,0 +1,137 @@
package com.matrix.system.hive.statistics;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.excl.ExcelSheetPO;
import com.matrix.core.tools.excl.ExcelUtil;
import com.matrix.core.tools.excl.ExcelVersion;
import com.matrix.system.common.tools.DataAuthUtil;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.dao.SysOrderFlowDao;
import com.matrix.system.hive.dto.OrderFlowListDto;
import com.matrix.system.hive.vo.OrderFlowVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 交易流水统计
 */
@CrossOrigin(origins = "*")
@Api(value = "OrderFlowAction", tags = "交易流水")
@RestController
@RequestMapping(value = "/admin/orderFlow")
public class OrderFlowAction {
    @Resource
    private SysOrderFlowDao orderFlowDao;
    /**
     * 交易流水查询
     */
    @ApiOperation(value = "查询交易流水")
    @ApiResponses({
            @ApiResponse(code = 200, message = "OK",  response = OrderFlowListDto.class)
    })
    @PostMapping(value = "/findOrderFlow")
    public @ResponseBody
    AjaxResult findOrderFlow(@RequestBody OrderFlowListDto orderFlowListDto) {
        if(StringUtils.isBlank(orderFlowListDto.getSort())){
            orderFlowListDto.setSort("createTime");
            orderFlowListDto.setOrder("desc");
        }
        if (!DataAuthUtil.hasAllShopAuth()) {
            QueryUtil.setQueryLimit(orderFlowListDto);
        } else {
            QueryUtil.setQueryLimitCom(orderFlowListDto);
        }
        List<OrderFlowVo> rows = orderFlowDao.selectInPage(orderFlowListDto);
        Integer total = orderFlowDao.selectTotal(orderFlowListDto);
        AjaxResult result = AjaxResult.buildSuccessInstance(rows, total);
        return result;
    }
    /**
     * 导出Excel
     */
    @GetMapping(value = "/exportOrderFlowExcel")
    public void exportOrderFlowExcel(OrderFlowListDto orderFlowListDto, HttpServletResponse res) {
        OutputStream os = null;
        try {
            if (!DataAuthUtil.hasAllShopAuth()) {
                QueryUtil.setQueryLimit(orderFlowListDto);
            } else {
                QueryUtil.setQueryLimitCom(orderFlowListDto);
            }
            orderFlowListDto.setLimit(null);
            List<OrderFlowVo> rows = orderFlowDao.selectInPage(orderFlowListDto);
            res.setCharacterEncoding("UTF-8");
            res.setHeader("content-type", "application/octet-stream;charset=UTF-8");
            res.setContentType("application/octet-stream;charset=UTF-8");
            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss");
            res.setHeader("Content-Disposition", "attachment;filename=" +
                    java.net.URLEncoder.encode("交易流水" + dateFormat.format(date) + ".xlsx".trim(), "UTF-8"));
            os = res.getOutputStream();
            ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, disPoseExcelData(rows), os, true);
        } catch (Exception e) {
            LogUtil.error("交易流水导出异常", e);
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    LogUtil.error("关闭资源异常", e);
                }
            }
        }
    }
    private List<ExcelSheetPO> disPoseExcelData(List<OrderFlowVo> orderFlowVos) {
        List<ExcelSheetPO> res = new ArrayList<>();
        ExcelSheetPO orderSheet = new ExcelSheetPO();
        orderSheet.setSheetName("交易流水");
        orderSheet.setTitle("交易流水");
        String[] header = new String[]{"订单编号", "交易内容", "交易时间", "交易类型", "交易金额", "会员姓名",
                "支付方式", "支付流水号", "操作人",  "门店名称"};
        orderSheet.setHeaders(header);
        List<List<Object>> body = new ArrayList<>();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        for (OrderFlowVo flowVo : orderFlowVos) {
                List<Object> bodyItem = new ArrayList<>();
                bodyItem.add(flowVo.getOrderNo());
                bodyItem.add(flowVo.getFlowContent());
                bodyItem.add(DateUtil.dateFormatStr(flowVo.getCreateTime(),DateUtil.DATE_FORMAT_MM));
                bodyItem.add(flowVo.getFlowType());
                bodyItem.add(flowVo.getAmount());
                bodyItem.add(flowVo.getVipName());
                bodyItem.add(flowVo.getPayMethod());
                bodyItem.add(flowVo.getFlowNo());
                bodyItem.add(flowVo.getStaffName());
                bodyItem.add(flowVo.getShopName());
                body.add(bodyItem);
        }
        orderSheet.setDataList(body);
        res.add(orderSheet);
        return res;
    }
}
zq-erp/src/main/java/com/matrix/system/hive/statistics/ServiceStatisticsAction.java
@@ -36,6 +36,7 @@
        if(!AppConstance.ZONGDIAN.equals(sysUsers.getShopName())){
            param.put("shopId",sysUsers.getShopId());
        }
        return AjaxResult.buildSuccessInstance(beauticianStateDao.selectItemDetail(param),
                beauticianStateDao.selectItemDetailTotal(param));
    }
zq-erp/src/main/java/com/matrix/system/hive/vo/OrderFlowVo.java
New file
@@ -0,0 +1,152 @@
package com.matrix.system.hive.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;
/**
 * @author jyy
 * @date 2021-01-27
 **/
@ApiModel(value = "OrderFlowVo", description = "订单流水返回参数类")
public class OrderFlowVo {
    @ApiModelProperty(value = "流水id")
    private Long id;
    @ApiModelProperty(value = "订单ID")
    private String orderId;
    @ApiModelProperty(value = "订单号")
    private String orderNo;
    @ApiModelProperty(value ="交易类型")
    private String flowType;
    @ApiModelProperty(value ="支付方式")
    private String payMethod;
    @ApiModelProperty(value = "会员姓名")
    private String vipName;
    @ApiModelProperty(value = "交易内容")
    private String flowContent;
    @ApiModelProperty(value = "交易金额")
    private BigDecimal amount;
    @ApiModelProperty(value = "操作人姓名")
    private String staffName;
    @ApiModelProperty(value = "支付流水号")
    private String flowNo;
    @ApiModelProperty(value = "门店名称")
    private String shopName;
    @JsonFormat(pattern = DateUtil.DATE_FORMAT_SS, timezone = "GMT+8")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getOrderId() {
        return orderId;
    }
    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
    public String getOrderNo() {
        return orderNo;
    }
    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }
    public String getFlowType() {
        return flowType;
    }
    public void setFlowType(String flowType) {
        this.flowType = flowType;
    }
    public String getPayMethod() {
        return payMethod;
    }
    public void setPayMethod(String payMethod) {
        this.payMethod = payMethod;
    }
    public String getVipName() {
        return vipName;
    }
    public void setVipName(String vipName) {
        this.vipName = vipName;
    }
    public String getFlowContent() {
        return flowContent;
    }
    public void setFlowContent(String flowContent) {
        this.flowContent = flowContent;
    }
    public BigDecimal getAmount() {
        return amount;
    }
    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
    public String getStaffName() {
        return staffName;
    }
    public void setStaffName(String staffName) {
        this.staffName = staffName;
    }
    public String getFlowNo() {
        return flowNo;
    }
    public void setFlowNo(String flowNo) {
        this.flowNo = flowNo;
    }
    public String getShopName() {
        return shopName;
    }
    public void setShopName(String shopName) {
        this.shopName = shopName;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}
zq-erp/src/main/java/com/matrix/system/hiveErp/action/ErpVipInfoController.java
@@ -117,16 +117,7 @@
            // 在session存放当前查询的客户
            MoneyCardUse cardUseInfo = cardUseService.findByVipId(vips.get(0).getId());
            if (cardUseInfo == null) {
                cardUseInfo = new MoneyCardUse();
                cardUseInfo.setVipId(vips.get(0).getId());
                cardUseInfo.setCardName("储值卡");
                cardUseInfo.setIsVipCar(Dictionary.FLAG_YES_Y);
                cardUseInfo.setRealMoney(0D);
                cardUseInfo.setGiftMoney(0D);
                cardUseInfo.setSource("-");
                cardUseInfo.setStatus(Dictionary.MONEYCARD_STATUS_YX);
                cardUseInfo.setFailTime(DateUtil.stringToDate("2050-01-01 00:00",DateUtil.DATE_FORMAT_MM));
                moneyCardUseDao.insert(cardUseInfo);
                cardUseInfo=vipInfoService.addVipDefaultCard(vips.get(0).getId());
            }
            vips.get(0).setLevelCard(cardUseInfo);
            WebUtil.getSession().setAttribute(SystemConstance.CURRENT_CUSTOMER, vips.get(0));
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/YuyueAction.java
@@ -4,24 +4,16 @@
import com.matrix.biz.dao.BizUserDao;
import com.matrix.component.rabbitmq.RabiitMqTemplate;
import com.matrix.component.redis.RedisUserLoginUtils;
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.pojo.VerifyResult;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.app.dto.ServiceOrderListDto;
import com.matrix.system.app.mapper.SysBeauticianStateMapper;
import com.matrix.system.app.mapper.SysProjServiceMapper;
import com.matrix.system.app.mapper.SysProjUseMapper;
import com.matrix.system.app.vo.*;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.dao.SysUsersDao;
import com.matrix.system.common.interceptor.HostInterceptor;
import com.matrix.system.common.tools.DataAuthUtil;
import com.matrix.system.common.tools.LocationUtil;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.hive.bean.*;
@@ -30,14 +22,11 @@
import com.matrix.system.hive.service.*;
import com.matrix.system.shopXcx.api.dto.ErpServiceCommentDto;
import com.matrix.system.shopXcx.api.dto.ErpServiceOrderListDto;
import com.matrix.system.shopXcx.api.vo.ErpOrderDetailItemVo;
import com.matrix.system.shopXcx.api.vo.ErpServiceOrderListVo;
import com.matrix.system.shopXcx.bean.ShopProduct;
import com.matrix.system.shopXcx.dao.ShopProductDao;
import com.matrix.system.shopXcx.dao.ShopSkuDao;
import com.matrix.system.shopXcx.dto.YYDayOfWeek;
import com.matrix.system.shopXcx.dto.YYmonth;
import com.matrix.system.shopXcx.mqTask.DTO.UserProjInfo;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -245,7 +234,7 @@
        if (CollectionUtils.isNotEmpty(serviceTcVos)) {
            serviceTcVos.forEach(item -> {
                List<SysProjUse> sysProjUses = projUseService.selectTaocanProjUse(item.getId());
                List<SysProjUse> sysProjUses = projUseService.selectTaocanProjUse(item.getId(), queryUse.getStatus());
                List<ServiceProjVo> taocanProj = SysProjUseMapper.INSTANCE.entityListToProjVoList(sysProjUses);
                item.setProj(taocanProj);
            });
zq-erp/src/main/resources/mybatis/mapper/hive/MoneyCardUseDao.xml
@@ -20,6 +20,7 @@
        <result property="isVipCar" column="is_vip_car"/>
        <result property="remark" column="remark"/>
        <result property="cardName" column="card_name"/>
        <result property="orderId" column="orderId"/>
        <!-- 对应会员信息 -->
        <association property="vipInfo" javaType="SysVipInfo"
@@ -366,6 +367,7 @@
        select
        a.id,
        a.order_item_id,
        d.id AS orderId,
        a.use_total,
        a.last_count,
        a.real_money,
@@ -380,7 +382,10 @@
        a.remark,
        a.card_name
        from money_card_use a
        where vip_id = #{record.vipId}
        left join shopping_goods b on a.goods_id=b.id
        left join sys_order_item c on a.ORDER_ITEM_ID=c.id
        left join sys_order d on c.ORDER_ID=d.id
        where a.vip_id = #{record.vipId}
        <if test="record!=null">
            <if test="record.orderItemId != null and record.orderItemId !='' ">
                and a.order_item_id = #{record.orderItemId}
@@ -420,7 +425,9 @@
        select count(*)
        from money_card_use a
        left join shopping_goods b on a.goods_id=b.id
        where vip_id = #{record.vipId}
        left join sys_order_item c on a.ORDER_ITEM_ID=c.id
        left join sys_order d on c.ORDER_ID=d.id
        where a.vip_id = #{record.vipId}
        <if test="record!=null">
            <if test="record.orderItemId != null and record.orderItemId !='' ">
                and a.order_item_id = #{record.orderItemId}
zq-erp/src/main/resources/mybatis/mapper/hive/SysBeauticianStateDao.xml
@@ -410,6 +410,7 @@
    <select id="selectItemDetail" resultType="java.util.HashMap" parameterType="java.util.HashMap">
        select
        f.SHOP_NAME,
        b.yy_time,
        b.consume_time,
        b.SERVICE_NO,
        d.su_name,
@@ -420,7 +421,8 @@
        a.COUNT,
        h.PRICE,
        h.SOURCE,
        a.STATE
        a.STATE,
        a.extract
        from sys_beautician_state a
        left join sys_proj_services b on a.SERVICES_ID=b.ID
        left join shopping_goods c on a.proj_id=c.id
zq-erp/src/main/resources/mybatis/mapper/hive/SysOrderFlowDao.xml
@@ -75,4 +75,108 @@
        where order_id=#{orderId}
        group by pay_method
    </select>
    <select id="selectInPage" resultType="com.matrix.system.hive.vo.OrderFlowVo">
        SELECT
        a.id,
        b.id as orderId,
        a.create_time as createTime,
        b.ORDER_NO as orderNo,
        a.flow_content as flowContent,
        a.flow_type as flowType,
        a.amount as amount,
        c.VIP_NAME as vipName,
        a.pay_method as payMethod,
        a.flow_no as flowNo,
        d.shop_short_name as shopName,
        e.su_name as staffName
        from sys_order_flow a
        LEFT JOIN sys_order b on a.order_id=b.ID
        LEFT JOIN sys_vip_info c on a.vip_id=c.ID
        LEFT JOIN sys_shop_info d on a.shop_id=d.ID
        LEFT JOIN sys_users e on e.su_id=b.STAFF_ID
        <where>
                and a.company_id=#{record.companyId}
            <if test="record.queryKey != null and record.queryKey != ''">
                and (instr(c.vip_name, #{record.queryKey}) or instr(c.phone, #{record.queryKey}) )
            </if>
            <if test="record.oprationMan != null and record.oprationMan != ''">
                and instr(e.su_name, #{record.oprationMan})
            </if>
            <if test="record.orderNo != null and record.orderNo != ''">
                and instr(b.ORDER_NO, #{record.orderNo})
            </if>
            <if test="record.payMethod != null and record.payMethod != ''">
                and a.pay_method=#{record.payMethod}
            </if>
            <if test="record.flowType != null and record.flowType != ''">
                and a.flow_type=#{record.flowType}
            </if>
            <if test="record.startTime != null ">
                and a.create_time >= #{record.startTime}
            </if>
            <if test="record.endTime != null   ">
                <![CDATA[and a.create_time <= #{record.endTime}]]>
            </if>
            <if test="record.shopId != null and record.shopId != ''">
                and a.shop_id=#{record.shopId}
            </if>
        </where>
        <if test="record.sort !=null">
            order by
            a.${record.sort} ${record.order}
        </if>
        <if test="record.offset >=0  and record.limit >0">
            limit
            #{record.offset},#{record.limit}
        </if>
    </select>
    <select id="selectTotal" resultType="java.lang.Integer">
        SELECT count(*)
        from sys_order_flow a
        LEFT JOIN sys_order b on a.order_id=b.ID
        LEFT JOIN sys_vip_info c on a.vip_id=c.ID
        LEFT JOIN sys_shop_info d on a.shop_id=d.ID
        LEFT JOIN sys_users e on e.su_id=b.STAFF_ID
        <where>
            and a.company_id=#{record.companyId}
            <if test="record.queryKey != null and record.queryKey != ''">
                and (instr(c.vip_name, #{record.queryKey}) or instr(c.phone, #{record.queryKey}) )
            </if>
            <if test="record.oprationMan != null and record.oprationMan != ''">
                and instr(e.su_name, #{record.oprationMan})
            </if>
            <if test="record.orderNo != null and record.orderNo != ''">
                and instr(b.ORDER_NO, #{record.orderNo})
            </if>
            <if test="record.payMethod != null and record.payMethod != ''">
                and a.pay_method=#{record.payMethod}
            </if>
            <if test="record.flowType != null and record.flowType != ''">
                and a.flow_type=#{record.flowType}
            </if>
            <if test="record.startTime != null ">
                and a.create_time >= #{record.startTime}
            </if>
            <if test="record.endTime != null   ">
                <![CDATA[and a.create_time <= #{record.endTime}]]>
            </if>
            <if test="record.shopId != null and record.shopId != ''">
                and a.shop_id=#{record.shopId}
            </if>
        </where>
    </select>
</mapper>
zq-erp/src/main/resources/mybatis/mapper/hive/SysProjServicesDao.xml
@@ -549,6 +549,7 @@
        left join sys_proj_use g on b.puse_id=g.ID
        left join sys_shop_info h on a.SHOP_ID=h.ID
        <where>
            and a.company_id=#{record.companyId}
            <if test="record.queryKey != null and record.queryKey != ''">
                and (instr(a.SERVICE_NO, #{record.queryKey}) or instr(e.phone, #{record.queryKey}) or instr(e.vip_name, #{record.queryKey}) )
            </if>
@@ -585,6 +586,7 @@
        left join sys_users f on f.su_id=b.STAFF_ID
        left join sys_proj_use g on b.puse_id=g.ID
        <where>
            and a.company_id=#{record.companyId}
            <if test="record.queryKey != null and record.queryKey != ''">
                and (instr(a.SERVICE_NO, #{record.queryKey}) or instr(e.phone, #{record.queryKey}) or instr(e.vip_name, #{record.queryKey}) )
            </if>
zq-erp/src/main/resources/mybatis/mapper/hive/SysProjUseDao.xml
@@ -31,6 +31,7 @@
        <result property="deductionNum" column="deductionNum"/>
        <result property="isCourse" column="is_course"/>
        <result property="timeLength" column="time_length"/>
        <result property="orderId" column="orderId"/>
        <!-- 对应项目信息-->
        <association property="projInfo" javaType="ShoppingGoods"
                     resultMap="com.matrix.system.hive.dao.ShoppingGoodsDao.ShoppingGoodsMap"/>
@@ -331,10 +332,13 @@
    <select id="selectInPage" resultMap="SysProjUseMap">
        select
        a.*,
        d.id as orderId,
        b.TIME_LENGTH,
        b.img
        from sys_proj_use a
        left join shopping_goods b on a.proj_id=b.id
        left join sys_order_item c on a.ORDER_ITEM_ID=c.id
        left join sys_order d on c.ORDER_ID=d.id
        where 1=1
        <if test="record!=null">
            <if test="record.id != null and record.id !='' ">
@@ -440,70 +444,81 @@
    <!-- 查询总条数 -->
    <select id="selectTotalRecord" resultType="java.lang.Integer">
        select count(*)
        from sys_proj_use
        from sys_proj_use a
        left join shopping_goods b on a.proj_id=b.id
        left join sys_order_item c on a.ORDER_ITEM_ID=c.id
        left join sys_order d on c.ORDER_ID=d.id
        where 1=1
        <if test="record!=null">
            <if test="record.id != null and record.id !='' ">
                and ID = #{record.id}
                and a.ID = #{record.id}
            </if>
            <if test="record.queryKey != null and record.queryKey !='' ">
                and (instr(b.name, #{record.queryKey}) or instr(b.zjm, #{record.queryKey}) or instr(goods_no, #{record.queryKey}))
            </if>
            <if test="record.orderItemId != null and record.orderItemId !='' ">
                and ORDER_ITEM_ID = #{record.orderItemId}
                and a.ORDER_ITEM_ID = #{record.orderItemId}
            </if>
            <if test="record.projId != null and record.projId !='' ">
                and PROJ_ID = #{record.projId}
                and a.PROJ_ID = #{record.projId}
            </if>
            <if test="record.surplusCount != null and record.surplusCount !='' ">
                and SURPLUS_COUNT = #{record.surplusCount}
                and a.SURPLUS_COUNT = #{record.surplusCount}
            </if>
            <if test="record.isOver != null and record.isOver !='' ">
                and IS_OVER = #{record.isOver}
                and a.IS_OVER = #{record.isOver}
            </if>
            <!-- 查询具体某一个套餐的使用情况 -->
            <if
                    test="record.taocanId != null and record.taocanId !=-1 and record.taocanId !=-2">
                and TAOCAN_ID = #{record.taocanId}
                and a.TAOCAN_ID = #{record.taocanId}
            </if>
            <!-- 查询所有的项目使用情况 -->
            <if test="record.taocanId != null and record.taocanId ==-1 ">
                and TAOCAN_ID IS NULL
                and a.TAOCAN_ID IS NULL
            </if>
            <!-- 查询所有的套餐使用情况 -->
            <if test="record.taocanId != null and record.taocanId ==-2 ">
                and TAOCAN_ID IS NOT NULL
                and a.TAOCAN_ID IS NOT NULL
            </if>
            <if test="record.vipId != null and record.vipId !='' ">
                and VIP_ID = #{record.vipId}
                and a.VIP_ID = #{record.vipId}
            </if>
            <if test="record.failTime != null  ">
                and a.FAIL_TIME = #{record.failTime}
            </if>
            <if test="record.targetFailTime != null  ">
                and date_format(#{record.targetFailTime}, '%Y-%m-%d') > date_format(a.FAIL_TIME, '%Y-%m-%d')
            </if>
            <if test="record.price != null and record.price !='' ">
                and PRICE = #{record.price}
                and a.PRICE = #{record.price}
            </if>
            <if test="record.assembleId != null and record.assembleId !='' ">
                and ASSEMBLE_ID = #{record.assembleId}
                and a.ASSEMBLE_ID = #{record.assembleId}
            </if>
            <if test="record.source != null and record.source !='' ">
                and SOURCE like concat('%',#{record.source},'%')
                and a.SOURCE like concat('%',#{record.source},'%')
            </if>
            <if test="record.status != null and record.status !='' ">
                and STATUS = #{record.status}
                and a.STATUS = #{record.status}
            </if>
            <if test="record.platformFlag != null and record.platformFlag !='' ">
                and PLATFORM_FLAG = #{record.platformFlag}
            </if>
            <if test="record.projName != null and record.projName !='' ">
                and PROJ_NAME like concat('%',#{record.projName},'%')
                and a.PLATFORM_FLAG = #{record.platformFlag}
            </if>
            <if test="record.type != null and record.type !='' ">
                and type = #{record.type}
                and a.type = #{record.type}
            </if>
            <if test="record.projName != null and record.projName !='' ">
                and a.PROJ_NAME like concat('%',#{record.projName},'%')
            </if>
            <if test="record.balance != null and record.balance !='' ">
                and balance = #{record.balance}
                and a.balance = #{record.balance}
            </if>
            <if test="record.remark != null and record.remark !='' ">
                and remark = #{record.remark}
                and a.remark = #{record.remark}
            </if>
            <if test="record.isCourse != null and record.isCourse !='' ">
                and   is_course = #{record.isCourse},
                and  a.is_course = #{record.isCourse},
            </if>
        </if>
    </select>
zq-erp/src/main/resources/static/css/styleOne/style.min.css
@@ -3013,6 +3013,7 @@
body, body.full-height-layout #page-wrapper, body.full-height-layout #wrapper,
    html {
    height: 100%;
    overflow: hidden;
}
#page-wrapper {
@@ -9157,4 +9158,10 @@
    line-height: 50px;
}
/*===========鑷畾涔夋牱寮廵nd==============================*/
/*===========鑷畾涔夋牱寮廵nd==============================*/
/**
* 覆盖elementui一些无用样式
*/
.el-form-item{
    margin-bottom:10px !important;
}
zq-erp/src/main/resources/static/js/systools/AjaxProxyVue.js
@@ -240,7 +240,16 @@
      return root.children;
    },
    /** json对象转Url参数**/
    jsonToUrlParam:function(obj){
        let str="";
        for(item in obj){
            if(obj[item]){
                str+=item+"="+obj[item]+"&"
            }
        }
        return str;
    }
zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/jyls.html
New file
@@ -0,0 +1,330 @@
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
    <meta http-equiv="Cache-Control" content="no-siteapp"/>
    <LINK rel="Bookmark" href="../images/favicon.ico">
    <!-- 本框架基本脚本和样式 -->
    <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script>
    <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}">
    <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/>
    <title></title>
    <style>
        .panel-body{
            overflow: hidden;
        }
        .buttonPanel{
            background: #ffffff;
            padding: 10px 10px ;
            margin: 0px 0px 10px 0px;
        }
        .rowPanel{
            background: #ffffff;
            padding: 0px 10px ;
            padding-top: 10px;
            margin: 0px 0px 10px 0px;
        }
        .paginationStyle{
            background: #ffffff;
            padding: 10px 10px;
            margin: 0px 0px 10px 0px;
            text-align: right;
        }
    </style>
</head>
<body>
<div class="panel-body" id="app">
    <el-row class="buttonPanel">
        <el-button @click="exportExcel" type="primary" >导出</el-button>
    </el-row>
    <el-row class="rowPanel"  >
        <el-form ref="form" :model="form" inline >
            <el-form-item label="会员" prop="queryKey">
                <el-input v-model="form.queryKey" placeholder="请输入会员姓名/手机"></el-input>
            </el-form-item>
            <el-form-item label="操作人" prop="oprationMan" >
                <el-input v-model="form.oprationMan"></el-input>
            </el-form-item>
            <el-form-item label="订单号" prop="orderNo">
                <el-input v-model="form.orderNo"></el-input>
            </el-form-item>
            <el-form-item label="交易类型" prop="flowType">
                <el-select v-model="form.flowType" placeholder="请选择">
                    <el-option
                            v-for="item in flowTypeList"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                            >
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="支付方式" prop="payMethod">
                <el-select v-model="form.payMethod" placeholder="请选择">
                    <el-option
                            v-for="item in payMethodList"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="时间" prop="datetimeArr">
                <el-date-picker
                        v-model="form.datetimeArr"
                        type="daterange"
                        range-separator="至" format="yyyy-MM-dd HH:mm"
                        start-placeholder="开始日期"
                        end-placeholder="结束日期">
                </el-date-picker>
            </el-form-item>
            <el-form-item label="交易门店" prop="shopId">
                <el-select v-model="form.shopId" placeholder="请选择">
                    <el-option
                            v-for="item in shopList"
                            :key="item.shopShortName"
                            :label="item.shopShortName"
                            :value="item.id">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-button type="primary" @click="search" >搜索</el-button>
            <el-button @click="resetForm('form')">重置</el-button>
        </el-form>
    </el-row>
    <el-row class="table-style"  >
        <el-table id="proj" :data="table.rows"  :height="height" stripe @sort-change="sortChange">
            <el-table-column
                    prop="orderNo"
                    label="订单号"
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="flowContent"
                    label="交易内容"
                    show-overflow-tooltip
                    width="240">
            </el-table-column>
            <el-table-column
                    prop="createTime"
                    sortable="custom"
                    label="交易时间"
                    show-overflow-tooltip
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="flowType"
                    sortable="custom"
                    label="交易类型">
            </el-table-column>
            <el-table-column
                    prop="amount"
                    sortable="custom"
                    label="交易金额">
            </el-table-column>
            <el-table-column
                    prop="vipName"
                    label="会员姓名">
            </el-table-column>
            <el-table-column
                    prop="payMethod"
                    sortable="custom"
                    label="支付方式">
            </el-table-column>
            <el-table-column
                    prop="flowNo"
                    label="支付流水号">
            </el-table-column>
            <el-table-column
                    prop="staffName"
                    label="操作人">
            </el-table-column>
            <el-table-column
                    prop="shopName"
                    label="门店名称">
            </el-table-column>
            <el-table-column label="操作">
                <template slot-scope="scope">
                    <el-button type="text" @click="openOrder(scope.$index, scope.row)" size="small">订单详情</el-button>
                </template>
            </el-table-column>
        </el-table>
    </el-row>
    <el-row class="paginationStyle"  >
        <el-pagination background
                       @size-change="changePageSize"
                       @current-change="changeCurrentPage"
                       :current-page="table.currentPage"
                       :page-sizes="[10, 20, 30, 50]"
                       :page-size="table.pageSize"
                       layout="total, sizes, prev, pager, next, jumper"
                       :total="table.total">
        </el-pagination>
    </el-row>
</div>
</body>
<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script>
<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script>
<script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script>
<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script>
<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script>
<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script>
<script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script>
<script type="text/javascript" th:inline="javascript">
    var vue = new Vue({
        el: '#app',
        data: {
            table:{
                rows:[],
                total:0,
                pageSize:10,
                currentPage:1,
            },
            form:{
                name:null,
                datetimeArr:'',
                payMethod:'',
                flowType:'',
                orderNo:'',
                oprationMan:'',
                queryKey:'',
                shopId:'',
            },
            height:'calc(100vh - 240px)',
            shopList:[{id:0,shopShortName:'全部'}],
            flowTypeList:[
                {value:'',label:'全部'},
                {value:'购买',label:'购买'},
                {value:'退款',label:'退款'},
                {value:'还款',label:'还款'}
            ],
            payMethodList:[
                {value:'',label:'全部'},
                {value:'现金',label:'现金'},
                {value:'微信',label:'微信'},
                {value:'支付宝',label:'支付宝'},
                {value:'银行卡',label:'银行卡'},
                {value:'团购',label:'团购'},
                {value:'储值卡',label:'储值卡'},
                {value:'欠款',label:'欠款'}
            ],
        },
        created: function () {
            let _this=this;
           this.loadData();
            window.addEventListener("keydown", this.keydown);
            AjaxProxy.requst({
                app:_this,
                url:basePath+"/admin/shopInfo/findAll",
                callback:function (data) {
                    data.rows.forEach(shop=>{
                        _this.shopList.push(shop);
                    });
                }
            })
        },
        methods: {
            changePageSize(val) {
                this.table.pageSize = val;
                this.loadData();
            },
            changeCurrentPage(val) {
                this.table.currentPage = val;
                this.loadData();
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
            },
            sortChange:function (column){
                if(column.order){
                    if(column.order.indexOf("desc")){
                        this.form.order="desc";
                    }else{
                        this.form.order="asc";
                    }
                    this.form.sort=column.prop;
                    this.loadData();
                }
            },
            loadData:function(){
                let _this = this;
                let data=_this.getRequestParam();
                data.limit=_this.table.pageSize;
                data.offset=_this.table.pageSize*(_this.table.currentPage-1);
                AjaxProxy.requst({
                    app: _this,
                    data:data,
                    url: basePath + '/admin/orderFlow/findOrderFlow',
                    callback: function (data) {
                        _this.table.rows = data.rows;
                        _this.table.total=data.total;
                    }
                });
            },
            getRequestParam(){
                let _this = this;
                return   {
                    name:_this.form.name,
                    payMethod:_this.form.payMethod,
                    flowType:_this.form.flowType,
                    orderNo:_this.form.orderNo,
                    oprationMan:_this.form.oprationMan,
                    queryKey:_this.form.queryKey,
                    startTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[0]).format("YYYY-MM-DD HH:mm"):'',
                    endTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[1]).format("YYYY-MM-DD HH:mm"):'',
                    order:_this.form.order,
                    sort:_this.form.sort,
                }
            },
            search:function(){
                this.table.currentPage=1;
                this.loadData();
            },
            keydown(evt){
                if(evt.keyCode==13) {
                    this.search();
                }
            },
            openOrder(index,row){
                layer.full(layer.open({
                    type : 2,
                    title : "订单详情",
                    maxmin : true,
                    content : [ basePath + '/admin/order/orderItem?id=' + row.orderId ]
                }));
            },
            //导出
            exportExcel(){
                window.location.href=basePath+"/admin/orderFlow/exportOrderFlowExcel?"+MTools.jsonToUrlParam(this.getRequestParam());
            }
        }
    });
</script>
</body>
</html>
zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/statistics-projSercice-item.html
@@ -85,13 +85,15 @@
                <tr>
                    <th data-formatter="MGrid.indexfn" data-align="center"  data-width="30px" >序号</th>
                    <th data-field="SHOP_NAME" >门店</th>
                    <th data-field="consume_time"  data-formatter="MGrid.getTime"  data-sortable="true"   >服务日期</th>
                    <th data-field="yy_time"  data-formatter="MGrid.getTime"  data-sortable="true"   >预约时间</th>
                    <th data-field="consume_time"  data-formatter="MGrid.getTime"  data-sortable="true"   >划扣时间</th>
                    <th data-field="SERVICE_NO" >服务单号</th>
                    <th data-field="PROJ_NAME" >服务名称</th>
                    <th data-field="TYPE_NAME" >分类</th>
                    <th data-field="VIP_NAME" >客户名</th>
                      <th data-field="COUNT"  data-sortable="true"     >次数</th>
                      <th data-field="PRICE"  data-sortable="true"       >单价</th>
                      <th data-field="COUNT"  data-sortable="true">次数</th>
                      <th data-field="PRICE"  data-sortable="true">划扣单价</th>
                      <th data-field="extract"  data-sortable="true"  >提成</th>
                      <th data-field="su_name" >美疗师</th>
                      <th data-field="SOURCE" >来源</th>
                </tr>
@@ -115,7 +117,9 @@
            //有删除权限
            var delUrl="";
            myGrid=MGrid.initGrid({
                 url:basePath+"/admin/serviceStatistics/showList"
                 url:basePath+"/admin/serviceStatistics/showList",
                sortName:"yy_time",
                sortOrder:"desc"
             });
        });
        
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/cz-form.html
@@ -62,7 +62,7 @@
        <el-row type="flex" align="middle" style="padding: 0 0 10px 0;">
            <el-col :span="5" style="text-align: center;">充值金额</el-col>
            <el-col :span="10" style="text-align: center; line-height: 50px;">
                <el-input v-model="rechargeMoney" placeholder="0.1元起充"></el-input>
                <el-input v-model="rechargeMoney" @change="changeRechargeMoney"  placeholder="0.1元起充"></el-input>
            </el-col>
        </el-row>
@@ -236,6 +236,13 @@
            });
        },
        methods : {
            //修改充值金额同步修改业绩
            changeRechargeMoney(){
                let aMoeny=(this.rechargeMoney/this.achieveList.length).toFixed(2);
                this.achieveList.forEach(item=>{
                    item.achieveMoney=aMoeny;
                });
            },
            submitRecharge() {
                let _this = this;
zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html
@@ -257,6 +257,7 @@
                                        <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效'" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button>
                                        <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结'" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button>
                                        <el-button matrix:btn="vipInfo-cardEdit" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button>
                                        <el-button type="text"  @click="openOrder(scope.$index, scope.row)" size="small">订单</el-button>
                                        <el-button  type="text" size="small" @click="openProjUseFlow(scope.$index, scope.row)">操作记录</el-button>
                                    </template>
                                </el-table-column>
@@ -293,6 +294,7 @@
                                        <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效' && scope.row.taocanId == null" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button>
                                        <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结' && scope.row.taocanId == null" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button>
                                        <el-button matrix:btn="vipInfo-cardEdit" v-if="scope.row.taocanId == null" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button>
                                        <el-button type="text" v-if="scope.row.orderId != null"  @click="openOrder(scope.$index, scope.row)" size="small">订单</el-button>
                                        <el-button  type="text" size="small" @click="openProjUseFlow(scope.$index, scope.row)">操作记录</el-button>
                                    </template>
                                </el-table-column>
@@ -333,10 +335,6 @@
                                        label="状态">
                                </el-table-column>
                                <el-table-column
                                        prop="isVipCar"
                                        label="是否是会籍卡"  :formatter="cardIsVipFormatter">
                                </el-table-column>
                                <el-table-column
                                        prop="isOver"
                                        label="是否使用完成" :formatter="cardIsOrderFormatter">
                                </el-table-column>
@@ -350,10 +348,11 @@
                                </el-table-column>
                                <el-table-column label="操作" fixed="right" width="160">
                                    <template slot-scope="scope">
                                        <el-button matrix:btn="vipInfo-youxiao" v-if="scope.row.status!='有效'" type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button>
                                        <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效'" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button>
                                        <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结'" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button>
                                        <el-button matrix:btn="vipInfo-youxiao" v-if="scope.row.status!='有效' && scope.row.isVipCar =='N' " type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button>
                                        <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效' && scope.row.isVipCar =='N'  " type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button>
                                        <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结' && scope.row.isVipCar =='N' " type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button>
                                        <el-button matrix:btn="vipInfo-cardEdit" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button>
                                        <el-button type="text"  v-if="scope.row.isVipCar =='N'"  @click="openOrder(scope.$index, scope.row)" size="small">订单</el-button>
                                        <el-button  type="text" size="small" @click="openMoneyCardUseFlow(scope.$index, scope.row)">操作记录</el-button>
                                    </template>
                                </el-table-column>
@@ -717,6 +716,15 @@
            }
        },
        methods : {
            //打开订单详情页面
            openOrder(index,row){
                layer.full(layer.open({
                    type : 2,
                    title : "订单详情",
                    maxmin : true,
                    content : [ basePath + '/admin/order/orderItem?id=' + row.orderId ]
                }));
            },
            querySearch(queryString, cb) {
                $.AjaxProxy({
                    p: {
@@ -1071,8 +1079,8 @@
                params.state = serviceOrderTab.state;
                params.vipId = _this.vipInfo.id;
                if (serviceOrderTab.selectTime) {
                    params.beginTime = moment(serviceOrderTab.selectTime[0]).format("YYYY-MM-DD HH:mm");
                    params.closureTime = moment(serviceOrderTab.selectTime[1]).format("YYYY-MM-DD HH:mm");
                    params.beginTime = serviceOrderTab.selectTime?moment(serviceOrderTab.selectTime[0]).format("YYYY-MM-DD HH:mm"):'';
                    params.closureTime = serviceOrderTab.selectTime?moment(serviceOrderTab.selectTime[1]).format("YYYY-MM-DD HH:mm"):'';
                }
                $.AjaxProxy({
                    p:params
@@ -1154,8 +1162,8 @@
                params.statu = orderTab.state;
                params.vipId = _this.vipInfo.id;
                if (orderTab.selectTime) {
                    params.beginTimeVo = moment(orderTab.selectTime[0]).format("YYYY-MM-DD HH:mm");
                    params.endTimeVo = moment(orderTab.selectTime[1]).format("YYYY-MM-DD HH:mm");
                    params.beginTimeVo = orderTab.selectTime?moment(orderTab.selectTime[0]).format("YYYY-MM-DD HH:mm"):'';
                    params.endTimeVo = orderTab.selectTime?moment(orderTab.selectTime[1]).format("YYYY-MM-DD HH:mm"):'';
                }
                $.AjaxProxy({
                    p:params
@@ -1229,8 +1237,8 @@
                params.offset = (page.currentPage - 1) * page.pageSize;
                params.userId = _this.vipInfo.id;
                if (skinTab.selectTime) {
                    params.beginTime = moment(skinTab.selectTime[0]).format("YYYY-MM-DD");
                    params.endTime = moment(skinTab.selectTime[1]).format("YYYY-MM-DD");
                    params.beginTime = skinTab.selectTime?moment(skinTab.selectTime[0]).format("YYYY-MM-DD"):'';
                    params.endTime = skinTab.selectTime?moment(skinTab.selectTime[1]).format("YYYY-MM-DD"):'';
                }
                $.AjaxProxy({
                    p:params
zq-erp/src/main/resources/templates/views/admin/hive/statistics/jyls.html
New file
@@ -0,0 +1,305 @@
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
    <meta http-equiv="Cache-Control" content="no-siteapp"/>
    <LINK rel="Bookmark" href="../images/favicon.ico">
    <!-- 本框架基本脚本和样式 -->
    <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script>
    <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}">
    <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/>
    <title></title>
    <style>
        .panel-body{
            overflow: hidden;
        }
        .buttonPanel{
            background: #ffffff;
            padding: 10px 10px ;
            margin: 0px 0px 10px 0px;
        }
        .rowPanel{
            background: #ffffff;
            padding: 0px 10px ;
            padding-top: 10px;
            margin: 0px 0px 10px 0px;
        }
        .paginationStyle{
            background: #ffffff;
            padding: 10px 10px;
            margin: 0px 0px 10px 0px;
            text-align: right;
        }
    </style>
</head>
<body>
<div class="panel-body" id="app">
    <el-row class="buttonPanel">
            <el-button @click="exportExcel" type="primary" >导出</el-button>
    </el-row>
    <el-row class="rowPanel"  >
        <el-form ref="form" :model="form" inline >
            <el-form-item label="会员" prop="queryKey">
                <el-input v-model="form.queryKey" placeholder="请输入会员姓名/手机"></el-input>
            </el-form-item>
            <el-form-item label="操作人" prop="oprationMan" >
                <el-input v-model="form.oprationMan"></el-input>
            </el-form-item>
            <el-form-item label="订单号" prop="orderNo">
                <el-input v-model="form.orderNo"></el-input>
            </el-form-item>
            <el-form-item label="交易类型" prop="flowType">
                <el-select v-model="form.flowType" placeholder="请选择">
                    <el-option
                            v-for="item in flowTypeList"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                            >
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="支付方式" prop="payMethod">
                <el-select v-model="form.payMethod" placeholder="请选择">
                    <el-option
                            v-for="item in payMethodList"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="时间" prop="datetimeArr">
                <el-date-picker
                        v-model="form.datetimeArr"
                        type="daterange"
                        range-separator="至" format="yyyy-MM-dd HH:mm"
                        start-placeholder="开始日期"
                        end-placeholder="结束日期">
                </el-date-picker>
            </el-form-item>
            <el-button type="primary" @click="search" >搜索</el-button>
            <el-button @click="resetForm('form')">重置</el-button>
        </el-form>
    </el-row>
    <el-row class="table-style"  >
        <el-table id="proj" :data="table.rows"  :height="height" stripe @sort-change="sortChange">
            <el-table-column
                    prop="orderNo"
                    label="订单号"
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="flowContent"
                    label="交易内容"
                    show-overflow-tooltip
                    width="240">
            </el-table-column>
            <el-table-column
                    prop="createTime"
                    sortable="custom"
                    label="交易时间"
                    show-overflow-tooltip
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="flowType"
                    sortable="custom"
                    label="交易类型">
            </el-table-column>
            <el-table-column
                    prop="amount"
                    sortable="custom"
                    label="交易金额">
            </el-table-column>
            <el-table-column
                    prop="vipName"
                    label="会员姓名">
            </el-table-column>
            <el-table-column
                    prop="payMethod"
                    sortable="custom"
                    label="支付方式">
            </el-table-column>
            <el-table-column
                    prop="flowNo"
                    label="支付流水号">
            </el-table-column>
            <el-table-column
                    prop="staffName"
                    label="操作人">
            </el-table-column>
            <el-table-column
                    prop="shopName"
                    label="门店名称">
            </el-table-column>
            <el-table-column label="操作">
                <template slot-scope="scope">
                    <el-button type="text" @click="openOrder(scope.$index, scope.row)" size="small">订单详情</el-button>
                </template>
            </el-table-column>
        </el-table>
    </el-row>
    <el-row class="paginationStyle"  >
        <el-pagination background
                       @size-change="changePageSize"
                       @current-change="changeCurrentPage"
                       :current-page="table.currentPage"
                       :page-sizes="[10, 20, 30, 50]"
                       :page-size="table.pageSize"
                       layout="total, sizes, prev, pager, next, jumper"
                       :total="table.total">
        </el-pagination>
    </el-row>
</div>
</body>
<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script>
<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script>
<script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script>
<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script>
<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script>
<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script>
<script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script>
<script type="text/javascript" th:inline="javascript">
    var vue = new Vue({
        el: '#app',
        data: {
            table:{
                rows:[],
                total:0,
                pageSize:10,
                currentPage:1,
            },
            form:{
                name:null,
                datetimeArr:'',
                payMethod:'',
                flowType:'',
                orderNo:'',
                oprationMan:'',
                queryKey:'',
                order:'',
                sort:''
            },
            height:'calc(100vh - 240px)',
            flowTypeList:[
                {value:'',label:'全部'},
                {value:'购买',label:'购买'},
                {value:'退款',label:'退款'},
                {value:'还款',label:'还款'}
            ],
            payMethodList:[
                {value:'',label:'全部'},
                {value:'现金',label:'现金'},
                {value:'微信',label:'微信'},
                {value:'支付宝',label:'支付宝'},
                {value:'银行卡',label:'银行卡'},
                {value:'团购',label:'团购'},
                {value:'储值卡',label:'储值卡'},
                {value:'欠款',label:'欠款'}
            ],
        },
        created: function () {
           this.loadData();
            window.addEventListener("keydown", this.keydown);
        },
        methods: {
            changePageSize(val) {
                this.table.pageSize = val;
                this.loadData();
            },
            changeCurrentPage(val) {
                this.table.currentPage = val;
                this.loadData();
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
            },
            sortChange:function (column){
                if(column.order){
                    if(column.order.indexOf("desc")){
                        this.form.order="desc";
                    }else{
                        this.form.order="asc";
                    }
                    this.form.sort=column.prop;
                    this.loadData();
                }
            },
            loadData:function(){
                let _this = this;
                let data=_this.getRequestParam();
                data.limit=_this.table.pageSize;
                data.offset=_this.table.pageSize*(_this.table.currentPage-1);
                AjaxProxy.requst({
                    app: _this,
                    data:data,
                    url: basePath + '/admin/orderFlow/findOrderFlow',
                    callback: function (data) {
                        _this.table.rows = data.rows;
                        _this.table.total=data.total;
                    }
                });
            },
            getRequestParam(){
                let _this = this;
                return   {
                    name:_this.form.name,
                    payMethod:_this.form.payMethod,
                    flowType:_this.form.flowType,
                    orderNo:_this.form.orderNo,
                    oprationMan:_this.form.oprationMan,
                    queryKey:_this.form.queryKey,
                    startTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[0]).format("YYYY-MM-DD HH:mm"):'',
                    endTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[1]).format("YYYY-MM-DD HH:mm"):'',
                    order:_this.form.order,
                    sort:_this.form.sort,
                }
            },
            search:function(){
                this.table.currentPage=1;
                this.loadData();
            },
            keydown(evt){
                if(evt.keyCode==13) {
                    this.search();
                }
            },
            openOrder(index,row){
                layer.full(layer.open({
                    type : 2,
                    title : "订单详情",
                    maxmin : true,
                    content : [ basePath + '/admin/order/orderItem?id=' + row.orderId ]
                }));
            },
            //导出
          exportExcel(){
            window.location.href=basePath+"/admin/orderFlow/exportOrderFlowExcel?"+MTools.jsonToUrlParam(this.getRequestParam());
        }
        }
    });
</script>
</body>
</html>
zq-erp/src/main/resources/templates/views/admin/hive/statistics/statistics-projSercice-item.html
@@ -77,15 +77,18 @@
            <thead>
                <tr>
                    <th data-formatter="MGrid.indexfn" data-align="center"  data-width="30px" >序号</th>
                    <th data-field="consume_time"  data-formatter="MGrid.getTime"  data-sortable="true"   >服务日期</th>
                    <th data-field="SHOP_NAME" >门店</th>
                    <th data-field="yy_time"  data-formatter="MGrid.getTime"  data-sortable="true"   >预约时间</th>
                    <th data-field="consume_time"  data-formatter="MGrid.getTime"  data-sortable="true"   >划扣时间</th>
                    <th data-field="SERVICE_NO" >服务单号</th>
                    <th data-field="PROJ_NAME" >服务名称</th>
                    <th data-field="TYPE_NAME" >分类</th>
                    <th data-field="VIP_NAME" >客户名</th>
                      <th data-field="COUNT"  data-sortable="true"     >次数</th>
                      <th data-field="PRICE"  data-sortable="true"       >单价</th>
                      <th data-field="su_name" >美疗师</th>
                      <th data-field="SOURCE" >来源</th>
                    <th data-field="COUNT"  data-sortable="true"     >次数</th>
                    <th data-field="PRICE"  data-sortable="true"       >划扣单价</th>
                    <th data-field="extract"  data-sortable="true"  >提成</th>
                    <th data-field="su_name" >美疗师</th>
                    <th data-field="SOURCE" >来源</th>
                </tr>
            </thead>
        </table>
@@ -107,7 +110,9 @@
            //有删除权限
            var delUrl="";
            myGrid=MGrid.initGrid({
                 url:basePath+"/admin/serviceStatistics/showList"
                url:basePath+"/admin/serviceStatistics/showList",
                sortName:"yy_time",
                sortOrder:"desc"
             });
        });