package com.java110.store.cmd.reserveOrder; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.java110.core.annotation.Java110Cmd; import com.java110.core.annotation.Java110Transactional; import com.java110.core.context.ICmdDataFlowContext; import com.java110.core.event.cmd.Cmd; import com.java110.core.event.cmd.CmdEvent; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.community.CommunitySpacePersonTimeDto; import com.java110.dto.owner.OwnerDto; import com.java110.dto.reserve.ReserveGoodsConfirmOrderDto; import com.java110.dto.reserve.ReserveGoodsDto; import com.java110.dto.reserve.ReserveGoodsOrderDto; import com.java110.dto.reserve.ReserveGoodsOrderTimeDto; import com.java110.dto.user.UserDto; import com.java110.intf.store.IReserveGoodsConfirmOrderV1InnerServiceSMO; import com.java110.intf.store.IReserveGoodsOrderTimeV1InnerServiceSMO; import com.java110.intf.store.IReserveGoodsOrderV1InnerServiceSMO; import com.java110.intf.store.IReserveGoodsV1InnerServiceSMO; import com.java110.intf.user.IOwnerV1InnerServiceSMO; import com.java110.intf.user.IUserV1InnerServiceSMO; import com.java110.po.reserveGoodsConfirmOrder.ReserveGoodsConfirmOrderPo; import com.java110.po.reserveGoodsOrder.ReserveGoodsOrderPo; import com.java110.po.reserveGoodsOrderTime.ReserveGoodsOrderTimePo; import com.java110.utils.exception.CmdException; import com.java110.utils.util.Assert; import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.DateUtil; import com.java110.utils.util.StringUtil; import com.java110.vo.ResultVo; import org.springframework.beans.factory.annotation.Autowired; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.List; /** * 就餐 处理类 */ @Java110Cmd(serviceCode = "reserveOrder.doDining") public class DoDiningCmd extends Cmd { public static final String CODE_PREFIX_ID = "10"; @Autowired private IReserveGoodsOrderV1InnerServiceSMO reserveGoodsOrderV1InnerServiceSMOImpl; @Autowired private IReserveGoodsOrderTimeV1InnerServiceSMO reserveGoodsOrderTimeV1InnerServiceSMOImpl; @Autowired private IReserveGoodsV1InnerServiceSMO reserveGoodsV1InnerServiceSMOImpl; @Autowired private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl; @Autowired private IReserveGoodsConfirmOrderV1InnerServiceSMO reserveGoodsConfirmOrderV1InnerServiceSMOImpl; @Autowired private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl; @Override public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区"); Assert.hasKeyAndValue(reqJson, "qrCode", "未包含二维码"); Assert.hasKeyAndValue(reqJson, "goodsId", "未包含商品"); String userId = userV1InnerServiceSMOImpl.getUserIdByQrCode(reqJson.getString("qrCode")); if (StringUtil.isEmpty(userId)) { throw new CmdException("二维码过期"); } UserDto userDto = new UserDto(); userDto.setUserId(userId); List userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto); Assert.listOnlyOne(userDtos, "用户不存在"); // todo 判断用户是否为这个小区业主 OwnerDto ownerDto = new OwnerDto(); ownerDto.setCommunityId(reqJson.getString("communityId")); ownerDto.setLink(userDtos.get(0).getTel()); int count = ownerV1InnerServiceSMOImpl.queryOwnersCount(ownerDto); if (count < 1) { throw new CmdException("业主不存在"); } reqJson.put("userId", userId); ReserveGoodsDto reserveGoodsDto = new ReserveGoodsDto(); reserveGoodsDto.setGoodsId(reqJson.getString("goodsId")); List reserveGoodsDtos = reserveGoodsV1InnerServiceSMOImpl.queryReserveGoodss(reserveGoodsDto); Assert.listOnlyOne(reserveGoodsDtos, "就餐不存在"); ReserveGoodsOrderTimeDto reserveGoodsOrderTimeDto = null; int flag = 0; int quantity = 0; Calendar calendar = Calendar.getInstance(); reserveGoodsOrderTimeDto = new ReserveGoodsOrderTimeDto(); reserveGoodsOrderTimeDto.setCommunityId(reqJson.getString("communityId")); reserveGoodsOrderTimeDto.setAppointmentTime(DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate())); reserveGoodsOrderTimeDto.setHours(calendar.get(Calendar.HOUR) + ""); reserveGoodsOrderTimeDto.setGoodsId(reqJson.getString("goodsId")); reserveGoodsOrderTimeDto.setPersonTel(userDtos.get(0).getTel()); flag = reserveGoodsOrderTimeV1InnerServiceSMOImpl.queryReserveGoodsOrderTimesCount(reserveGoodsOrderTimeDto); if (flag > 0) { throw new CmdException(reserveGoodsOrderTimeDto.getAppointmentTime() + "," + reserveGoodsOrderTimeDto.getHours() + "已经就餐"); } reserveGoodsOrderTimeDto = new ReserveGoodsOrderTimeDto(); reserveGoodsOrderTimeDto.setCommunityId(reqJson.getString("communityId")); reserveGoodsOrderTimeDto.setAppointmentTime(DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate())); reserveGoodsOrderTimeDto.setGoodsId(reqJson.getString("goodsId")); quantity = reserveGoodsOrderTimeV1InnerServiceSMOImpl.queryReserveGoodsOrderTimesCount(reserveGoodsOrderTimeDto); if (quantity > Integer.parseInt(reserveGoodsDtos.get(0).getHoursMaxQuantity())) { throw new CmdException("就餐数量超过设定数量"); } } @Override @Java110Transactional public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { //校验是否可以预约 ReserveGoodsDto reserveGoodsDto = new ReserveGoodsDto(); reserveGoodsDto.setGoodsId(reqJson.getString("goodsId")); List reserveGoodsDtos = reserveGoodsV1InnerServiceSMOImpl.queryReserveGoodss(reserveGoodsDto); Assert.listOnlyOne(reserveGoodsDtos, "就餐不存在"); UserDto userDto = new UserDto(); userDto.setUserId(reqJson.getString("userId")); List userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto); Assert.listOnlyOne(userDtos, "用户不存在"); ReserveGoodsOrderPo reserveGoodsOrderPo = new ReserveGoodsOrderPo(); reserveGoodsOrderPo.setOrderId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID)); reserveGoodsOrderPo.setGoodsId(reqJson.getString("goodsId")); reserveGoodsOrderPo.setCommunityId(reqJson.getString("communityId")); reserveGoodsOrderPo.setAppointmentTime(DateUtil.getFormatTimeStringB(DateUtil.getCurrentDate())); reserveGoodsOrderPo.setPayWay("1"); // 现金支付 reserveGoodsOrderPo.setPersonId(userDtos.get(0).getUserId()); reserveGoodsOrderPo.setPersonName(userDtos.get(0).getName()); reserveGoodsOrderPo.setPersonTel(userDtos.get(0).getTel()); reserveGoodsOrderPo.setReceivableAmount(reserveGoodsDtos.get(0).getPrice()); reserveGoodsOrderPo.setReceivedAmount("0"); reserveGoodsOrderPo.setType(reserveGoodsDtos.get(0).getType()); if (StringUtil.isEmpty(reserveGoodsOrderPo.getExtOrderId())) { reserveGoodsOrderPo.setExtOrderId("-1"); } reserveGoodsOrderPo.setState(ReserveGoodsOrderDto.STATE_W); int flag = reserveGoodsOrderV1InnerServiceSMOImpl.saveReserveGoodsOrder(reserveGoodsOrderPo); if (flag < 1) { throw new CmdException("保存数据失败"); } //预约时间 ReserveGoodsOrderTimePo reserveGoodsOrderTimePo = null; reserveGoodsOrderTimePo = new ReserveGoodsOrderTimePo(); reserveGoodsOrderTimePo.setCommunityId(reserveGoodsOrderPo.getCommunityId()); reserveGoodsOrderTimePo.setGoodsId(reserveGoodsOrderPo.getGoodsId()); reserveGoodsOrderTimePo.setOrderId(reserveGoodsOrderPo.getOrderId()); Calendar calendar = Calendar.getInstance(); reserveGoodsOrderTimePo.setHours(calendar.get(Calendar.HOUR) + ""); reserveGoodsOrderTimePo.setQuantity("1"); reserveGoodsOrderTimePo.setTimeId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID)); reserveGoodsOrderTimePo.setState(ReserveGoodsOrderTimeDto.STATE_WAIT_CONFIRM); reserveGoodsOrderTimeV1InnerServiceSMOImpl.saveReserveGoodsOrderTime(reserveGoodsOrderTimePo); // todo 核销预约 ReserveGoodsOrderTimeDto reserveGoodsOrderTimeDto = new ReserveGoodsOrderTimeDto(); reserveGoodsOrderTimeDto.setTimeId(reserveGoodsOrderTimePo.getTimeId()); reserveGoodsOrderTimeDto.setCommunityId(reqJson.getString("communityId")); reserveGoodsOrderTimeDto.setState(CommunitySpacePersonTimeDto.STATE_WAIT_CONFIRM); List reserveGoodsOrderTimeDtos = reserveGoodsOrderTimeV1InnerServiceSMOImpl.queryReserveGoodsOrderTimes(reserveGoodsOrderTimeDto); Assert.listOnlyOne(reserveGoodsOrderTimeDtos, "未包含预约记录"); ReserveGoodsOrderDto reserveGoodsOrderDto = new ReserveGoodsOrderDto(); reserveGoodsOrderDto.setOrderId(reserveGoodsOrderTimeDtos.get(0).getOrderId()); List reserveGoodsOrderDtos = reserveGoodsOrderV1InnerServiceSMOImpl.queryReserveGoodsOrders(reserveGoodsOrderDto); Assert.listOnlyOne(reserveGoodsOrderDtos, "预约订单不存在"); //todo 将 时间修改 核销中 reserveGoodsOrderTimePo = new ReserveGoodsOrderTimePo(); reserveGoodsOrderTimePo.setTimeId(reserveGoodsOrderTimeDtos.get(0).getTimeId()); reserveGoodsOrderTimePo.setState(CommunitySpacePersonTimeDto.STATE_FINISH); flag = reserveGoodsOrderTimeV1InnerServiceSMOImpl.updateReserveGoodsOrderTime(reserveGoodsOrderTimePo); if (flag < 1) { throw new CmdException("核销预约失败"); } ReserveGoodsConfirmOrderPo reserveGoodsConfirmOrderPo = new ReserveGoodsConfirmOrderPo(); reserveGoodsConfirmOrderPo.setCoId(GenerateCodeFactory.getGeneratorId(CODE_PREFIX_ID)); reserveGoodsConfirmOrderPo.setOrderId(reserveGoodsOrderTimeDtos.get(0).getOrderId()); reserveGoodsConfirmOrderPo.setType(reserveGoodsOrderDtos.get(0).getType()); reserveGoodsConfirmOrderPo.setGoodsId(reserveGoodsOrderDtos.get(0).getGoodsId()); reserveGoodsConfirmOrderPo.setCommunityId(reqJson.getString("communityId")); reserveGoodsConfirmOrderPo.setTimeId(reserveGoodsOrderTimePo.getTimeId()); flag = reserveGoodsConfirmOrderV1InnerServiceSMOImpl.saveReserveGoodsConfirmOrder(reserveGoodsConfirmOrderPo); if (flag < 1) { throw new CmdException("保存数据失败"); } context.setResponseEntity(ResultVo.success()); } }