Merge branch 'api' into hive2.0
5 files added
30 files modified
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | |
| | | |
| | | 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); |
| | | }); |
| | |
| | | @Resource |
| | | private SysVipInfoService vipInfoService; |
| | | |
| | | @Autowired |
| | | @Resource |
| | | private MoneyCardUseFlowDao moneyCardUseFlowDao; |
| | | @Autowired |
| | | |
| | | @Resource |
| | | private MoneyCardUseDao moneyCardUseDao; |
| | | |
| | | |
| | |
| | | @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"; |
| | | } |
| | |
| | | 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, "冻结失败"); |
| | | } |
| | | } |
| | |
| | | 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()); |
| | | } |
| | | |
| | | //打印需求加入门店信息 |
| | |
| | | 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; |
| | |
| | | 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); |
| | |
| | | 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, "退款失败"); |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 退款 |
| | | * |
| | | * @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); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 冻结会员项目 |
| | |
| | | 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)); |
| | | } |
| | |
| | | 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, "退款失败"); |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 退款 |
| | | * |
| | | * @return |
| | | */ |
| | | |
| | | @RequestMapping(value = "/getEffectCard") |
| | | public @ResponseBody |
| | | AjaxResult getEffectCard(SysProjUse sysProjUse) { |
| | |
| | | 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"; |
| | |
| | | * 充值卡的id |
| | | */ |
| | | private Long goodsId; |
| | | |
| | | /** |
| | | * 订单ID |
| | | */ |
| | | private Long orderId; |
| | | |
| | | |
| | | private Long vipId; |
| | |
| | | private String isOver; |
| | | |
| | | /** |
| | | * 是会籍卡? Y 是,N否 |
| | | * 是默认储值卡? Y 是,N否 |
| | | */ |
| | | private String isVipCar; |
| | | /** |
| | |
| | | */ |
| | | private String cardName; |
| | | |
| | | public Long getOrderId() { |
| | | return orderId; |
| | | } |
| | | |
| | | public void setOrderId(Long orderId) { |
| | | this.orderId = orderId; |
| | | } |
| | | |
| | | public String getCardName() { |
| | | return cardName; |
| | | } |
| | |
| | | private Long orderItemId; |
| | | |
| | | /** |
| | | * 订单id |
| | | */ |
| | | @Extend |
| | | private Long orderId; |
| | | |
| | | /** |
| | | * 单次扣减金额(理解为单次手工业绩) |
| | | * =订单金额/订单数量 |
| | | * 如果是赠送则等于产品原价,业绩记录为赠销 |
| | |
| | | private String updateRemark; |
| | | |
| | | |
| | | public Long getOrderId() { |
| | | return orderId; |
| | | } |
| | | |
| | | public void setOrderId(Long orderId) { |
| | | this.orderId = orderId; |
| | | } |
| | | |
| | | public String getUpdateRemark() { |
| | | return updateRemark; |
| | | } |
| | |
| | | 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; |
| | |
| | | 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); |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | */ |
| | | public void transfer(MoneyCardUse moneyCardUse, Long vipId2, Double money); |
| | | |
| | | /** |
| | | * 退款 |
| | | * jyy |
| | | */ |
| | | public int returnMoney(MoneyCardUse moneyCardUse, Long hjkId); |
| | | |
| | | |
| | | /** |
| | | * 设置为有效 |
| | |
| | | public int invalidTc(SysProjUse sysProjUse); |
| | | |
| | | |
| | | /** |
| | | * 退款 |
| | | * @param sysProjUse |
| | | * @return |
| | | */ |
| | | public int returnMoneyTc(SysProjUse sysProjUse, MoneyCardUse cardUse, Long moneyCardUseId); |
| | | |
| | | /** |
| | | * 设置为有效套餐 |
| | | * @param proj |
| | |
| | | |
| | | |
| | | /** |
| | | * 退款 |
| | | * @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); |
| | | } |
| | |
| | | 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; |
| | | |
| | | /** |
| | |
| | | */ |
| | | public interface SysVipInfoService extends BaseServices<SysVipInfo>{ |
| | | |
| | | public int addVipDefaultCard(Long vipId); |
| | | public MoneyCardUse addVipDefaultCard(Long vipId); |
| | | /** |
| | | * 新增SysVipInfo |
| | | * |
| | |
| | | @Autowired |
| | | private SysVipLevelDao viplevelDao; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | public int add(MoneyCardUse moneyCardUse) { |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | //退款 |
| | | @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 |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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.*; |
| | |
| | | |
| | | |
| | | @Value("${evn}") |
| | | private String evn; |
| | | private String evn; |
| | | |
| | | @Autowired |
| | | private RabiitMqTemplate rabiitMqTemplate; |
| | |
| | | |
| | | @Override |
| | | public List<SysOrder> findInPage(SysOrder sysOrder, PaginationVO pageVo) { |
| | | if(pageVo!=null){ |
| | | if (pageVo != null) { |
| | | pageVo.setSort("desc"); |
| | | pageVo.setSort("orderTime"); |
| | | } |
| | |
| | | |
| | | // 订单欠款减去支付金额 设置实际欠款 |
| | | Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount())); |
| | | zkTotal=MoneyUtil.add(zkTotal, itemZkTotal); |
| | | zkTotal = MoneyUtil.add(zkTotal, itemZkTotal); |
| | | item.setStatus(orderStatus); |
| | | } |
| | | |
| | |
| | | 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); |
| | | //删除原有订单明细 |
| | |
| | | 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); |
| | | |
| | |
| | | |
| | | // 根据订单明细判断是赠送金额购买还是本金购买 |
| | | |
| | | 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); |
| | | } |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateReceiptMoney(SysOrder pageOrder) throws GlobleException { |
| | | |
| | | |
| | | if (!Dictionary.ORDER_STATU_DFK.equals(pageOrder.getStatu())) { |
| | | throw new GlobleException("该订单已经收过款,请刷新页面再试!"); |
| | | } |
| | |
| | | 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); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 使用充值卡付款操作 |
| | | * |
| | |
| | | |
| | | 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()); |
| | |
| | | } |
| | | // 更新充值卡信息 |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | // 如果购买的是充值卡 |
| | | 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()); |
| | |
| | | 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)) { |
| | |
| | | } else { |
| | | moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM); |
| | | } |
| | | //余次处理 |
| | | if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) { |
| | | moneyCardUse.setUseTotal(999999999); |
| | | moneyCardUse.setLastCount(999999999); |
| | |
| | | moneyCardUse.setUseTotal(moneyCar.getCarUseCount()); |
| | | moneyCardUse.setLastCount(moneyCar.getCarUseCount()); |
| | | } |
| | | moneyCardUse.setVipId(sourceOrder.getVipId()); |
| | | |
| | | //失效时间处理 |
| | | Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null); |
| | | moneyCardUse.setFailTime(invalidTime); |
| | | |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | //综合卡中包含的项目 |
| | | 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); |
| | | }); |
| | | |
| | | //处理综合卡中包含的套餐 |
| | |
| | | * 通过组合关系创建用户项目余次 |
| | | */ |
| | | 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); |
| | |
| | | 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的都视为赠送项目 |
| | |
| | | } 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; |
| | | } |
| | |
| | | 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()); |
| | | } |
| | |
| | | |
| | | /** |
| | | * 会员卡充值 |
| | | * |
| | | * @param czVo |
| | | */ |
| | | @Override |
| | |
| | | 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()); |
| | |
| | | |
| | | |
| | | //设置卡项使用流水 |
| | | MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow(); |
| | | MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow(); |
| | | moneyCardUseFlow.setTotal(czVo.getBjmoney()); |
| | | moneyCardUseFlow.setGiftMoney(czVo.getGiftMoney()); |
| | | moneyCardUseFlow.setCarUseId(czVo.getCardId()); |
| | |
| | | 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()); |
| | |
| | | @Override |
| | | public void refundOrderMoney(SysOrder pageOrder) { |
| | | SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); |
| | | // 插入订单流水 |
| | | |
| | | // 修改订单状态 |
| | | changeOrderStatu(pageOrder); |
| | | |
| | | List<SysOrderItem> returnItems = new ArrayList<>(); |
| | |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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; |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | /*********************以下为项目使用情况操作***********************/ |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 退款 |
| | | * |
| | | * @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); |
| | | } |
| | | |
| | | /** |
| | | * 设置为有效套餐 |
| | |
| | | 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 |
| | |
| | | } |
| | | |
| | | @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); |
| | | } |
| | | } |
| | |
| | | * @return |
| | | */ |
| | | @Override |
| | | public int addVipDefaultCard(Long vipId){ |
| | | public MoneyCardUse addVipDefaultCard(Long vipId){ |
| | | MoneyCardUse defaultCardUse=new MoneyCardUse(); |
| | | defaultCardUse.setVipId(vipId); |
| | | defaultCardUse.setCardName("储值卡"); |
| | |
| | | defaultCardUse.setGiftMoney(0D); |
| | | defaultCardUse.setSource("-"); |
| | | defaultCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); |
| | | return moneyCardUseDao.insert(defaultCardUse); |
| | | moneyCardUseDao.insert(defaultCardUse); |
| | | return defaultCardUse; |
| | | |
| | | } |
| | | |
New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | if(!AppConstance.ZONGDIAN.equals(sysUsers.getShopName())){ |
| | | param.put("shopId",sysUsers.getShopId()); |
| | | } |
| | | |
| | | return AjaxResult.buildSuccessInstance(beauticianStateDao.selectItemDetail(param), |
| | | beauticianStateDao.selectItemDetailTotal(param)); |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | // 在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)); |
| | |
| | | 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.*; |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| | | }); |
| | |
| | | <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" |
| | |
| | | select |
| | | a.id, |
| | | a.order_item_id, |
| | | d.id AS orderId, |
| | | a.use_total, |
| | | a.last_count, |
| | | a.real_money, |
| | |
| | | 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} |
| | |
| | | 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} |
| | |
| | | <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, |
| | |
| | | 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 |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | <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"/> |
| | |
| | | <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 !='' "> |
| | |
| | | <!-- 查询总条数 --> |
| | | <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> |
| | |
| | | body, body.full-height-layout #page-wrapper, body.full-height-layout #wrapper, |
| | | html { |
| | | height: 100%; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | #page-wrapper { |
| | |
| | | line-height: 50px; |
| | | } |
| | | |
| | | /*===========鑷畾涔夋牱寮廵nd==============================*/ |
| | | /*===========鑷畾涔夋牱寮廵nd==============================*/ |
| | | /** |
| | | * 覆盖elementui一些无用样式 |
| | | */ |
| | | .el-form-item{ |
| | | margin-bottom:10px !important; |
| | | } |
| | |
| | | return root.children; |
| | | }, |
| | | |
| | | |
| | | /** json对象转Url参数**/ |
| | | jsonToUrlParam:function(obj){ |
| | | let str=""; |
| | | for(item in obj){ |
| | | if(obj[item]){ |
| | | str+=item+"="+obj[item]+"&" |
| | | } |
| | | } |
| | | return str; |
| | | } |
| | | |
| | | |
| | | |
New file |
| | |
| | | <!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> |
| | |
| | | <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> |
| | |
| | | //有删除权限 |
| | | var delUrl=""; |
| | | myGrid=MGrid.initGrid({ |
| | | url:basePath+"/admin/serviceStatistics/showList" |
| | | url:basePath+"/admin/serviceStatistics/showList", |
| | | sortName:"yy_time", |
| | | sortOrder:"desc" |
| | | }); |
| | | }); |
| | | |
| | |
| | | <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> |
| | | |
| | |
| | | }); |
| | | }, |
| | | methods : { |
| | | //修改充值金额同步修改业绩 |
| | | changeRechargeMoney(){ |
| | | let aMoeny=(this.rechargeMoney/this.achieveList.length).toFixed(2); |
| | | this.achieveList.forEach(item=>{ |
| | | item.achieveMoney=aMoeny; |
| | | }); |
| | | }, |
| | | submitRecharge() { |
| | | let _this = this; |
| | | |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | 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> |
| | |
| | | </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> |
| | |
| | | } |
| | | }, |
| | | 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: { |
| | |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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 |
New file |
| | |
| | | <!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> |
| | |
| | | <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> |
| | |
| | | //有删除权限 |
| | | var delUrl=""; |
| | | myGrid=MGrid.initGrid({ |
| | | url:basePath+"/admin/serviceStatistics/showList" |
| | | url:basePath+"/admin/serviceStatistics/showList", |
| | | sortName:"yy_time", |
| | | sortOrder:"desc" |
| | | }); |
| | | }); |
| | | |