935090232@qq.com
2022-02-22 bbe0a2fd03063316e50cf141986bda984599bbda
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/YuyueAction.java
@@ -1,42 +1,50 @@
package com.matrix.system.shopXcx.api.action;
import com.alibaba.fastjson.JSONObject;
import com.matrix.biz.bean.BizUser;
import com.matrix.biz.dao.BizUserDao;
import com.matrix.component.rabbitmq.RabiitMqTemplate;
import com.matrix.component.redis.RedisUserLoginUtils;
import com.matrix.system.common.init.UserCacheManager;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.VerifyResult;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.system.app.mapper.SysProjUseMapper;
import com.matrix.system.app.vo.ServiceProductListVo;
import com.matrix.system.app.vo.ServiceProjVo;
import com.matrix.system.app.vo.ServiceTcVo;
import com.matrix.system.common.bean.BusParameterSettings;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.dao.SysUsersDao;
import com.matrix.system.common.interceptor.HostInterceptor;
import com.matrix.system.common.tools.LocationUtil;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.plugin.message.StringUtil;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.plugin.util.DateUtils;
import com.matrix.system.hive.service.CodeService;
import com.matrix.system.hive.service.SysProjUseService;
import com.matrix.system.hive.service.SysWorkBeatuistaffService;
import com.matrix.system.hive.service.SysWorktimeService;
import com.matrix.system.shopXcx.bean.ShopProduct;
import com.matrix.system.hive.service.*;
import com.matrix.system.score.constant.ScoreSettingConstant;
import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
import com.matrix.system.shopXcx.api.dto.ErpServiceCommentDto;
import com.matrix.system.shopXcx.api.dto.ErpServiceOrderListDto;
import com.matrix.system.shopXcx.api.vo.ErpServiceOrderListVo;
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 com.matrix.system.shopXcx.mqTask.MQTaskRouting;
import com.matrix.system.shopXcx.shopEnum.TemplateMsgType;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * @author jiangyouyao
@@ -52,13 +60,21 @@
    SysShopInfoDao shopInfoDao;
    @Autowired
    private SysVipInfoDao vipDap;
    private SysVipInfoDao vipInfoDao;
    @Autowired
    private OnlinebookingDao onlinebookingDao;
    @Autowired
    private SysProjServicesService projServicesService;
    @Autowired
    RedisUserLoginUtils redisUserLoginUtils;
    private  SysProjServicesDao projServicesDao;
    @Autowired
    private  SysBeauticianStateService sysBeauticianStateService;
    @Autowired
    private UserCacheManager userCacheManager;
    @Autowired
    ShopProductDao productDao;
@@ -67,18 +83,25 @@
    SysUsersDao staffInfoDao;
    @Autowired
    BizUserDao bizUserDao;
    SysVipInfoDao sysVipInfoDao;
    @Autowired
    RabiitMqTemplate rabiitMqTemplate;
    SysProjUseDao projUseDao;
    @Autowired
    ShopSkuDao skuDao;
    @Autowired
    ShoppingGoodsAssembleDao shoppingGoodsAssembleDao;
    @Autowired
    ShoppingGoodsDao shoppingGoodsDao;
    @Autowired
    ScoreVipDetailService scoreVipDetailService;
    @Autowired
    private BusParameterSettingsDao busParameterSettingsDao;
    @Value("${evn}")
    private String evn;
