ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Order.java
@@ -154,4 +154,11 @@ private Long auctionSalesroomId; @ApiModelProperty("是否显示订单 1显示,2 不显示") private Integer isOrder; @ApiModelProperty("是否售后 0未售后,1 售后") private Integer isRequest; @ApiModelProperty("失效时间") private LocalDateTime orderTimeSx; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberAuctionSalesroomDTO.java
@@ -23,4 +23,7 @@ @ApiModelProperty(value = "拍卖状态 0=预展中 1=拍卖中 2=已结束 4=全部") private Integer status; @ApiModelProperty(value = "设为备选") private Boolean backupStatus; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberOrderListDTO.java
@@ -23,4 +23,7 @@ @ApiModelProperty(value = "订单状态 1=待支付 2=待发货 3=待收货 4=已完成 5=已取消") private OrderStatusEnum orderStatus; @ApiModelProperty("是否售后 1未售后,2 售后") private Integer isRequest; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MemberOrderNumVO.java
@@ -11,4 +11,6 @@ private Integer dfhorderNo; @ApiModelProperty(value = "待收货") private Integer dshorderNo; @ApiModelProperty(value = "售后订单") private Integer shorderNo; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/OrderReturnVO.java
@@ -82,4 +82,9 @@ @JsonInclude(JsonInclude.Include.ALWAYS) private LocalDateTime platformReceiptTime; @ApiModelProperty("审核时间(平台确认时间)") @JsonInclude(JsonInclude.Include.ALWAYS) private LocalDateTime auditTime; } ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/forepart/dto/ArticleDTO.java
@@ -33,4 +33,7 @@ @ApiModelProperty(value = "资讯图片") private String rticleImageUrl; @ApiModelProperty(value = "商品名称") private String goodsSkuName; } ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/MemberArticleCollectionServiceImpl.java
@@ -90,9 +90,9 @@ @Override public PageDTO<MemberArticleCollectionVO> getMemberArticleCollection(ArticleDTO articleDTO) { Set<Long> goodsSkuIdList = null; if (StringUtils.isNotEmpty(articleDTO.getTitle())) { if (StringUtils.isNotEmpty(articleDTO.getGoodsSkuName())) { LambdaQueryWrapper<Article> wrapper= Wrappers.lambdaQuery(); wrapper.like(Article::getTitle,articleDTO.getTitle()); wrapper.like(Article::getTitle,articleDTO.getGoodsSkuName()); wrapper.eq(Article::getDelFlag,0); List<Article> page1 = articleMapper.selectList(wrapper); goodsSkuIdList = page1.stream().map(Article::getId) ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomController.java
@@ -1,6 +1,10 @@ package com.ruoyi.auction.controller.forepart; import com.ruoyi.auction.mapper.AuctionGoodsMapper; import com.ruoyi.auction.service.IAuctionGoodsService; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.system.api.domain.AuctionGoods; import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.ForepartAuctionBidRecordDTO; import com.ruoyi.auction.service.IAuctionSalesroomGoodsService; @@ -23,6 +27,7 @@ import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.util.List; /** @@ -44,6 +49,9 @@ @Resource private IAuctionSalesroomGoodsService iAuctionSalesroomGoodsService; @Resource private AuctionGoodsMapper AuctionGoodsMapper; /** * 拍卖大屏获取拍卖信息 @@ -109,7 +117,18 @@ @PostMapping("/SaveSignUpNow") @ApiOperation(value = "用户端-拍卖立即报名") public R<PayInfoVO> SaveSignUpNow(@RequestBody MemberAuctionSalesroomBondDTO memberAuctionSalesroomBondDTO) { return R.ok( iAuctionSalesroomService.SaveSignUpNow(memberAuctionSalesroomBondDTO)); if (memberAuctionSalesroomBondDTO.getBondType()==1){ AuctionGoods auctionGoods = AuctionGoodsMapper.selectById(memberAuctionSalesroomBondDTO.getAuctionGoodsId()); if (auctionGoods.getEndTime().isAfter(LocalDateTime.now())){ throw new ServiceException("商品拍卖已结束"); } if (auctionGoods.getListingStatus().getCode()==1){ throw new ServiceException("商品拍卖下线"); } } PayInfoVO payInfoVO = iAuctionSalesroomService.SaveSignUpNow(memberAuctionSalesroomBondDTO); return R.ok(payInfoVO); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionSalesroomGoodsMapper.java
@@ -18,5 +18,6 @@ List<AuctionSalesroomGoods> getAuctionSalesroomGoods(@Param("param") MemberAuctionSalesroomDTO memberAuctionSalesroomDTO); void updateBatchById(@Param("param") List<AuctionSalesroomGoods> auctionSalesroomGoods); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
@@ -420,6 +420,9 @@ AuctionSalesroomGoods auctionSalesroomGoods=this.getOne(wrapper2); auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.IN_PROGRESS); auctionSalesroomGoods.setStartTime(LocalDateTime.now()); if (auctionSalesroomGoods.getBackupStatus()){ auctionSalesroomGoods.setBackupStatus(false); } this.updateById(auctionSalesroomGoods); Map<String, Object> map = new ConcurrentHashMap<>(); ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -439,6 +439,7 @@ List<ForepartAuctionSalesroomGoodsVO> forepartAuctionSalesroomGoodsVOS=new ArrayList<>(); MemberAuctionSalesroomDTO memberAuctionSalesroomDTO1 =new MemberAuctionSalesroomDTO(); memberAuctionSalesroomDTO1.setAuctionSalesroomId(byId.getId()); memberAuctionSalesroomDTO1.setBackupStatus(false); List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.getAuctionSalesroomGoods(memberAuctionSalesroomDTO1); for (AuctionSalesroomGoods salesroomGoods:auctionSalesroomGoods){ ForepartAuctionSalesroomGoodsVO forepartAuctionSalesroomGoodsVO=new ForepartAuctionSalesroomGoodsVO(); ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/MemberAuctionCollectionServiceImpl.java
@@ -21,6 +21,7 @@ import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO; import com.ruoyi.system.api.feignClient.GoodsSkuClient; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -99,6 +100,10 @@ if (StringUtils.isNotEmpty(auctionCollectionDTO.getGoodsSkuName())){ if (goodsSkuIdList.size()>0){ wrapper.in(MemberAuctionCollection::getTargetId,goodsSkuIdList); }else{ goodsSkuIdList=new HashSet<>(); goodsSkuIdList.add(0L); wrapper.in(MemberAuctionCollection::getTargetId,goodsSkuIdList); } } List<MemberAuctionCollection> list = this.list(wrapper); ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -330,7 +330,7 @@ LambdaQueryWrapper<GoodsSku> wrapper3= Wrappers.lambdaQuery(); wrapper3.eq(GoodsSku::getDelFlag,0); wrapper3.eq(GoodsSku::getListingStatus,0); if (homeGoodsSkuDTO.getSkuName()!=null){ if (homeGoodsSkuDTO.getSkuName()!=null&&homeGoodsSkuDTO.getSkuName()!=""){ wrapper3.like(GoodsSku::getSkuName,homeGoodsSkuDTO.getSkuName()); } if (homeGoodsSkuDTO.getGoodsSkuId()!=null){ ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/MemberGoodsCollectionServiceImpl.java
@@ -25,6 +25,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -108,6 +109,10 @@ if (StringUtils.isNotEmpty(auctionCollectionDTO.getGoodsSkuName())){ if (goodsSkuIdList.size()>0){ wrapper.in(MemberGoodsCollection::getTargetId,goodsSkuIdList); }else{ goodsSkuIdList=new HashSet<>(); goodsSkuIdList.add(0L); wrapper.in(MemberGoodsCollection::getTargetId,goodsSkuIdList); } } List<MemberGoodsCollection> list = this.list(wrapper); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java
@@ -42,6 +42,7 @@ Page<MemberPoints> page = new Page<>(memberDTO.getPageCurr(), memberDTO.getPageSize()); LambdaQueryWrapper<MemberPoints> wrapper= Wrappers.lambdaQuery(); wrapper.eq(MemberPoints::getMemberId,memberDTO.getMemberid()); wrapper.orderByDesc(MemberPoints::getCreateTime); Page<MemberPoints> page1 = this.page(page, wrapper); return PageDTO.of(page1); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
@@ -8,6 +8,7 @@ import com.ruoyi.common.core.enums.AuctionOrderTypeEnum; import com.ruoyi.common.core.enums.BondStatusEnum; import com.ruoyi.common.core.enums.PaymentMethodEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.order.domain.Paylog; import com.ruoyi.order.mapper.OrderAuctionBondMapper; @@ -23,6 +24,8 @@ import com.ruoyi.system.api.domain.dto.RefundDTO; import com.ruoyi.system.api.domain.vo.PayInfoVO; import com.ruoyi.system.api.feignClient.AuctionClient; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -130,7 +133,15 @@ PayInfoVO payInfoVO = new PayInfoVO(); if (memberAuctionSalesroomBondDTO.getBondType() == 1) { AuctionGoods data = auctionClient.getauctionGoodsOne(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData(); if (data.getBond().intValue() == 0) { if (data.getEndTime().isAfter(LocalDateTime.now())){ throw new ServiceException("商品拍卖已结束"); } if (data.getListingStatus().getCode()==1){ throw new ServiceException("商品拍卖下线"); } if (data.getBond()==null||data.getBond().intValue() == 0) { OrderAuctionBond orderAuctionBond = new OrderAuctionBond(); orderAuctionBond.setOrderNo(OrderUtil.getOrderNoForPrefix("BO")); orderAuctionBond.setAuctionGoodsId(memberAuctionSalesroomBondDTO.getAuctionGoodsId()); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java
@@ -72,6 +72,8 @@ public OrderReturnVO saveOrderReturnRequest(OrderReturnDTO OrderReturnDTO) { Order order = orderMapper.selectById(OrderReturnDTO.getOrderId()); order.setIsRequest(2); orderMapper.updateById(order); OrderReturnRequest orderReturnRequest = new OrderReturnRequest(); orderReturnRequest.setOrderId(OrderReturnDTO.getOrderId()); orderReturnRequest.setRequestTime(LocalDateTime.now()); @@ -116,6 +118,7 @@ byId.setStatus(ReturnRequestStatusEnum.QX); Order order = orderMapper.selectById(byId.getOrderId()); order.setOrderStatus(OrderStatusEnum.FINISHED); order.setIsRequest(1); orderMapper.updateById(order); this.removeById(byId); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -284,8 +284,11 @@ if (memberOrderDTO.getOrderFrom()==1){ GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(memberOrderDTO.getGoodsSkuId(), SecurityConstants.INNER).getData(); if (goodsSku.getListingStatus().getCode()==1){ throw new ServiceException("该商品已经下架"); } if (goodsSku.getStock()<memberOrderDTO.getGoodsQuantity()){ throw new ServiceException("对不起,购买数大于库存"); throw new ServiceException("该商品已售罄,暂无库存"); }else{ GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(goodsSku.getId()); @@ -305,6 +308,10 @@ } if (memberOrderDTO.getOrderFrom()==2){ GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(memberOrderDTO.getGoodsSkuId(), SecurityConstants.INNER).getData(); if (data.getListingStatus().getCode()==1){ throw new ServiceException("该商品已经下架"); } String goodsLock = "goods_lock_" + CacheConstants.SECKILL_GOODS + data.getId(); RLock redissonLock = redissonClient.getLock(goodsLock); Integer surpNum = 0; @@ -333,7 +340,7 @@ GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData(); if (data.getLimitNumber()<num1) { throw new ServiceException("对不起,大于商品购买数"); throw new ServiceException("该商品已售罄,暂无库存"); } order.setOrderFrom(OrderFromEnum.SNAP_ORDERS); @@ -346,7 +353,7 @@ pice=data.getSeckillPrice(); if (data.getSeckillStock()<1){ throw new ServiceException("对不起,购买数大于库存"); throw new ServiceException("该商品已售罄,暂无库存"); }else{ GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(data.getId()); @@ -363,6 +370,9 @@ if (memberOrderDTO.getOrderFrom()==3){ order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS); GoodsGroupPurchase data = goodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(memberOrderDTO.getGoodsSkuId(), SecurityConstants.INNER).getData(); if (data.getListingStatus().getCode()==1){ throw new ServiceException("该商品已经下架"); } Integer m=data.getCurrentNumber()+1; if (m>data.getGroupSize()){ throw new ServiceException("对不起,大成团人数"); @@ -461,15 +471,16 @@ if (order.getOrderFrom().getCode()==1){ GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData(); GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(goodsSku.getId()); goodsStockUpdDTO.setAuctionStock(goodsSku.getStock()+order.getGoodsQuantity()); goodsSkuClient.updGoodsStock1(goodsStockUpdDTO, SecurityConstants.INNER); if (goodsSku.getStock()+order.getGoodsQuantity()<memberOrderDTO.getGoodsQuantity()){ throw new ServiceException("对不起,购买数大于库存"); throw new ServiceException("该商品已售罄,暂无库存"); } GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(goodsSku.getId()); goodsStockUpdDTO.setAuctionStock(goodsSku.getStock()+order.getGoodsQuantity()); goodsSkuClient.updGoodsStock1(goodsStockUpdDTO, SecurityConstants.INNER); Integer m= goodsSku.getStock()+order.getGoodsQuantity(); goodsStockUpdDTO.setAuctionStock(m-memberOrderDTO.getGoodsQuantity()); goodsSkuClient.updGoodsStock1(goodsStockUpdDTO, @@ -502,14 +513,16 @@ if (data.getLimitNumber()<num1){ throw new ServiceException("对不起,大于商品购买数"); }else{ if (data.getSeckillStock()+order.getGoodsQuantity()<memberOrderDTO.getGoodsQuantity()){ throw new ServiceException("该商品已售罄,暂无库存"); } GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); goodsStockUpdDTO.setGoodsSkuId(data.getId()); goodsStockUpdDTO.setAuctionStock(data.getSeckillStock()+order.getGoodsQuantity()); goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO,SecurityConstants.INNER); if (data.getSeckillStock()+order.getGoodsQuantity()<memberOrderDTO.getGoodsQuantity()){ throw new ServiceException("对不起,购买数大于库存"); } Integer m=data.getSeckillStock()+order.getGoodsQuantity(); GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO(); @@ -548,7 +561,7 @@ throw new ServiceException("对不起,大于商品购买数"); }else{ if (data.getLimitNumber()<memberOrderDTO.getGoodsQuantity()){ throw new ServiceException("对不起,购买数大于库存"); throw new ServiceException("该商品已售罄,暂无库存"); }else{ memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId()); memberOrderVO.setPrice(data.getGroupPurchasePrice()); @@ -688,6 +701,10 @@ } if(memberOrderListDTO.getOrderStatus()!=null){ wrapper.eq(Order::getOrderStatus,memberOrderListDTO.getOrderStatus().getCode()-1); } if(memberOrderListDTO.getIsRequest()!=null){ wrapper.eq(Order::getIsRequest,memberOrderListDTO.getIsRequest()); } wrapper.eq(Order::getIsOrder,1); wrapper.eq(Order::getDelFlag,0); @@ -991,8 +1008,6 @@ @Override public MemberOrderNumVO MemberOrderNum(MemberOrderListDTO memberOrderListDTO) { LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(Order::getMemberId,memberOrderListDTO.getMemberId()); wrapper1.eq(Order::getOrderStatus,1); @@ -1037,6 +1052,13 @@ List<Order> list2 = this.list(paylogEntityWrapper2); vo.setDshorderNo(list2.size()); LambdaQueryWrapper<Order> paylogEntityWrapper3 = Wrappers.lambdaQuery(); paylogEntityWrapper3.eq(Order::getMemberId, memberOrderListDTO.getMemberId()); paylogEntityWrapper3.eq(Order::getIsRequest,2); List<Order> list3 = this.list(paylogEntityWrapper3); vo.setShorderNo(list3.size()); return vo; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java
@@ -48,6 +48,7 @@ import java.io.*; import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; import java.util.regex.Matcher; @@ -96,7 +97,58 @@ String body; try { if(judgeContainsStr(orderNO)){ if (orderNO.contains("BO")) { LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(OrderAuctionBond::getOrderNo,orderNO); wrapper1.eq(OrderAuctionBond::getDelFlag,0); OrderAuctionBond one1 = orderAuctionBondMapper.selectOne(wrapper1); one1.setBoundStatus(BondStatusEnum.PAID); one1.setPaymentMethod(PaymentMethodEnum.WECHAT); orderAuctionBondMapper.updateById(one1); }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(Order::getOrderNo,orderNO); wrapper1.eq(Order::getDelFlag,0); Order page1 = OrderMapper.selectOne(wrapper1); page1.setOrderStatus(OrderStatusEnum.TO_BE_SHIPPED); page1.setPaymentMethod(PaymentMethodEnum.WECHAT); page1.setPayTime(LocalDateTime.now()); OrderMapper.updateById(page1); if(page1.getOrderNo().contains("SP")){ GoodsSku goodsSku =new GoodsSku(); goodsSku.setId(page1.getGoodsSkuId()); goodsSku.setSoldQuantity(page1.getGoodsQuantity()); GoodsSkuClient.updGoods(goodsSku, SecurityConstants.INNER); } if(page1.getOrderNo().contains("MS")){ GoodsSku goodsSku =new GoodsSku(); goodsSku.setId(page1.getGoodsSkuId()); goodsSku.setSoldQuantity(page1.getGoodsQuantity()); GoodsSkuClient.updGoodsSeckill1(goodsSku, SecurityConstants.INNER); } MemberPointsDTO memberPointsDTO=new MemberPointsDTO(); memberPointsDTO.setMemberId(page1.getMemberId()); memberPointsDTO.setPointsType(1); memberPointsDTO.setPointsStatus(PointStatusEnum.INCREASE); memberPointsDTO.setPoints(page1.getPoints()); memberClient.addMemberPoints(memberPointsDTO); updMembeOneDTO MembeOneDTO=new updMembeOneDTO(); MembeOneDTO.setType(1); MembeOneDTO.setMemberId(page1.getMemberId()); MembeOneDTO.setMoney(page1.getTotalAmount()); MembeOneDTO.setTotalPoints(page1.getPoints()); memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER); } /*if (orderNO.contains("BO")) { LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(OrderAuctionBond::getOrderNo,orderNO); wrapper1.eq(OrderAuctionBond::getDelFlag,0); @@ -161,7 +213,7 @@ } }*/ if (orderNO.contains("BO")) { LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); @@ -192,7 +244,7 @@ return this.alipay(orderNO, subject, body, price, request); } if (type == 2) { // 微信预下单 return this.wxpay(2, orderNO, body,openId, price, request); return this.wxpay(2,page1.getOrderTimeSx(), orderNO, body,openId, price, request); } } @@ -518,7 +570,7 @@ * @param request * @return */ public static R<Map<String, Object>> wxpay(Integer apptype, String outTradeNo, String body,String openId, Double price, public static R<Map<String, Object>> wxpay(Integer apptype,LocalDateTime sx,String outTradeNo, String body,String openId, Double price, HttpServletRequest request) { // 获取预支付接口返回参数 Map<String, Object> map1 = new HashMap<String, Object>(); @@ -558,6 +610,10 @@ paraMap.put("body", body); //设置请求参数(商户订单号) paraMap.put("out_trade_no", outTradeNo); if (sx!=null){ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); paraMap.put("time_expire",sx.format(formatter)); } //设置请求参数(总金额) String money=SinataUtil.doubleRetainTwo(price*100d);