From 729c4ae69478ef4798ca4e80a29f6dd2b6660eff Mon Sep 17 00:00:00 2001 From: liupopo Date: Sun, 4 Feb 2024 09:43:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=AE=A2=E5=8D=95=E4=B8=AD?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/databases/统计.sql | 119 ++++++ .../yxt/yythmall/adminapi/OrdertoolsRest.java | 24 ++ .../ordertools/OrdertoolsService.java | 71 ++++ .../ordertools/ToImportOrderExcel.java | 44 +++ .../adminapi/ordertools/WxOrderIn.java | 12 + .../biz/ordorder/OrdOrderGoodsItem.java | 9 + .../yythmall/biz/ordorder/OrdOrderMapper.java | 8 + .../biz/ordorder/OrdOrderService.java | 361 +++++++++--------- 8 files changed, 477 insertions(+), 171 deletions(-) create mode 100644 src/main/java/com/yxt/yythmall/adminapi/OrdertoolsRest.java create mode 100644 src/main/java/com/yxt/yythmall/adminapi/ordertools/OrdertoolsService.java create mode 100644 src/main/java/com/yxt/yythmall/adminapi/ordertools/ToImportOrderExcel.java create mode 100644 src/main/java/com/yxt/yythmall/adminapi/ordertools/WxOrderIn.java create mode 100644 src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderGoodsItem.java diff --git a/docs/databases/统计.sql b/docs/databases/统计.sql index bfe439b..05c643e 100644 --- a/docs/databases/统计.sql +++ b/docs/databases/统计.sql @@ -68,6 +68,35 @@ WHERE (cardtype=0 OR cardtype=1) AND vr.createTime>='2024-01-30' AND vr.createTime<'2024-01-31'; -- 预约提货信息 +select + date_format(vo.reserveDate,'%Y-%m-%d') 预约日期, + vo.customerSid 客户SID, + lc.wxMpOpenid 微信OpenID, + vo.storeSid 提货点SID, + max(ls.name) 提货点名称, + max(ls.linker) 提货点联系人, + max(ls.phone) 提货点联系电话, + max(ls.address) 提货点地址, + max(vo.affiliation) 菜窖类别编号, + max(pb.name) 菜窖类别, + max(vo.userName) 提货人名, + max(vo.userPhone) 提货电话, + max(lb.sid) 支行SID, + max(lb.name) 支行名, + max(lb.linker) 支行联系人, + max(lb.linkPhone) 支行电话, + max(lb.address) 支行地址, + max(lcb.name) 客户所属支行 +from vege_cellar_reserve_order vo +LEFT JOIN lpk_store ls ON ls.sid=vo.storeSid +LEFT JOIN lpk_bank lb ON lb.sid=ls.bankSid +left join pms_brand pb on pb.id=vo.affiliation +LEFT JOIN lpk_customer lc ON lc.sid=vo.customerSid +LEFT JOIN lpk_customer_bank lcb ON lcb.sid = lc.customerBankSid +WHERE vo.reserveDate>='2024-01-30' AND vo.reserveDate<'2024-01-31' +GROUP BY vo.reserveDate,vo.storeSid,vo.customerSid ; + +-- 预约提货信息含商品 select date_format(vo.reserveDate,'%Y-%m-%d') 预约日期, vo.customerSid 客户SID, @@ -99,3 +128,93 @@ LEFT JOIN lpk_customer lc ON lc.sid=vo.customerSid LEFT JOIN lpk_customer_bank lcb ON lcb.sid = lc.customerBankSid WHERE vo.reserveDate>='2024-01-30' AND vo.reserveDate<'2024-01-31' GROUP BY vo.reserveDate,vo.storeSid,vo.customerSid,vd.goodsSid ; + +-- 微信用户数-日 +SELECT + COUNT(1) 日增加微信用户数 +FROM lpk_customer lc +WHERE lc.createTime>='2024-01-30' AND lc.createTime<'2024-01-31' + +-- 微信用户数-累计 +SELECT + COUNT(1) 微信用户总数 +FROM lpk_customer lc + +-- 购买人数-日 指定日期线上下单加上绑定个人卡和企业卡的用户数(同一用户记一条) +SELECT COUNT(1) FROM ( +SELECT + oo.openId openid +FROM ord_order oo +WHERE oo.payStatus=4 AND oo.payTime>='2024-01-30' AND oo.payTime<'2024-01-31' +UNION +SELECT + lc.wxMpOpenid openid +FROM emp_card ec +LEFT JOIN lpk_customer lc ON lc.sid = ec.customerSid +WHERE ec.customerSid IS NOT NULL AND ec.customerSid <> '' +AND ec.bindDate>='2024-01-30' AND ec.bindDate<'2024-01-31' +UNION +SELECT + lc.wxMpOpenid openid +FROM lpk_giftcard lg + LEFT JOIN lpk_customer lc ON lc.sid = lg.customerSid +WHERE lg.customerSid IS NOT NULL AND lg.customerSid <> '' +AND lg.bindDate>='2024-01-30' AND lg.bindDate<'2024-01-31' +) t1 + + +-- 购买人数-累计 线上下单加上绑定个人卡和企业卡的用户数(同一用户记一条) 2433 +SELECT COUNT(1) FROM ( +SELECT + oo.openId openid +FROM ord_order oo +UNION +SELECT + lc.wxMpOpenid openid +FROM emp_card ec +LEFT JOIN lpk_customer lc ON lc.sid = ec.customerSid +WHERE ec.customerSid IS NOT NULL AND ec.customerSid <> '' +UNION +SELECT + lc.wxMpOpenid openid +FROM lpk_giftcard lg + LEFT JOIN lpk_customer lc ON lc.sid = lg.customerSid +WHERE lg.customerSid IS NOT NULL AND lg.customerSid <> '' +) t1 + +-- 复购用户数-累计 +SELECT COUNT(1) FROM ( +SELECT openid,COUNT(1) num FROM ( +SELECT + oo.openId openid +FROM ord_order oo +UNION ALL +SELECT + lc.wxMpOpenid openid +FROM emp_card ec +LEFT JOIN lpk_customer lc ON lc.sid = ec.customerSid +WHERE ec.customerSid IS NOT NULL AND ec.customerSid <> '' +UNION ALL +SELECT + lc.wxMpOpenid openid +FROM lpk_giftcard lg + LEFT JOIN lpk_customer lc ON lc.sid = lg.customerSid +WHERE lg.customerSid IS NOT NULL AND lg.customerSid <> '' +) t GROUP BY openid +) tt WHERE tt.num>1 + + +-- 两次以上提货用户数-累计 +SELECT COUNT(1) FROM ( +SELECT openid,COUNT(1) num FROM ( +SELECT + lc.wxMpOpenid openid +FROM lpk_reserve_order lro +LEFT JOIN lpk_customer lc ON lc.sid = lro.customerSid +UNION ALL +SELECT + lc.wxMpOpenid openid +FROM vege_cellar_reserve_order vcro +LEFT JOIN lpk_customer lc ON lc.sid = vcro.customerSid +) t GROUP BY t.openid +) tt WHERE tt.num>1 diff --git a/src/main/java/com/yxt/yythmall/adminapi/OrdertoolsRest.java b/src/main/java/com/yxt/yythmall/adminapi/OrdertoolsRest.java new file mode 100644 index 0000000..1fb41c5 --- /dev/null +++ b/src/main/java/com/yxt/yythmall/adminapi/OrdertoolsRest.java @@ -0,0 +1,24 @@ +package com.yxt.yythmall.adminapi; + + +import com.yxt.common.core.result.ResultBean; +import com.yxt.yythmall.adminapi.ordertools.OrdertoolsService; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +@RestController("com.yxt.yythmall.adminapi.OrdertoolsRest") +@RequestMapping("/adminapi/ordertools") +public class OrdertoolsRest { + @Autowired + private OrdertoolsService ordertoolsService; + + @ApiOperation("上传和导出") + @PostMapping("/uploadExcelFile") + public ResultBean uploadExcelFile(@RequestParam("file") MultipartFile file) { + ResultBean rb = ResultBean.fireFail(); + String fileUrl = ordertoolsService.uploadAndResetData(file); + return rb.success().setData(fileUrl); + } +} diff --git a/src/main/java/com/yxt/yythmall/adminapi/ordertools/OrdertoolsService.java b/src/main/java/com/yxt/yythmall/adminapi/ordertools/OrdertoolsService.java new file mode 100644 index 0000000..910d9d0 --- /dev/null +++ b/src/main/java/com/yxt/yythmall/adminapi/ordertools/OrdertoolsService.java @@ -0,0 +1,71 @@ +package com.yxt.yythmall.adminapi.ordertools; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.builder.ExcelReaderBuilder; +import com.alibaba.excel.read.listener.ReadListener; +import com.yxt.common.base.config.component.FileUploadComponent; +import com.yxt.common.core.result.FileUploadResult; +import com.yxt.common.core.result.ResultBean; +import com.yxt.yythmall.biz.ordorder.OrdOrderService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class OrdertoolsService { + + @Autowired + private FileUploadComponent fileUploadComponent; + + @Autowired + private OrdOrderService ordOrderService; + + public String uploadAndResetData(MultipartFile file) { + ResultBean fub = fileUploadComponent.uploadFile(file, "zfdd"); + String filePath = fub.getData().getFilePath(); + String fp = fileUploadComponent.getUploadPath() + filePath; + String outFilePath = "/zfdd/fhd" + System.currentTimeMillis() + ".xlsx"; + String outFileName = fileUploadComponent.getUploadPath() + outFilePath; + String outFileUrl = fileUploadComponent.getUrlPrefix() + outFilePath; + + List inList = new ArrayList<>(); + ExcelReaderBuilder read = EasyExcel.read(fp, WxOrderIn.class, createReadListener(inList)); + + List toList = new ArrayList<>(); + inList.forEach(inObj -> { + ToImportOrderExcel toObj = new ToImportOrderExcel(); + toObj.setTranOrderNo(inObj.getTranOrderNo()); + toObj.setMerchantOrderNo(inObj.getMerchantOrderNo()); + toObj.setMerchantNo(inObj.getMerchantNo()); + toObj.setGoodsNames(ordOrderService.orderGoodsNames(inObj.getMerchantOrderNo())); + toList.add(toObj); + }); + +// ArrayList EasyExcel.write(response.getOutputStream(), ReserveCustomerExcel.class).sheet("预约单明细").doWrite(list); + + + read.sheet().doRead(); + return ""; + } + + private ReadListener createReadListener(List inList) { + + return new ReadListener() { + @Override + public void invoke(WxOrderIn obj, AnalysisContext analysisContext) { + inList.add(obj); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + } + }; + } +} diff --git a/src/main/java/com/yxt/yythmall/adminapi/ordertools/ToImportOrderExcel.java b/src/main/java/com/yxt/yythmall/adminapi/ordertools/ToImportOrderExcel.java new file mode 100644 index 0000000..04e0834 --- /dev/null +++ b/src/main/java/com/yxt/yythmall/adminapi/ordertools/ToImportOrderExcel.java @@ -0,0 +1,44 @@ +package com.yxt.yythmall.adminapi.ordertools; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +public class ToImportOrderExcel { + @ColumnWidth(20) + @ExcelProperty(value = "交易单号",index = 0) + private String tranOrderNo; // 交易单号 + @ColumnWidth(20) + @ExcelProperty(value = "商户单号",index = 1) + private String merchantOrderNo; // 商户单号 + @ColumnWidth(20) + @ExcelProperty(value = "商户号",index = 2) + private String merchantNo;// 商户号 + @ColumnWidth(20) + @ExcelProperty(value = "发货方式",index = 3) + private String modeOfDespatch = "用户自提";// 发货方式 + @ColumnWidth(20) + @ExcelProperty(value = "发货模式",index = 4) + private String deliveryMode = "统一发货";// 发货模式 + @ColumnWidth(20) + @ExcelProperty(value = "快递公司",index = 5) + private String kdgs = ""; // 快递公司 + @ColumnWidth(20) + @ExcelProperty(value = "快递单号(多个快递单使用;分隔)",index = 6) + private String kddh = ""; // 快递单号(多个快递单使用;分隔) + @ColumnWidth(20) + @ExcelProperty(value = "是否完成发货",index = 7) + private String sfwcfh = ""; // 是否完成发货 + @ColumnWidth(20) + @ExcelProperty(value = "是否重新发货",index = 8) + private String sfcxfh = ""; // 是否重新发货 + @ColumnWidth(20) + @ExcelProperty(value = "商品信息",index = 9) + private String goodsNames; // 商品信息 + +} diff --git a/src/main/java/com/yxt/yythmall/adminapi/ordertools/WxOrderIn.java b/src/main/java/com/yxt/yythmall/adminapi/ordertools/WxOrderIn.java new file mode 100644 index 0000000..71a53b0 --- /dev/null +++ b/src/main/java/com/yxt/yythmall/adminapi/ordertools/WxOrderIn.java @@ -0,0 +1,12 @@ +package com.yxt.yythmall.adminapi.ordertools; + +import lombok.Data; + +@Data +public class WxOrderIn { + private String tranTime; // 支付时间 + private String tranOrderNo; // 交易单号 + private String merchantOrderNo; // 商户单号 + private String merchantNo;// 商户号 + private String status; // 状态 +} diff --git a/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderGoodsItem.java b/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderGoodsItem.java new file mode 100644 index 0000000..547af50 --- /dev/null +++ b/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderGoodsItem.java @@ -0,0 +1,9 @@ +package com.yxt.yythmall.biz.ordorder; + +import lombok.Data; + +@Data +public class OrdOrderGoodsItem { + private String goodsName; + private int goodsNumber; +} diff --git a/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderMapper.java b/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderMapper.java index 25e1219..25721f7 100644 --- a/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderMapper.java +++ b/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderMapper.java @@ -10,6 +10,7 @@ import com.yxt.yythmall.api.ordorder.OrdOrder; import com.yxt.yythmall.api.ordorder.OrdOrderVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -22,4 +23,11 @@ public interface OrdOrderMapper extends BaseMapper { IPage orderList(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); OrdOrderVo getOrderDetails(@Param("sid")String sid); + @Select("SELECT " + + " ood.goodsName goodsName, " + + " ood.partNumber goodsNumber " + + "FROM ord_order oo " + + "LEFT JOIN ord_order_detail ood ON ood.orderSid=oo.sid " + + "WHERE oo.payStatus=4 AND oo.outTradeNo=#{tradeNo}") + List listGoodsInfoByOutTradeNo(@Param("tradeNo") String outTradeNo); } diff --git a/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderService.java b/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderService.java index 17c6f31..cc394d1 100644 --- a/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderService.java +++ b/src/main/java/com/yxt/yythmall/biz/ordorder/OrdOrderService.java @@ -48,9 +48,9 @@ import java.util.stream.Collectors; @Service public class OrdOrderService extends MybatisBaseService { - private static final String OrderUrl="https://supervise.yxtsoft.com/lpkapi/empcardgift/generateTopEmpCard?mainSid="; - private static final String or="https://supervise.yxtsoft.com/lpkapi/vegetablecellar/addGoods?mainSid="; - private static final String payUrl="https://supervise.yxtsoft.com/lpkapi/empsreservoorder/getPreOrder"; + private static final String OrderUrl = "https://supervise.yxtsoft.com/lpkapi/empcardgift/generateTopEmpCard?mainSid="; + private static final String or = "https://supervise.yxtsoft.com/lpkapi/vegetablecellar/addGoods?mainSid="; + private static final String payUrl = "https://supervise.yxtsoft.com/lpkapi/empsreservoorder/getPreOrder"; @Autowired OrdOrderDetailService ordOrderDetailsService; @Autowired @@ -74,21 +74,21 @@ public class OrdOrderService extends MybatisBaseServicemap =new HashMap<>(); - LpkCustomerVo vo= lpkCustomerService.getCustomerInfo(dto.getCustomerSid()).getData(); - Map sendBody=buildMessageBody( vo.getSid(), vo.getWxMpOpenid(),dto.getTotalTee(),dto.getOrdOrderDetailsVoList(),OrderUrl); - ResponseEntity postForEntity=new RestTemplate().postForEntity("https://supervise.yxtsoft.com/wxPay/order/createOrder", sendBody,ResultBean.class); - - ResultBean rb1= postForEntity.getBody(); - LinkedHashMap rb2= (LinkedHashMap)postForEntity.getBody().getData(); - if(!rb1.getCode().equals("200")){ + Map map = new HashMap<>(); + LpkCustomerVo vo = lpkCustomerService.getCustomerInfo(dto.getCustomerSid()).getData(); + Map sendBody = buildMessageBody(vo.getSid(), vo.getWxMpOpenid(), dto.getTotalTee(), dto.getOrdOrderDetailsVoList(), OrderUrl); + ResponseEntity postForEntity = new RestTemplate().postForEntity("https://supervise.yxtsoft.com/wxPay/order/createOrder", sendBody, ResultBean.class); + + ResultBean rb1 = postForEntity.getBody(); + LinkedHashMap rb2 = (LinkedHashMap) postForEntity.getBody().getData(); + if (!rb1.getCode().equals("200")) { return rb1; } - OrdOrder order=new OrdOrder(); + OrdOrder order = new OrdOrder(); BeanUtil.copyProperties(dto, order, "id", "sid"); order.setCreateTime(new Date()); order.setMainSid(rb2.get("mainSid").toString()); @@ -100,10 +100,10 @@ public class OrdOrderService extends MybatisBaseService1){ - order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"等"+(dto.getOrdOrderDetailsVoList().size()-1)+"件商品"); - }else{ - order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"商品"); + if (dto.getOrdOrderDetailsVoList().size() > 1) { + order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "等" + (dto.getOrdOrderDetailsVoList().size() - 1) + "件商品"); + } else { + order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "商品"); } // order.setName("商品"); order.setTimeRemarks(10); @@ -111,9 +111,9 @@ public class OrdOrderService extends MybatisBaseService ordOrders=new ArrayList<>(); - dto.getOrdOrderDetailsVoList().forEach(s->{ - OrdOrderDetail ordOrderDetails=new OrdOrderDetail(); + List ordOrders = new ArrayList<>(); + dto.getOrdOrderDetailsVoList().forEach(s -> { + OrdOrderDetail ordOrderDetails = new OrdOrderDetail(); BeanUtil.copyProperties(s, ordOrderDetails, "id", "sid"); ordOrderDetails.setOrderSid(order.getSid()); @@ -121,38 +121,38 @@ public class OrdOrderService extends MybatisBaseService1){ - result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"等"+(dto.getOrdOrderDetailsVoList().size()-1)+"件商品"); - }else{ - result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"商品"); + if (dto.getOrdOrderDetailsVoList().size() > 1) { + result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "等" + (dto.getOrdOrderDetailsVoList().size() - 1) + "件商品"); + } else { + result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "商品"); } result.setPrice(dto.getTotalTee()); // result.setOrderId(rbData.getOutTradeNo()); result.setOrderId(rb2.get("outTradeNo").toString()); - result.setRemainder(String.valueOf(10*60)); + result.setRemainder(String.valueOf(10 * 60)); - PayUrl payUrl=new PayUrl(); + PayUrl payUrl = new PayUrl(); payUrl.setUrl("https://supervise.yxtsoft.com/wxPay/order/pay"); - PayParams aVoid=new PayParams(); + PayParams aVoid = new PayParams(); aVoid.setMainSid(rb2.get("mainSid").toString()); payUrl.setParams(aVoid); - OrderUrl orderUrl=new OrderUrl(); - OrderParams orderParams=new OrderParams(); + OrderUrl orderUrl = new OrderUrl(); + OrderParams orderParams = new OrderParams(); orderParams.setMainSid(""); orderUrl.setParams(orderParams); - TradeNoUrl tradeNoUrl=new TradeNoUrl(); + TradeNoUrl tradeNoUrl = new TradeNoUrl(); tradeNoUrl.setUrl("https://supervise.yxtsoft.com/wxPay/order/orderQuery"); - TradeParams tradeParams=new TradeParams(); + TradeParams tradeParams = new TradeParams(); tradeParams.setMainSid(rb2.get("mainSid").toString()); tradeNoUrl.setParams(tradeParams); // result.setOrder_url(orderUrl); result.setPay_url(payUrl); result.setTrade_no_url(tradeNoUrl); - String [] a =new String []{"pay"}; + String[] a = new String[]{"pay"}; result.setBus(a); return rb.success().setData(result); } @@ -160,48 +160,48 @@ public class OrdOrderService extends MybatisBaseService ordOrderDetailVos=new ArrayList<>(); + List ordOrderDetailVos = new ArrayList<>(); - ShoppingCartQuery query=new ShoppingCartQuery(); + ShoppingCartQuery query = new ShoppingCartQuery(); query.setCustomerSid(dto.getCustomerSid()); query.setBrandId(dto.getBrandId()); - List vos=shoppingCartService.shoppingCartList(query).getData(); - List strings=new ArrayList<>(); - double totalAmount=0; + List vos = shoppingCartService.shoppingCartList(query).getData(); + List strings = new ArrayList<>(); + double totalAmount = 0; for (ShoppingCartVo vo : vos) { - OrdOrderDetailVo vo1 =new OrdOrderDetailVo(); + OrdOrderDetailVo vo1 = new OrdOrderDetailVo(); LpkGoods goods = lpkGoodsService.getOne(new QueryWrapper().eq("sid", vo.getGoodsSid())); vo1.setGoodsSid(vo.getGoodsSid()); vo1.setGoodsName(vo.getGoodsName()); vo1.setPartNumber(Integer.parseInt(vo.getGoodsNumber())); vo1.setNumofPart(Double.valueOf(vo.getWeight())); vo1.setPriceUnit(Double.valueOf(goods.getPrice())); - vo1.setPricePart((Double.valueOf(goods.getPrice())*Double.valueOf(goods.getWeight()))); - totalAmount= Double.valueOf(vo1.getPricePart())*Double.valueOf(vo1.getPartNumber())+totalAmount; + vo1.setPricePart((Double.valueOf(goods.getPrice()) * Double.valueOf(goods.getWeight()))); + totalAmount = Double.valueOf(vo1.getPricePart()) * Double.valueOf(vo1.getPartNumber()) + totalAmount; ordOrderDetailVos.add(vo1); strings.add(vo.getSid()); } dto.setOrdOrderDetailsVoList(ordOrderDetailVos); - Mapmap =new HashMap<>(); - LpkCustomerVo vo= lpkCustomerService.getCustomerInfo(dto.getCustomerSid()).getData(); - Map sendBody=buildMessageBody( vo.getSid(), vo.getWxMpOpenid(),dto.getTotalTee(),dto.getOrdOrderDetailsVoList(),or); - ResponseEntity postForEntity=new RestTemplate().postForEntity("https://supervise.yxtsoft.com/wxPay/order/createOrder", sendBody,ResultBean.class); - - ResultBean rb1= postForEntity.getBody(); - LinkedHashMap rb2= (LinkedHashMap)postForEntity.getBody().getData(); - if(!rb1.getCode().equals("200")){ + Map map = new HashMap<>(); + LpkCustomerVo vo = lpkCustomerService.getCustomerInfo(dto.getCustomerSid()).getData(); + Map sendBody = buildMessageBody(vo.getSid(), vo.getWxMpOpenid(), dto.getTotalTee(), dto.getOrdOrderDetailsVoList(), or); + ResponseEntity postForEntity = new RestTemplate().postForEntity("https://supervise.yxtsoft.com/wxPay/order/createOrder", sendBody, ResultBean.class); + + ResultBean rb1 = postForEntity.getBody(); + LinkedHashMap rb2 = (LinkedHashMap) postForEntity.getBody().getData(); + if (!rb1.getCode().equals("200")) { return rb1; } - OrdOrder order=new OrdOrder(); + OrdOrder order = new OrdOrder(); BeanUtil.copyProperties(dto, order, "id", "sid"); order.setCreateTime(new Date()); order.setMainSid(rb2.get("mainSid").toString()); @@ -214,10 +214,10 @@ public class OrdOrderService extends MybatisBaseService1){ - order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"等"+(dto.getOrdOrderDetailsVoList().size())+"件商品"); - }else{ - order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"商品"); + if (dto.getOrdOrderDetailsVoList().size() > 1) { + order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "等" + (dto.getOrdOrderDetailsVoList().size()) + "件商品"); + } else { + order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "商品"); } // order.setName("商品"); order.setTimeRemarks(10); @@ -225,9 +225,9 @@ public class OrdOrderService extends MybatisBaseService ordOrders=new ArrayList<>(); - dto.getOrdOrderDetailsVoList().forEach(s->{ - OrdOrderDetail ordOrderDetails=new OrdOrderDetail(); + List ordOrders = new ArrayList<>(); + dto.getOrdOrderDetailsVoList().forEach(s -> { + OrdOrderDetail ordOrderDetails = new OrdOrderDetail(); BeanUtil.copyProperties(s, ordOrderDetails, "id", "sid"); ordOrderDetails.setOrderSid(order.getSid()); ordOrders.add(ordOrderDetails); @@ -235,85 +235,86 @@ public class OrdOrderService extends MybatisBaseService1){ - result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"等"+(dto.getOrdOrderDetailsVoList().size())+"件商品"); - }else{ - result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"商品"); + if (dto.getOrdOrderDetailsVoList().size() > 1) { + result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "等" + (dto.getOrdOrderDetailsVoList().size()) + "件商品"); + } else { + result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "商品"); } result.setPrice(dto.getTotalTee()); // result.setOrderId(rbData.getOutTradeNo()); result.setOrderId(rb2.get("outTradeNo").toString()); - result.setRemainder(String.valueOf(10*60)); + result.setRemainder(String.valueOf(10 * 60)); - PayUrl payUrl=new PayUrl(); + PayUrl payUrl = new PayUrl(); payUrl.setUrl("https://supervise.yxtsoft.com/wxPay/order/pay"); - PayParams aVoid=new PayParams(); + PayParams aVoid = new PayParams(); aVoid.setMainSid(rb2.get("mainSid").toString()); payUrl.setParams(aVoid); - OrderUrl orderUrl=new OrderUrl(); - OrderParams orderParams=new OrderParams(); + OrderUrl orderUrl = new OrderUrl(); + OrderParams orderParams = new OrderParams(); orderParams.setMainSid(""); orderUrl.setParams(orderParams); - TradeNoUrl tradeNoUrl=new TradeNoUrl(); + TradeNoUrl tradeNoUrl = new TradeNoUrl(); tradeNoUrl.setUrl("https://supervise.yxtsoft.com/wxPay/order/orderQuery"); - TradeParams tradeParams=new TradeParams(); + TradeParams tradeParams = new TradeParams(); tradeParams.setMainSid(rb2.get("mainSid").toString()); tradeNoUrl.setParams(tradeParams); // result.setOrder_url(orderUrl); result.setPay_url(payUrl); result.setTrade_no_url(tradeNoUrl); - String [] a =new String []{"pay"}; + String[] a = new String[]{"pay"}; result.setBus(a); //新人限购礼包 该状态 - LpkCustomer customer=lpkCustomerService.getOne(new QueryWrapper().eq("sid",dto.getCustomerSid())); + LpkCustomer customer = lpkCustomerService.getOne(new QueryWrapper().eq("sid", dto.getCustomerSid())); customer.setIsPurchase("0"); lpkCustomerService.updateById(customer); return rb.success().setData(result); } + @Transactional(rollbackFor = Exception.class) public ResultBean createNewUserBagOrder(OrdOrderDto dto) { ResultBean rb = ResultBean.fireFail(); - PayResult result=new PayResult(); - if(StringUtils.isBlank(dto.getCustomerSid())){ + PayResult result = new PayResult(); + if (StringUtils.isBlank(dto.getCustomerSid())) { return rb.setMsg("参数不全"); } - List ordOrderDetailVos=new ArrayList<>(); + List ordOrderDetailVos = new ArrayList<>(); - List vos=appletGiftBagService.getGoodsByBagSid(dto.getBagSid()).getData(); + List vos = appletGiftBagService.getGoodsByBagSid(dto.getBagSid()).getData(); dto.setTotalTee(vos.get(0).getPrefPrice()); dto.setCardNumber(1); - double totalAmount=0; + double totalAmount = 0; for (GiftBagGoodss vo : vos) { - OrdOrderDetailVo vo1 =new OrdOrderDetailVo(); + OrdOrderDetailVo vo1 = new OrdOrderDetailVo(); LpkGoods goods = lpkGoodsService.getOne(new QueryWrapper().eq("sid", vo.getGoodsSid())); vo1.setGoodsSid(vo.getGoodsSid()); vo1.setGoodsName(vo.getName()); vo1.setPartNumber(Integer.parseInt(vo.getGoodsNumber())); vo1.setNumofPart(Double.valueOf(vo.getWeight())); vo1.setPriceUnit(Double.valueOf(goods.getPrice())); - vo1.setPricePart((Double.valueOf(goods.getPrice())*Double.valueOf(goods.getWeight()))); - totalAmount= Double.valueOf(vo1.getPricePart())*Double.valueOf(vo1.getPartNumber())+totalAmount; + vo1.setPricePart((Double.valueOf(goods.getPrice()) * Double.valueOf(goods.getWeight()))); + totalAmount = Double.valueOf(vo1.getPricePart()) * Double.valueOf(vo1.getPartNumber()) + totalAmount; ordOrderDetailVos.add(vo1); } dto.setOrdOrderDetailsVoList(ordOrderDetailVos); - Mapmap =new HashMap<>(); - LpkCustomerVo vo= lpkCustomerService.getCustomerInfo(dto.getCustomerSid()).getData(); - Map sendBody=buildMessageBody( vo.getSid(), vo.getWxMpOpenid(),dto.getTotalTee(),dto.getOrdOrderDetailsVoList(),or); - ResponseEntity postForEntity=new RestTemplate().postForEntity("https://supervise.yxtsoft.com/wxPay/order/createOrder", sendBody,ResultBean.class); + Map map = new HashMap<>(); + LpkCustomerVo vo = lpkCustomerService.getCustomerInfo(dto.getCustomerSid()).getData(); + Map sendBody = buildMessageBody(vo.getSid(), vo.getWxMpOpenid(), dto.getTotalTee(), dto.getOrdOrderDetailsVoList(), or); + ResponseEntity postForEntity = new RestTemplate().postForEntity("https://supervise.yxtsoft.com/wxPay/order/createOrder", sendBody, ResultBean.class); - ResultBean rb1= postForEntity.getBody(); - LinkedHashMap rb2= (LinkedHashMap)postForEntity.getBody().getData(); - if(!rb1.getCode().equals("200")){ + ResultBean rb1 = postForEntity.getBody(); + LinkedHashMap rb2 = (LinkedHashMap) postForEntity.getBody().getData(); + if (!rb1.getCode().equals("200")) { return rb1; } - OrdOrder order=new OrdOrder(); + OrdOrder order = new OrdOrder(); BeanUtil.copyProperties(dto, order, "id", "sid"); order.setCreateTime(new Date()); order.setMainSid(rb2.get("mainSid").toString()); @@ -326,18 +327,18 @@ public class OrdOrderService extends MybatisBaseService1){ - order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"等"+(dto.getOrdOrderDetailsVoList().size()-1)+"件商品"); - }else{ - order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"商品"); + if (dto.getOrdOrderDetailsVoList().size() > 1) { + order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "等" + (dto.getOrdOrderDetailsVoList().size() - 1) + "件商品"); + } else { + order.setName(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "商品"); } // order.setName("商品"); order.setTimeRemarks(10); order.setReturnUrl(or); baseMapper.insert(order); - List ordOrders=new ArrayList<>(); - dto.getOrdOrderDetailsVoList().forEach(s->{ - OrdOrderDetail ordOrderDetails=new OrdOrderDetail(); + List ordOrders = new ArrayList<>(); + dto.getOrdOrderDetailsVoList().forEach(s -> { + OrdOrderDetail ordOrderDetails = new OrdOrderDetail(); BeanUtil.copyProperties(s, ordOrderDetails, "id", "sid"); ordOrderDetails.setOrderSid(order.getSid()); ordOrders.add(ordOrderDetails); @@ -345,52 +346,53 @@ public class OrdOrderService extends MybatisBaseService1){ - result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"等"+(dto.getOrdOrderDetailsVoList().size()-1)+"件商品"); - }else{ - result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString()+"商品"); + if (dto.getOrdOrderDetailsVoList().size() > 1) { + result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "等" + (dto.getOrdOrderDetailsVoList().size() - 1) + "件商品"); + } else { + result.setGoods(dto.getOrdOrderDetailsVoList().get(0).getGoodsName().toString() + "商品"); } result.setPrice(dto.getTotalTee()); // result.setOrderId(rbData.getOutTradeNo()); result.setOrderId(rb2.get("outTradeNo").toString()); - result.setRemainder(String.valueOf(10*60)); + result.setRemainder(String.valueOf(10 * 60)); - PayUrl payUrl=new PayUrl(); + PayUrl payUrl = new PayUrl(); payUrl.setUrl("https://supervise.yxtsoft.com/wxPay/order/pay"); - PayParams aVoid=new PayParams(); + PayParams aVoid = new PayParams(); aVoid.setMainSid(rb2.get("mainSid").toString()); payUrl.setParams(aVoid); - OrderUrl orderUrl=new OrderUrl(); - OrderParams orderParams=new OrderParams(); + OrderUrl orderUrl = new OrderUrl(); + OrderParams orderParams = new OrderParams(); orderParams.setMainSid(""); orderUrl.setParams(orderParams); - TradeNoUrl tradeNoUrl=new TradeNoUrl(); + TradeNoUrl tradeNoUrl = new TradeNoUrl(); tradeNoUrl.setUrl("https://supervise.yxtsoft.com/wxPay/order/orderQuery"); - TradeParams tradeParams=new TradeParams(); + TradeParams tradeParams = new TradeParams(); tradeParams.setMainSid(rb2.get("mainSid").toString()); tradeNoUrl.setParams(tradeParams); // result.setOrder_url(orderUrl); result.setPay_url(payUrl); result.setTrade_no_url(tradeNoUrl); - String [] a =new String []{"pay"}; + String[] a = new String[]{"pay"}; result.setBus(a); //新人限购礼包 该状态 - LpkCustomer customer=lpkCustomerService.getOne(new QueryWrapper().eq("sid",dto.getCustomerSid())); + LpkCustomer customer = lpkCustomerService.getOne(new QueryWrapper().eq("sid", dto.getCustomerSid())); customer.setIsPurchase("0"); lpkCustomerService.updateById(customer); return rb.success().setData(result); } - private static Map buildMessageBody(String userSid, String openId, String totalTee, List detailVos,String returnUrl){ + + private static Map buildMessageBody(String userSid, String openId, String totalTee, List detailVos, String returnUrl) { //拼接base参数 - String name =""; - if(detailVos.size()>1){ - name=detailVos.get(0).getGoodsName().toString()+"等"+(detailVos.size())+"件商品"; - }else{ - name =detailVos.get(0).getGoodsName().toString()+"商品"; + String name = ""; + if (detailVos.size() > 1) { + name = detailVos.get(0).getGoodsName().toString() + "等" + (detailVos.size()) + "件商品"; + } else { + name = detailVos.get(0).getGoodsName().toString() + "商品"; } Map mp_template_msg = new HashMap<>(); mp_template_msg.put("source", "0"); @@ -400,140 +402,143 @@ public class OrdOrderService extends MybatisBaseService> orderList(PagerQuery pq) { - ResultBean rb=new ResultBean().fail(); + ResultBean rb = new ResultBean().fail(); OrdOrderQuery query = pq.getParams(); IPage page = PagerUtil.queryToPage(pq); QueryWrapper qw = new QueryWrapper<>(); - if (StringUtils.isBlank(query.getCustomerSid())){ + if (StringUtils.isBlank(query.getCustomerSid())) { return rb.setMsg("参数不全"); } - if(StringUtils.isNotBlank(query.getState())){ - qw.eq("payStatus",query.getState()); + if (StringUtils.isNotBlank(query.getState())) { + qw.eq("payStatus", query.getState()); } - qw.eq("userSid",query.getCustomerSid()); + qw.eq("userSid", query.getCustomerSid()); qw.orderByDesc("createTime"); IPage pagging = baseMapper.orderList(page, qw); - SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (OrdOrderVo record : pagging.getRecords()) { - List details=ordOrderDetailService.list(new QueryWrapper().eq("orderSid",record.getSid())); - List urls=new ArrayList<>(); + List details = ordOrderDetailService.list(new QueryWrapper().eq("orderSid", record.getSid())); + List urls = new ArrayList<>(); record.getCreateTime(); - if(record.getPayStatus()==2){ + if (record.getPayStatus() == 2) { //1>2 1 、1<2 -1 、1=2 0 - int k= DateUtil.parse(sdf.format(new Date())).compareTo(DateUtil.offsetMinute(record.getCreateTime(),10)); - if(k!=-1){ + int k = DateUtil.parse(sdf.format(new Date())).compareTo(DateUtil.offsetMinute(record.getCreateTime(), 10)); + if (k != -1) { record.setPayStatus(3); - OrdOrder r=baseMapper.selectOne(new QueryWrapper().eq("sid",record.getSid())); + OrdOrder r = baseMapper.selectOne(new QueryWrapper().eq("sid", record.getSid())); r.setPayStatus(3); baseMapper.updateById(r); } } - for (OrdOrderDetail detail : details) { - LpkGoods lpkGoods=lpkGoodsService.getOne(new QueryWrapper().eq("sid",detail.getGoodsSid())); - urls.add(fileUploadComponent.getUrlPrefix()+lpkGoods.getPicUrl()); + for (OrdOrderDetail detail : details) { + LpkGoods lpkGoods = lpkGoodsService.getOne(new QueryWrapper().eq("sid", detail.getGoodsSid())); + urls.add(fileUploadComponent.getUrlPrefix() + lpkGoods.getPicUrl()); } - record.setCount(String.valueOf(details.size())); - record.setPicUrls(urls); + record.setCount(String.valueOf(details.size())); + record.setPicUrls(urls); } - if(query.getState().equals("2")){ - pagging.setRecords(pagging.getRecords().stream().filter(s->s.getPayStatus()!=3).collect(Collectors.toList())); + if (query.getState().equals("2")) { + pagging.setRecords(pagging.getRecords().stream().filter(s -> s.getPayStatus() != 3).collect(Collectors.toList())); } PagerVo p = PagerUtil.pageToVo(pagging, null); - return rb.success().setData(p); + return rb.success().setData(p); } + public ResultBean getOrderDetails(String sid) { - ResultBean rb=new ResultBean().fail(); + ResultBean rb = new ResultBean().fail(); OrdOrderVo pagging = baseMapper.getOrderDetails(sid); - if(StringUtils.isBlank(sid)){ + if (StringUtils.isBlank(sid)) { return rb.setMsg("参数不全"); } - List details=ordOrderDetailService.list(new QueryWrapper().eq("orderSid",pagging.getSid())); - if(StringUtils.isBlank(pagging.getMeet())){ + List details = ordOrderDetailService.list(new QueryWrapper().eq("orderSid", pagging.getSid())); + if (StringUtils.isBlank(pagging.getMeet())) { pagging.setMeet(pagging.getTotalTee()); } DecimalFormat decimalFormat = new DecimalFormat("#0.00"); - pagging.setSurcharge(removeZeros(String.valueOf(decimalFormat.format(Double.valueOf(pagging.getTotalTee())-Double.valueOf(pagging.getMeet()))))); + pagging.setSurcharge(removeZeros(String.valueOf(decimalFormat.format(Double.valueOf(pagging.getTotalTee()) - Double.valueOf(pagging.getMeet()))))); for (OrdOrderDetail detail : details) { - LpkGoods lpkGoods=lpkGoodsService.getOne(new QueryWrapper().eq("sid",detail.getGoodsSid())); - detail.setPicUrl(fileUploadComponent.getUrlPrefix()+lpkGoods.getPicUrl()); - detail.setRemarks(removeZeros(String.valueOf(detail.getNumofPart()))+"斤/份,"+"共"+detail.getPartNumber()+"份"); + LpkGoods lpkGoods = lpkGoodsService.getOne(new QueryWrapper().eq("sid", detail.getGoodsSid())); + detail.setPicUrl(fileUploadComponent.getUrlPrefix() + lpkGoods.getPicUrl()); + detail.setRemarks(removeZeros(String.valueOf(detail.getNumofPart())) + "斤/份," + "共" + detail.getPartNumber() + "份"); } pagging.setOrdOrderDetails(details); - SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long milli = DateUtil.current(); pagging.setNowDate(milli); - pagging.setEndTime(sdf1.format(DateUtil.offsetMinute(pagging.getCreateTime(),pagging.getTimeRemarks()))); - if(pagging.getPayStatus()==2){ - PayResult result=new PayResult(); - if(details.size()>1){ - result.setGoods(details.get(0).getGoodsName().toString()+"等"+(details.size()-1)+"件商品"); - }else{ - result.setGoods(details.get(0).getGoodsName().toString()+"商品"); + pagging.setEndTime(sdf1.format(DateUtil.offsetMinute(pagging.getCreateTime(), pagging.getTimeRemarks()))); + if (pagging.getPayStatus() == 2) { + PayResult result = new PayResult(); + if (details.size() > 1) { + result.setGoods(details.get(0).getGoodsName().toString() + "等" + (details.size() - 1) + "件商品"); + } else { + result.setGoods(details.get(0).getGoodsName().toString() + "商品"); } result.setPrice(pagging.getTotalTee()); // result.setOrderId(rbData.getOutTradeNo()); result.setOrderId(pagging.getOutTradeNo()); - result.setRemainder(String.valueOf(10*60)); + result.setRemainder(String.valueOf(10 * 60)); - PayUrl payUrl=new PayUrl(); + PayUrl payUrl = new PayUrl(); payUrl.setUrl("https://supervise.yxtsoft.com/wxPay/order/pay"); - PayParams aVoid=new PayParams(); + PayParams aVoid = new PayParams(); aVoid.setMainSid(pagging.getMainSid()); payUrl.setParams(aVoid); - OrderUrl orderUrl=new OrderUrl(); - OrderParams orderParams=new OrderParams(); + OrderUrl orderUrl = new OrderUrl(); + OrderParams orderParams = new OrderParams(); orderParams.setMainSid(""); orderUrl.setParams(orderParams); - TradeNoUrl tradeNoUrl=new TradeNoUrl(); + TradeNoUrl tradeNoUrl = new TradeNoUrl(); tradeNoUrl.setUrl("https://supervise.yxtsoft.com/wxPay/order/orderQuery"); - TradeParams tradeParams=new TradeParams(); + TradeParams tradeParams = new TradeParams(); tradeParams.setMainSid(pagging.getMainSid()); tradeNoUrl.setParams(tradeParams); // result.setOrder_url(orderUrl); result.setPay_url(payUrl); result.setTrade_no_url(tradeNoUrl); - String [] a =new String []{"pay"}; + String[] a = new String[]{"pay"}; result.setBus(a); pagging.setResult(result); } - return rb.success().setData(pagging); + return rb.success().setData(pagging); } public ResultBean changePayState(String sid) { - ResultBean rb=new ResultBean().fail(); - if(StringUtils.isBlank(sid)){ + ResultBean rb = new ResultBean().fail(); + if (StringUtils.isBlank(sid)) { return rb.setMsg("参数不全"); } - OrdOrder order=baseMapper.selectOne(new QueryWrapper().eq("sid",sid)); - if(order.getPayStatus()==2){ + OrdOrder order = baseMapper.selectOne(new QueryWrapper().eq("sid", sid)); + if (order.getPayStatus() == 2) { order.setPayStatus(3); baseMapper.updateById(order); } - return rb.success().setData(order); + return rb.success().setData(order); } + public ResultBean getPreOrder(OrdOrderQuery query) { - ResultBean rb=new ResultBean().fail(); - if(StringUtils.isBlank(query.getMainSid())){ + ResultBean rb = new ResultBean().fail(); + if (StringUtils.isBlank(query.getMainSid())) { return rb.setMsg("参数不全"); } - OrdOrder order=baseMapper.selectOne(new QueryWrapper().eq("mainSid",query.getMainSid())); + OrdOrder order = baseMapper.selectOne(new QueryWrapper().eq("mainSid", query.getMainSid())); order.setCreateTime(DateUtil.parse(query.getPayTime())); baseMapper.updateById(order); - return rb.success().setData(order); + return rb.success().setData(order); } /** * 去除多余.0 + * * @param num * @return */ @@ -546,4 +551,18 @@ public class OrdOrderService extends MybatisBaseService list = baseMapper.listGoodsInfoByOutTradeNo(outTradeNo); + for (int i = 0; i < list.size(); i++) { + if (i == 0) { + names = list.get(i).getGoodsName() + "*" + list.get(i).getGoodsNumber(); + } else { + names = names + "," + list.get(i).getGoodsName() + "*" + list.get(i).getGoodsNumber(); + } + } + return names; + } + }