@@ -194,48 +217,44 @@
     * @return
     */
    @RequestMapping(value = "/getUserPro/{phone}")
    public @ResponseBody
    @ResponseBody
    public
    AjaxResult getUserPro(@PathVariable String phone) {
        SysVipInfo vipInfo = vipDap.selectByPhone(phone);
        // 根据时间获取一段排班码
        Map<Object, Object> taocanProjMap = new HashMap<>();
        List<UserProjInfo> userProjInfoList = new ArrayList();
        SysProjUse sysProjUse = new SysProjUse();
        sysProjUse.setVipId(vipInfo.getId());
        sysProjUse.setIsOver(Dictionary.DELETED_N);
        sysProjUse.setIsOver(Dictionary.DELETED_N);
        sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
        // 查询出该会员的所有可消耗的选择
        List<SysProjUse> sysProjUseList = projUseService.findByModel(sysProjUse);
        for (int i = 0; i < sysProjUseList.size(); i++) {
            if (sysProjUseList.get(i).getTaocanId() != null) {
                String flag = sysProjUseList.get(i).getPlatformFlag();
                if (taocanProjMap.keySet().contains(flag)) {
                    ((UserProjInfo) taocanProjMap.get(flag)).getChildPro().add(coversion(sysProjUseList.get(i)));
                } else {
                    SysProjUse pru = sysProjUseList.get(i);
                    UserProjInfo taocan = new UserProjInfo();
                    taocan.setId(pru.getId());
                    taocan.setName(pru.getProjName());
                    taocan.setType(pru.getType());
                    if (pru.getSurplusCount() > 10000) {
                        taocan.setSurplusCount("不限");
                    } else {
                        taocan.setSurplusCount(pru.getSurplusCount() + "");
                    }
                    taocan.setChildPro(new ArrayList<UserProjInfo>());
                    taocan.getChildPro().add(coversion(pru));
                    taocanProjMap.put(flag, taocan);
                }
            } else {
                userProjInfoList.add(coversion(sysProjUseList.get(i)));
            }
        SysVipInfo vipInfo = vipInfoDao.selectByPhone(phone,HostInterceptor.getCompanyId());
        if (vipInfo == null) {
            throw new GlobleException("会员不存在");
        }
        AjaxResult result = new AjaxResult();
        result.setStatus("200");
        result.setMapInfo(taocanProjMap);
        result.setRows(userProjInfoList);
        return result;
        ServiceProductListVo productListVo = new ServiceProductListVo();
        productListVo.setName(vipInfo.getVipName());
        productListVo.setVipId(vipInfo.getId());
        SysProjUse queryUse = new SysProjUse();
        queryUse.setVipId(vipInfo.getId());
        queryUse.setType(Dictionary.SHOPPING_GOODS_TYPE_XM);
        queryUse.setTaocanId(-1L);
        queryUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
        List<SysProjUse> projList = projUseService.findInPage(queryUse, null);
        List<ServiceProjVo> serviceProjVos = SysProjUseMapper.INSTANCE.entityListToProjVoList(projList);
        queryUse.setTaocanId(null);
        queryUse.setType(Dictionary.SHOPPING_GOODS_TYPE_TC);
        List<SysProjUse> taoCanList = projUseService.findInPage(queryUse, null);
        List<ServiceTcVo> serviceTcVos = SysProjUseMapper.INSTANCE.entityListToTcVoList(taoCanList);
        if (CollectionUtils.isNotEmpty(serviceTcVos)) {
            serviceTcVos.forEach(item -> {
                List<SysProjUse> sysProjUses = projUseService.selectTaocanProjUse(item.getId(), queryUse.getStatus());
                List<ServiceProjVo> taocanProj = SysProjUseMapper.INSTANCE.entityListToProjVoList(sysProjUses);
                item.setProj(taocanProj);
            });
        }
        productListVo.setProj(serviceProjVos);
        productListVo.setComposeProj(serviceTcVos);
        AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("获取成功");
        ajaxResult.putInMap("proj", productListVo);
        return ajaxResult;
    }
@@ -251,23 +270,60 @@
    @RequestMapping(value = "/createServiceOrder")
    public @ResponseBody
    AjaxResult createServiceOrder(@RequestBody Onlinebooking onlinebooking) {
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        bizUser = bizUserDao.findByOpenId(bizUser.getOpenId());
        SysVipInfo vipInfo = vipDap.selectByPhone(bizUser.getPhoneNumber());
        onlinebooking.setOrderNo(codeService.getServiceOrderCode());
        onlinebooking.setVipName(vipInfo.getVipName());
        onlinebooking.setVipId(vipInfo.getId());
        onlinebooking.setBizUserId(bizUser.getOpenId());
        onlinebooking.setStatus(Dictionary.ONLINEBOOKING_DFW);
        onlinebooking.setCreateTime(new Date());
        onlinebooking.setTime(DateUtil.stringToDate(onlinebooking.getTimeStr(), DateUtil.DATE_FORMAT_MM));
        onlinebookingDao.insert(onlinebooking);
        //发送消息通知
        JSONObject msg = new JSONObject();
        msg.put("templateMsgType", TemplateMsgType.APPOINTMENT_SUCCESS.getCode());
        msg.put("content", onlinebooking.getId());
        rabiitMqTemplate.sendMsg(MQTaskRouting.SEND_TEMPLATE_MSG+evn, msg.toJSONString());
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, Collections.singletonList(onlinebooking));
        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
        SysVipInfo vipInfo = vipInfoDao.selectByPhone(sysVipInfo.getPhone(),HostInterceptor.getCompanyId());
        SysProjUse sysProjUse = projUseDao.selectById(Long.parseLong(onlinebooking.getProductId() + ""));
        Date yyTime = DateUtil.stringToDate(onlinebooking.getTimeStr(), DateUtil.DATE_FORMAT_MM);
        SysProjServices sysProjServices = new SysProjServices();
        sysProjServices.setCompanyId(vipInfo.getCompanyId());
        sysProjServices.setShopId(onlinebooking.getShopId());
        sysProjServices.setVipId(vipInfo.getId());
        sysProjServices.setYyTime(yyTime);
        sysProjServices.setRemark(onlinebooking.getRemark());
        List<SysBeauticianState> sysBeauticianStates = new ArrayList<>();
        SysBeauticianState sysBeauticianState = new SysBeauticianState();
        sysBeauticianState.setPuseId(sysProjUse.getId());
        sysBeauticianState.setProjUse(sysProjUse);
        sysBeauticianState.setCount(1);
        sysBeauticianState.setBeginTime(yyTime);
        int timeLength=30;
        if(sysProjUse.getTimeLength()!=null){
            timeLength=sysProjUse.getTimeLength();
        }
        sysBeauticianState.setEndTime(DateUtil.getDateAfterMinute(yyTime, timeLength));
        if(onlinebooking.getStaffId()!=null){
            sysBeauticianState.setStaffId(Long.parseLong(onlinebooking.getStaffId()+""));
        }
        sysBeauticianStates.add(sysBeauticianState);
        sysProjServices.setServiceItems(sysBeauticianStates);
        //检测欠款
        VerifyResult arrearsVerifyResult = projServicesService.checkArrears(sysProjServices);
        if (arrearsVerifyResult.isError()) {
            return new AjaxResult(AjaxResult.STATUS_FAIL, arrearsVerifyResult.getMsg());
        }
        //检测余次
        VerifyResult balanceverifyResult = projServicesService.checkBalance(sysProjServices);
        if (balanceverifyResult.isError()) {
            return new AjaxResult(AjaxResult.STATUS_FAIL, balanceverifyResult.getMsg());
        }
        sysProjServices.setState(Dictionary.SERVICE_STATU_DQR);
        SysProjServices newSysProjServices = projServicesService.addSysProjServices(sysProjServices);
        if (newSysProjServices != null) {
            //添加用户积分
            BusParameterSettings parameterSetting = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.RESERVATION_SERVICE_SHOP, sysVipInfo.getCompanyId());
            scoreVipDetailService.addScoreByParamSetting(sysVipInfo.getId(), null,null, newSysProjServices.getId(),
                    ScoreVipDetail.SCORE_VIP_TYPE_JOIN_ACTIVE,"预约送积分", parameterSetting);
            return AjaxResult.buildSuccessInstance("下单成功");
        } else {
            return new AjaxResult(AjaxResult.STATUS_FAIL, "下单失败!");
        }
    }
