| | |
| | | package com.java110.fee.cmd.tempCarFee; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.java110.core.annotation.Java110Cmd; |
| | | import com.java110.core.context.ICmdDataFlowContext; |
| | | import com.java110.core.event.cmd.AbstractServiceCmdListener; |
| | | import com.java110.core.event.cmd.Cmd; |
| | | import com.java110.core.event.cmd.CmdEvent; |
| | | import com.java110.core.factory.GenerateCodeFactory; |
| | | import com.java110.dto.couponUser.CouponUserDto; |
| | | import com.java110.dto.parking.ParkingBoxAreaDto; |
| | | import com.java110.dto.tempCarFeeConfig.TempCarPayOrderDto; |
| | | import com.java110.fee.bmo.tempCarFee.IGetTempCarFeeRules; |
| | | import com.java110.intf.acct.ICouponUserV1InnerServiceSMO; |
| | | import com.java110.utils.cache.CommonCache; |
| | | import com.java110.intf.community.IParkingBoxAreaV1InnerServiceSMO; |
| | | 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 org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.ResponseEntity; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行 |
| | | */ |
| | | @Java110Cmd(serviceCode = "tempCarFee.getTempCarFeeOrder") |
| | | public class GetTempCarFeeOrderCmd extends AbstractServiceCmdListener { |
| | | public class GetTempCarFeeOrderCmd extends Cmd { |
| | | @Autowired |
| | | private ICouponUserV1InnerServiceSMO couponUserV1InnerServiceSMOImpl; |
| | | @Autowired |
| | | private IGetTempCarFeeRules getTempCarFeeRulesImpl; |
| | | |
| | | @Autowired |
| | | private IParkingBoxAreaV1InnerServiceSMO parkingBoxAreaV1InnerServiceSMOImpl; |
| | | |
| | | @Override |
| | | public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) { |
| | | |
| | | Assert.hasKeyAndValue(reqJson, "paId", "paId不能为空"); |
| | | Assert.hasKeyAndValue(reqJson, "carNum", "carNum不能为空"); |
| | | if(StringUtil.isEmpty(reqJson.getString("paId"))){ |
| | | Assert.hasKeyAndValue(reqJson, "boxId", "boxId不能为空"); |
| | | |
| | | ParkingBoxAreaDto parkingBoxAreaDto = new ParkingBoxAreaDto(); |
| | | parkingBoxAreaDto.setDefaultArea(ParkingBoxAreaDto.DEFAULT_AREA_TRUE); |
| | | parkingBoxAreaDto.setBoxId(reqJson.getString("boxId")); |
| | | List<ParkingBoxAreaDto> parkingBoxAreaDtos = parkingBoxAreaV1InnerServiceSMOImpl.queryParkingBoxAreas(parkingBoxAreaDto); |
| | | if(parkingBoxAreaDtos == null || parkingBoxAreaDtos.size()< 1){ |
| | | throw new CmdException("未找到停车场"); |
| | | } |
| | | reqJson.put("paId",parkingBoxAreaDtos.get(0).getPaId()); |
| | | } |
| | | Assert.hasKeyAndValue(reqJson, "paId", "paId不能为空"); |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | TempCarPayOrderDto tempCarPayOrderDto = new TempCarPayOrderDto(); |
| | | tempCarPayOrderDto.setPaId(reqJson.getString("paId")); |
| | | tempCarPayOrderDto.setCarNum(reqJson.getString("carNum")); |
| | | if(reqJson.containsKey("pccIds") && !StringUtil.isEmpty(reqJson.getString("pccIds"))){ |
| | | tempCarPayOrderDto.setPccIds(reqJson.getString("pccIds").split(",")); |
| | | } |
| | | ResponseEntity<String> responseEntity = getTempCarFeeRulesImpl.getTempCarFeeOrder(tempCarPayOrderDto); |
| | | |
| | | if (responseEntity.getStatusCode() != HttpStatus.OK) { |
| | | cmdDataFlowContext.setResponseEntity(responseEntity); |
| | | return; |
| | | } |
| | | JSONObject orderInfo = JSONObject.parseObject(responseEntity.getBody().toString()); |
| | | if (orderInfo.getIntValue("code") != 0) { |
| | | cmdDataFlowContext.setResponseEntity(responseEntity); |
| | | return; |
| | | } |
| | | |
| | | JSONObject fee = orderInfo.getJSONObject("data"); |
| | | //double money = fee.getDouble("payCharge"); |
| | | BigDecimal money = new BigDecimal(fee.getDouble("payCharge")); |
| | | //3.0 考虑优惠卷 |
| | | double couponPrice = checkCouponUser(reqJson); |
| | | money = money.subtract(new BigDecimal(couponPrice)).setScale(2, BigDecimal.ROUND_HALF_EVEN); |
| | | |
| | | double receivedAmount = money.doubleValue(); |
| | | //所有 优惠折扣计算完后,如果总金额小于等于0,则返回总扣款为0 |
| | | if (receivedAmount <= 0) { |
| | | receivedAmount = 0.0; |
| | | } |
| | | fee.put("receivedAmount", receivedAmount); |
| | | fee.put("oId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_oId)); |
| | | ResponseEntity<String> responseEntitys = new ResponseEntity<>(fee.toJSONString(), HttpStatus.OK); |
| | | fee.putAll(reqJson); |
| | | CommonCache.setValue("getTempCarFeeOrder" + fee.getString("oId"), fee.toJSONString(), 24 * 60 * 60); |
| | | cmdDataFlowContext.setResponseEntity(responseEntitys); |
| | | } |
| | | |
| | | private double checkCouponUser(JSONObject paramObj) { |
| | | JSONArray couponList = paramObj.getJSONArray("couponList"); |
| | | BigDecimal couponPrice = new BigDecimal(0.0); |
| | | List<String> couponIds = new ArrayList<String>(); |
| | | |
| | | if (couponList == null || couponList.size() < 1) { |
| | | paramObj.put("couponPrice", couponPrice.doubleValue()); |
| | | paramObj.put("couponUserDtos", new JSONArray()); //这里考虑空 |
| | | return couponPrice.doubleValue(); |
| | | } |
| | | for (int couponIndex = 0; couponIndex < couponList.size(); couponIndex++) { |
| | | couponIds.add(couponList.getJSONObject(couponIndex).getString("couponId")); |
| | | } |
| | | CouponUserDto couponUserDto = new CouponUserDto(); |
| | | couponUserDto.setCouponIds(couponIds.toArray(new String[couponIds.size()])); |
| | | List<CouponUserDto> couponUserDtos = couponUserV1InnerServiceSMOImpl.queryCouponUsers(couponUserDto); |
| | | if (couponUserDtos == null || couponUserDtos.size() < 1) { |
| | | paramObj.put("couponPrice", couponPrice.doubleValue()); |
| | | return couponPrice.doubleValue(); |
| | | } |
| | | for (CouponUserDto couponUser : couponUserDtos) { |
| | | //不计算已过期购物券金额 |
| | | if (couponUser.getEndTime().compareTo(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)) >= 0) { |
| | | couponPrice = couponPrice.add(new BigDecimal(Double.parseDouble(couponUser.getActualPrice()))); |
| | | } |
| | | } |
| | | paramObj.put("couponPrice", couponPrice.doubleValue()); |
| | | paramObj.put("couponUserDtos", BeanConvertUtil.beanCovertJSONArray(couponUserDtos)); |
| | | return couponPrice.doubleValue(); |
| | | cmdDataFlowContext.setResponseEntity(responseEntity); |
| | | } |
| | | } |