package com.matrix.system.shopXcx.api.action;
|
|
import com.matrix.component.rabbitmq.RabiitMqTemplate;
|
import com.matrix.component.redis.RedisUserLoginUtils;
|
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.util.CollectionUtils;
|
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 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.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @author jiangyouyao
|
* @description 预约信息action
|
* @date 2019-06-06 10:15
|
*/
|
@CrossOrigin(origins = "*", maxAge = 3600)
|
@Controller
|
@RequestMapping(value = "wxapi/yuyue")
|
public class YuyueAction {
|
|
@Autowired
|
SysShopInfoDao shopInfoDao;
|
|
@Autowired
|
private SysVipInfoDao vipInfoDao;
|
|
@Autowired
|
private OnlinebookingDao onlinebookingDao;
|
@Autowired
|
private SysProjServicesService projServicesService;
|
|
@Autowired
|
private SysProjServicesDao projServicesDao;
|
|
@Autowired
|
private SysBeauticianStateService sysBeauticianStateService;
|
|
@Autowired
|
RedisUserLoginUtils redisUserLoginUtils;
|
|
@Autowired
|
ShopProductDao productDao;
|
|
@Autowired
|
SysUsersDao staffInfoDao;
|
|
@Autowired
|
SysVipInfoDao sysVipInfoDao;
|
|
@Autowired
|
RabiitMqTemplate rabiitMqTemplate;
|
|
@Autowired
|
SysProjUseDao projUseDao;
|
|
@Autowired
|
ShopSkuDao skuDao;
|
|
@Autowired
|
ShoppingGoodsAssembleDao shoppingGoodsAssembleDao;
|
|
@Autowired
|
ShoppingGoodsDao shoppingGoodsDao;
|
@Autowired
|
ScoreVipDetailService scoreVipDetailService;
|
|
@Autowired
|
private BusParameterSettingsDao busParameterSettingsDao;
|
|
@Value("${evn}")
|
private String evn;
|
/**
|
* 获取门店列表
|
*
|
* @return
|
*/
|
@RequestMapping(value = "/getShopList/{locX}/{locY}")
|
public @ResponseBody
|
AjaxResult getShopList(@PathVariable("locX") String locX, @PathVariable("locY") String locY) {
|
SysShopInfo sysShopInfo=new SysShopInfo();
|
sysShopInfo.setIsOpenNet(SysShopInfo.OPEN_NET);
|
sysShopInfo.setCompanyId(HostInterceptor.getCompanyId());
|
List<SysShopInfo> shopList = shopInfoDao.selectByModel(sysShopInfo);
|
|
if ("X".equals(locX) || "Y".equals(locY)) {
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, shopList);
|
}
|
|
Double distance = null;
|
SysShopInfo nearestShop = null;
|
|
AjaxResult ajaxResult = new AjaxResult("200", shopList);
|
if (CollectionUtils.isNotEmpty(shopList)) {
|
for (SysShopInfo shopInfo : shopList) {
|
Double shopX = Double.parseDouble(shopInfo.getLongitude());
|
Double shopY = Double.parseDouble(shopInfo.getLatitude());
|
Double disResult = LocationUtil.getDistance(Double.parseDouble(locX), Double.parseDouble(locY), shopX, shopY);
|
shopInfo.setDistance(new BigDecimal(disResult).setScale(1, BigDecimal.ROUND_HALF_UP));
|
if (distance == null || distance > disResult) {
|
distance = disResult;
|
nearestShop = shopInfo;
|
}
|
}
|
}
|
ajaxResult.putInMap("shopInfo", nearestShop);
|
return ajaxResult;
|
|
}
|
|
@RequestMapping(value = "/findShopInfoById/{id}")
|
@ResponseBody
|
public AjaxResult findShopInfoById(@PathVariable Long id) {
|
SysShopInfo shopInfo = shopInfoDao.selectById(id);
|
AjaxResult ajaxResult = new AjaxResult(AjaxResult.STATUS_SUCCESS,"获取成功");
|
ajaxResult.putInMap("shopInfo", shopInfo);
|
return ajaxResult;
|
}
|
|
|
/**
|
* 获取预约时间表
|
*
|
* @return
|
*/
|
@RequestMapping(value = "/getTimeList")
|
public @ResponseBody
|
AjaxResult getTimeList() {
|
return new AjaxResult("200", YYmonth.buildMonth(3));
|
|
}
|
|
|
/**
|
* 获取预约日期
|
*
|
* @return
|
*/
|
@RequestMapping(value = "/getYYDayAndWeek")
|
public @ResponseBody
|
AjaxResult getYYDayAndWeek(String time) {
|
Date date = DateUtil.stringToDate(time, DateUtil.DATE_FORMAT_DD);
|
List<YYDayOfWeek> yyDayOfWeeks = YYDayOfWeek.build(date, 4);
|
return new AjaxResult("200", yyDayOfWeeks);
|
}
|
|
|
@Resource
|
private SysWorkBeatuistaffService sysWorkBeatuistaffService;
|
@Resource
|
private com.matrix.system.common.service.SysUsersService SysUsersService;
|
@Autowired
|
private SysWorktimeService sysWorkTimeService;
|
|
/**
|
* 查询空闲美疗师
|
*/
|
@RequestMapping(value = "/getPaiBanBeauticianList")
|
public @ResponseBody
|
AjaxResult showPaiBanBeauticianList(@RequestBody SysBeauticianState sysBeauticianState) {
|
if(StringUtils.isNotBlank(sysBeauticianState.getBbeginTime())&&
|
StringUtils.isNotBlank(sysBeauticianState.getEendTime())){
|
sysBeauticianState.setBeginTime(DateUtil.stringToDate(sysBeauticianState.getBbeginTime(), DateUtil.DATE_FORMAT_MM));
|
sysBeauticianState.setEndTime(DateUtil.stringToDate(sysBeauticianState.getEendTime(), DateUtil.DATE_FORMAT_MM));
|
String codes = DateUtil.dateToString(sysBeauticianState.getBeginTime(),DateUtil.DATE_FORMAT_NO_SPLITE_DD);
|
List<SysUsers> staffs = SysUsersService.findByCodeBeaStateShop(sysBeauticianState.getShopId(),
|
sysBeauticianState, codes);
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, staffs);
|
}else{
|
return AjaxResult.buildSuccessInstance("");
|
}
|
|
|
}
|
|
@Resource
|
private SysProjUseService projUseService;
|
|
/**
|
* 获取用户已购项目列表
|
*
|
* @return
|
*/
|
@RequestMapping(value = "/getUserPro/{phone}")
|
@ResponseBody
|
public
|
AjaxResult getUserPro(@PathVariable String phone) {
|
SysVipInfo vipInfo = vipInfoDao.selectByPhone(phone,HostInterceptor.getCompanyId());
|
|
if (vipInfo == null) {
|
throw new GlobleException("会员不存在");
|
}
|
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;
|
}
|
|
|
@Autowired
|
private CodeService codeService;
|
|
/**
|
* 创建预约订单
|
*
|
* @param onlinebooking
|
* @return
|
*/
|
@RequestMapping(value = "/createServiceOrder")
|
public @ResponseBody
|
AjaxResult createServiceOrder(@RequestBody Onlinebooking onlinebooking) {
|
SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
|
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, "下单失败!");
|
}
|
}
|
|
|
/**
|
* 根据id查询预约订单的详情
|
*
|
* @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("id") Long id) {
|
SysProjServices projServices = projServicesService.findById(id);
|
if (projServices == null) {
|
return AjaxResult.buildFailInstance("服务单不存在");
|
}
|
ErpServiceOrderListVo serviceOrder = projServicesDao.findWxServiceOrderById(id);
|
AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("获取成功");
|
ajaxResult.putInMap("detail", serviceOrder);
|
return ajaxResult;
|
}
|
|
|
|
/**
|
* 查询服务单
|
* @param orderListDto
|
* @return
|
*/
|
@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 = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
|
orderListDto.setVipId(sysVipInfo.getId());
|
List<ErpServiceOrderListVo> apiServiceOrderListInPage = projServicesDao.findWxServiceOrderList(orderListDto);
|
return AjaxResult.buildSuccessInstance(apiServiceOrderListInPage,"查询成功");
|
}
|
|
/**
|
* 取消预约订单
|
*
|
* @param
|
* @return
|
*/
|
@ApiOperation(value = "取消预约", notes = "取消预约")
|
@GetMapping(value = "/cancelOrderById/{id}")
|
public @ResponseBody
|
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 {
|
return new AjaxResult(AjaxResult.STATUS_FAIL, "取消预约失败");
|
}
|
}
|
|
|
@ApiOperation(value = "服务单评论", notes = "服务单评论")
|
@PostMapping(value = "/commentService")
|
public @ResponseBody
|
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, "评论失败");
|
}
|
}
|
|
|
|
|
|
}
|