@@ -277,52 +333,42 @@
     * @param id
     * @return
     */
    @ApiOperation(value = " 根据id查询预约订单的详情", notes = " 根据id查询预约订单的详情")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = ErpServiceOrderListVo.class)
    })
    @RequestMapping(value = "/getServiceOrderById/{id}")
    public @ResponseBody
    AjaxResult getServiceOrderById(@PathVariable Long id) {
        Onlinebooking onlinebooking = onlinebookingDao.selectById(id);
        ShopProduct shopProduct = productDao.selectById(onlinebooking.getProductId());
        onlinebooking.setShopProduct(shopProduct);
        if (onlinebooking.getStaffId() != null) {
            SysUsers shopstaffInfo = staffInfoDao.selectById(Long.parseLong(onlinebooking.getStaffId() + ""));
            onlinebooking.setStaffInfo(shopstaffInfo);
    AjaxResult getServiceOrderById(@PathVariable("id") Long id) {
        SysProjServices projServices = projServicesService.findById(id);
        if (projServices == null) {
            return AjaxResult.buildFailInstance("服务单不存在");
        }
        SysShopInfo shopInfo = shopInfoDao.selectById(onlinebooking.getShopId());
        onlinebooking.setShopInfo(shopInfo);
        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, "查询成功");
        result.putInMap("serviceOrder", onlinebooking);
        return result;
        ErpServiceOrderListVo serviceOrder = projServicesDao.findWxServiceOrderById(id);
        AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("获取成功");
        ajaxResult.putInMap("detail", serviceOrder);
        return ajaxResult;
    }
    /**
     * 订单列表查询
     *
     * 查询服务单
     * @param orderListDto
     * @return
     */
    @RequestMapping(value = "/getServiceOrderList")
    public @ResponseBody
    AjaxResult getServiceOrderList(@RequestBody Onlinebooking onlinebooking) {
        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        onlinebooking.setBizUserId(bizUser.getOpenId());
        List<Onlinebooking> list = onlinebookingDao.selectInPageForWx(onlinebooking);
        //相关数据赋值
        list.stream().forEach(order -> {
            ShopProduct shopProduct = productDao.selectById(order.getProductId());
            order.setShopProduct(shopProduct);
            if (order.getStaffId() != null) {
                SysUsers shopstaffInfo = staffInfoDao.selectById(Long.parseLong(order.getStaffId() + ""));
                order.setStaffInfo(shopstaffInfo);
            }
            SysShopInfo shopInfo = shopInfoDao.selectById(order.getShopId());
            order.setShopInfo(shopInfo);
        });
        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, "查询成功");
        result.setRows(list);
        return result;
    @ApiOperation(value = "查询服务单列表", notes = "查询服务单列表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = ErpServiceOrderListVo.class)
    })
    @PostMapping(value = "/getServiceOrderList")
    @ResponseBody
    public AjaxResult findServiceOrderList(@RequestBody @Validated ErpServiceOrderListDto orderListDto) {
        SysVipInfo sysVipInfo = userCacheManager.getLoginUser();
        orderListDto.setVipId(sysVipInfo.getId());
        List<ErpServiceOrderListVo> apiServiceOrderListInPage = projServicesDao.findWxServiceOrderList(orderListDto);
        return AjaxResult.buildSuccessInstance(apiServiceOrderListInPage,"查询成功");
    }
    /**
     * 取消预约订单
@@ -330,53 +376,38 @@
     * @param
     * @return
     */
    @RequestMapping(value = "/cancelOrderById")
    @ApiOperation(value = "取消预约", notes = "取消预约")
    @GetMapping(value = "/cancelOrderById/{id}")
    public @ResponseBody
    AjaxResult cancelOrderById(@RequestBody Onlinebooking onlinebooking) {
        AjaxResult result = new AjaxResult();
        if (onlinebooking.getId() == null) {
            result.setStatus(AjaxResult.STATUS_FAIL);
            result.setInfo("请求参数错误");
    AjaxResult cancelOrderById(@PathVariable Long id) {
        SysProjServices services = new SysProjServices();
        services.setId(id);
        int i = projServicesService.modifyCancelProjServices(services);
        if (i > 0) {
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "取消预约成功");
        } else {
            onlinebooking.setStatus(Dictionary.ONLINEBOOKING_YQX);
            onlinebookingDao.update(onlinebooking);
            result.setStatus(AjaxResult.STATUS_SUCCESS);
            result.setInfo("订单取消成功");
            return new AjaxResult(AjaxResult.STATUS_FAIL, "取消预约失败");
        }
        return result;
    }
    /**
     * 删除订单
     *
     * @param
     * @return
     */
    @RequestMapping(value = "/removeOrderById/{id}")
    @ApiOperation(value = "服务单评论", notes = "服务单评论")
    @PostMapping(value = "/commentService")
    public @ResponseBody
    AjaxResult removeOrderById(@PathVariable Long id) {
        onlinebookingDao.deleteById(id);
        AjaxResult result = new AjaxResult();
        result.setStatus(AjaxResult.STATUS_SUCCESS);
        result.setInfo("删除成功");
        return result;
    AjaxResult commentService(@RequestBody @Validated ErpServiceCommentDto commentDto) {
        SysProjServices services = new SysProjServices();
        services.setId(commentDto.getId());
        services.setComment(commentDto.getComment());
        int i = projServicesDao.update(services);
        if (i > 0) {
            return new AjaxResult(AjaxResult.STATUS_SUCCESS, "评论成功");
        } else {
            return new AjaxResult(AjaxResult.STATUS_FAIL, "评论失败");
        }
    }
    private UserProjInfo coversion(SysProjUse pUse) {
        UserProjInfo projInfo = new UserProjInfo();
        projInfo.setId(pUse.getId());
        projInfo.setName(shoppingGoodsDao.selectById(pUse.getProjId()).getName());
        projInfo.setSurplusCount(pUse.getSurplusCount() + "");
        projInfo.setType(pUse.getType());
        return projInfo;
    }
    private int dateToCodeInt(Date date) {
        return Integer.parseInt(DateUtils.dateToString(date, DateUtils.HHmm));
    }
}