Merge remote-tracking branch 'origin/master'
# Conflicts:
# springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
# springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ShopApi.java
# springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComShopOrderDAO.java
# springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopOrderService.java
# springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOrderServiceImpl.java
New file |
| | |
| | | package com.panzhihua.common.model.dtos.shop; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.annotation.JsonIgnore; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @ClasssName OrderShipDTO |
| | | * @Description TODO |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | @Data |
| | | @ApiModel("订单导出信息") |
| | | public class ComShopFundsExportDTO { |
| | | |
| | | @ApiModelProperty(value = "订单编号",example = "316356541616") |
| | | private String orderNo; |
| | | @ApiModelProperty(value = "支付时间-开始",example = "2021-03-18 19:59:06") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date payTimeStart; |
| | | @ApiModelProperty(value = "支付时间-结束",example = "2021-04-18 19:59:14") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date payTimeEnd; |
| | | @ApiModelProperty(value = "订单ID", notes = "如果指定了订单ID,其它搜索条件将被忽略,只导出指定订单") |
| | | private Long[] orderIds; |
| | | @JsonIgnore |
| | | private Long userId; |
| | | } |
New file |
| | |
| | | package com.panzhihua.common.model.dtos.shop; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.NonNull; |
| | | |
| | | import javax.validation.constraints.Min; |
| | | |
| | | /** |
| | | * @ClasssName OrderShipDTO |
| | | * @Description TODO |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | @Data |
| | | @ApiModel("订单发货信息") |
| | | public class ComShopOrderDeliverDTO { |
| | | @ApiModelProperty(value = "订单号") |
| | | private String orderNo; |
| | | @ApiModelProperty(value = "订单ID") |
| | | private Long orderId; |
| | | } |
New file |
| | |
| | | package com.panzhihua.common.model.dtos.shop; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.annotation.JsonIgnore; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @ClasssName OrderShipDTO |
| | | * @Description TODO |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | @Data |
| | | @ApiModel("订单导出信息") |
| | | public class ComShopOrderExportDTO { |
| | | |
| | | @ApiModelProperty(value = "订单编号",example = "316356541616") |
| | | private String orderNo; |
| | | @ApiModelProperty(value = "用户账号") |
| | | private String userAccount; |
| | | @ApiModelProperty(value = "收货人",example = "张三") |
| | | private String receiverAccount; |
| | | @ApiModelProperty(value = "收货人电话",example = "13123456789") |
| | | private String receiverPhone; |
| | | @ApiModelProperty(value = "商品",example = "鞋") |
| | | private String goodsName; |
| | | @ApiModelProperty(value = "订单状态(1.待付款 2.代发货 3.待收货 4.待评价 5.已完成 6.已取消)",example = "1") |
| | | private Integer status; |
| | | @ApiModelProperty(value = "下单时间-开始",example = "2021-04-01 19:58:41") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private String createAtStart; |
| | | @ApiModelProperty(value = "下单时间-结束",example = "2021-04-18 19:58:54") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date createAtEnd; |
| | | @ApiModelProperty(value = "订单ID", notes = "如果指定了订单ID,其它搜索条件将被忽略,只导出指定订单") |
| | | private Long[] orderIds; |
| | | @JsonIgnore |
| | | private Long userId; |
| | | } |
New file |
| | |
| | | package com.panzhihua.common.model.dtos.shop; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @ClasssName OrderShipDTO |
| | | * @Description TODO |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | @Data |
| | | @ApiModel("订单发货信息") |
| | | public class ComShopOrderShipDTO { |
| | | @ApiModelProperty(value = "订单号") |
| | | private String orderNo; |
| | | @ApiModelProperty(value = "ID") |
| | | private Long orderId; |
| | | @ApiModelProperty(value = "物流公司") |
| | | private String logisticsCompany; |
| | | @ApiModelProperty(value = "物流单号") |
| | | private String logisticsNo; |
| | | } |
New file |
| | |
| | | package com.panzhihua.common.model.dtos.shop; |
| | | |
| | | import com.alibaba.excel.annotation.ExcelProperty; |
| | | import com.alibaba.excel.annotation.format.NumberFormat; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.text.DecimalFormat; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @description: 商城订单导出 |
| | | * @author: Null |
| | | * @date: 2021-4-18 16:13:21 |
| | | */ |
| | | @Data |
| | | public class ExcelShopFundsDTO { |
| | | |
| | | @ExcelProperty("金额") |
| | | @NumberFormat("0.00") |
| | | private BigDecimal totalAmount; |
| | | |
| | | @ExcelProperty("支付时间") |
| | | private String payTime; |
| | | |
| | | @ExcelProperty("订单编号") |
| | | private String orderNo; |
| | | |
| | | @ExcelProperty("支付方式") |
| | | private String payType; |
| | | |
| | | @ExcelProperty("收支类型") |
| | | private String type; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.common.model.dtos.shop; |
| | | |
| | | import com.alibaba.excel.annotation.ExcelProperty; |
| | | import com.alibaba.excel.annotation.format.NumberFormat; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @description: 商城订单导出 |
| | | * @author: cedoo |
| | | * @date: 2021-4-18 16:13:21 |
| | | */ |
| | | @Data |
| | | public class ExcelShopOrderDTO { |
| | | |
| | | @ExcelProperty("商品总额") |
| | | @NumberFormat("0.00") |
| | | private BigDecimal goodsTotal; |
| | | |
| | | @ExcelProperty("全部商品") |
| | | private String goodsName; |
| | | |
| | | @ExcelProperty("数量总计") |
| | | private Integer goodsCount; |
| | | |
| | | @ExcelProperty("用户账号") |
| | | private String account; |
| | | |
| | | @ExcelProperty("收货人") |
| | | private String receiver; |
| | | |
| | | @ExcelProperty("收货人电话") |
| | | private String receiverPhone; |
| | | |
| | | @ExcelProperty("收货地址") |
| | | private String receiverAddress; |
| | | |
| | | @ExcelProperty("店铺名称") |
| | | private String storeName; |
| | | |
| | | @ExcelProperty("备注") |
| | | private String remark; |
| | | |
| | | @ExcelProperty("订单状态") |
| | | private String status; |
| | | |
| | | @ExcelProperty("下单时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date createAt; |
| | | |
| | | @ExcelProperty("付款时间") |
| | | private String payTime; |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.common.model.dtos.shop; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.annotation.JsonIgnore; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @ClasssName OrderSearchDTO |
| | | * @Description 资金管理DTO |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | @Data |
| | | @ApiModel("资金管理查询参数") |
| | | public class PageComShopFundsSearchDTO { |
| | | @ApiModelProperty(value = "订单编号",example = "316356541616") |
| | | private String orderNo; |
| | | @ApiModelProperty(value = "支付时间-开始",example = "2021-03-18 19:59:06") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date payTimeStart; |
| | | @ApiModelProperty(value = "支付时间-结束",example = "2021-04-18 19:59:14") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date payTimeEnd; |
| | | @ApiModelProperty(value = "分页-当前页数",example = "1", required = true) |
| | | private Long pageNum; |
| | | @ApiModelProperty(value = "分页-每页记录数",example = "10", required = true) |
| | | private Long pageSize; |
| | | @JsonIgnore |
| | | private Long userId; |
| | | } |
| | |
| | | package com.panzhihua.common.model.dtos.shop; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.annotation.JsonIgnore; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | |
| | | private String receiverPhone; |
| | | @ApiModelProperty(value = "商品",example = "鞋") |
| | | private String goodsName; |
| | | @ApiModelProperty(value = "店铺名称",example = "小二的店") |
| | | private String storeName; |
| | | @ApiModelProperty(value = "订单状态(1.待付款 2.代发货 3.待收货 4.待评价 5.已完成 6.已取消)",example = "1") |
| | | private Date status; |
| | | private Integer status; |
| | | @ApiModelProperty(value = "下单时间-开始",example = "1") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private String createAtStart; |
| | | @ApiModelProperty(value = "下单时间-结束",example = "1") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date createAtEnd; |
| | | @ApiModelProperty(value = "分页-当前页数",example = "1", required = true) |
| | | private Long pageNum; |
New file |
| | |
| | | package com.panzhihua.common.model.helper; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.core.JsonGenerator; |
| | | import com.fasterxml.jackson.databind.BeanProperty; |
| | | import com.fasterxml.jackson.databind.JsonMappingException; |
| | | import com.fasterxml.jackson.databind.JsonSerializer; |
| | | import com.fasterxml.jackson.databind.SerializerProvider; |
| | | import com.fasterxml.jackson.databind.ser.ContextualSerializer; |
| | | |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.DecimalFormat; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * BigDecimal序列化(默认保留二位小数和四舍五入) |
| | | * @author cedoo |
| | | * @date 2021-4-19 01:24:28 |
| | | */ |
| | | public class SerializerBigDecimal extends JsonSerializer<BigDecimal> implements ContextualSerializer { |
| | | |
| | | protected DecimalFormat decimalFormat; |
| | | |
| | | public SerializerBigDecimal() { |
| | | } |
| | | |
| | | public SerializerBigDecimal(DecimalFormat decimalFormat) { |
| | | this.decimalFormat = decimalFormat; |
| | | } |
| | | |
| | | @Override |
| | | public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException { |
| | | |
| | | if(Objects.isNull(value)) { |
| | | gen.writeNull(); |
| | | } else { |
| | | if(null != decimalFormat) { |
| | | gen.writeNumber(decimalFormat.format(value)); |
| | | }else { |
| | | gen.writeNumber(value.setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) |
| | | throws JsonMappingException { |
| | | |
| | | JsonFormat.Value format = findFormatOverrides(prov, property, handledType()); |
| | | if (format == null) { |
| | | return this; |
| | | } |
| | | |
| | | if (format.hasPattern()) { |
| | | DecimalFormat decimalFormat = new DecimalFormat(format.getPattern()); |
| | | decimalFormat.setRoundingMode(RoundingMode.HALF_UP); |
| | | return new SerializerBigDecimal(decimalFormat); |
| | | } |
| | | |
| | | return this; |
| | | } |
| | | |
| | | protected JsonFormat.Value findFormatOverrides(SerializerProvider provider, |
| | | BeanProperty prop, Class<?> typeForDefaults) |
| | | { |
| | | if (prop != null) { |
| | | return prop.findPropertyFormat(provider.getConfig(), typeForDefaults); |
| | | } |
| | | return provider.getDefaultPropertyFormat(typeForDefaults); |
| | | } |
| | | } |
New file |
| | |
| | | package com.panzhihua.common.model.vos.shop; |
| | | |
| | | import com.alibaba.excel.annotation.ExcelProperty; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.annotation.JsonIgnore; |
| | | import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
| | | import com.panzhihua.common.model.helper.SerializerBigDecimal; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | @ApiModel("商户资金订单信息") |
| | | public class ComShopFundsOrderVO { |
| | | |
| | | @ApiModelProperty("金额") |
| | | //@JsonFormat(pattern = "0.00", shape = JsonFormat.Shape.STRING) |
| | | //@JsonSerialize(using = SerializerBigDecimal.class) |
| | | private BigDecimal totalAmount; |
| | | |
| | | @ApiModelProperty("支付时间") |
| | | private String payTime; |
| | | |
| | | @ApiModelProperty("订单编号") |
| | | private String orderNo; |
| | | |
| | | @ApiModelProperty("支付方式") |
| | | private String payType; |
| | | |
| | | @ApiModelProperty("收支类型") |
| | | private String type; |
| | | |
| | | @ApiModelProperty("订单ID") |
| | | private long id; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.common.model.vos.shop; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.annotation.JsonIgnore; |
| | | import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
| | | import com.panzhihua.common.model.helper.SerializerBigDecimal; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | @ApiModel("商户资金统计信息") |
| | | public class ComShopFundsVO { |
| | | |
| | | @ApiModelProperty(value = "当日收入") |
| | | private BigDecimal todayTotal; |
| | | |
| | | @ApiModelProperty(value = "本周收入") |
| | | private BigDecimal weekTotal; |
| | | |
| | | @ApiModelProperty(value = "本月收入") |
| | | private BigDecimal monthTotal; |
| | | |
| | | @JsonIgnore |
| | | private Long userId; |
| | | |
| | | } |
| | |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @GetMapping("/shop/changeShopGoodsStatus") |
| | | @PostMapping("/shop/changeShopGoodsStatus") |
| | | R changeStatus(@RequestParam("id") Long id,@RequestParam("status")Integer status); |
| | | /** |
| | | * 结果 |
| | |
| | | */ |
| | | @GetMapping("/shop/capitalDetailByStore") |
| | | R capitalDetailByStore(@RequestParam("id") Long id); |
| | | |
| | | |
| | | /** |
| | | * 订单发货 |
| | | * @param orderShipDTO 商城订单发货信息 |
| | | * @return 发货结果 |
| | | */ |
| | | @PostMapping("/shop/shipOrder") |
| | | R shipOrder(@RequestBody ComShopOrderShipDTO orderShipDTO); |
| | | |
| | | /** |
| | | * 订单配送 |
| | | * @param deliverDTO 订单信息 |
| | | * @return 配送结果 |
| | | */ |
| | | @PostMapping("/shop/deliverOrder") |
| | | R deliverOrder(@RequestBody ComShopOrderDeliverDTO deliverDTO); |
| | | |
| | | /** |
| | | * 订单完成配送 |
| | | * @param deliverDTO 订单信息 |
| | | * @return 配送完成结果 |
| | | */ |
| | | @PostMapping("/shop/finishDeliverOrder") |
| | | R finishDeliverOrder(@RequestBody ComShopOrderDeliverDTO deliverDTO); |
| | | |
| | | /** |
| | | * 获取用户商户详情 |
| | | * @param userId 用户ID |
| | | */ |
| | | @GetMapping("/shop/getUserStoreInfo") |
| | | R getUserStoreInfo(@RequestParam("userId") Long userId); |
| | | |
| | | /** |
| | | * 订单导出信息 |
| | | * @param comShopOrderExportDTO 订单导出信息 |
| | | * @return 订单导出信息 |
| | | */ |
| | | @PostMapping("/shop/shopOrderExportData") |
| | | R shopOrderExportData(@RequestBody ComShopOrderExportDTO comShopOrderExportDTO); |
| | | |
| | | /** |
| | | * 资金管理导出信息 |
| | | * @param comShopFundsExportDTO 资金管理导出信息 |
| | | * @return 资金管理导出信息 |
| | | */ |
| | | @PostMapping("/shop/shopOrderFundsExportData") |
| | | R shopOrderFundsExportData(@RequestBody ComShopFundsExportDTO comShopFundsExportDTO ); |
| | | |
| | | /** |
| | | * 店铺资金统计信息 |
| | | * @param userId 用户ID |
| | | * @return 店铺资金统计信息 |
| | | */ |
| | | @GetMapping("/shop/getFundsStat") |
| | | R getFundsStat(@RequestParam("userId") Long userId); |
| | | |
| | | /** |
| | | * 店铺资金统计信息 |
| | | * @param pageComShopFundsSearchDTO 店铺资金 |
| | | * @return 店铺资金统计信息 |
| | | */ |
| | | @PostMapping("/shop/pageShopFunds") |
| | | R pageShopFunds(@RequestBody PageComShopFundsSearchDTO pageComShopFundsSearchDTO); |
| | | } |
| | |
| | | ipAddress = "["+jsonObject.get("country")+"/" +jsonObject.get("city")+"]"; |
| | | } |
| | | }catch(Exception e){ |
| | | |
| | | log.error("获取IP所属地址出错",e); |
| | | e.printStackTrace(); |
| | | log.error("获取IP所属地址出错"); |
| | | //e.printStackTrace(); |
| | | } |
| | | return ipAddress; |
| | | } |
| | |
| | | <module>community_backstage</module> |
| | | <module>service_community</module> |
| | | <module>service_user</module> |
| | | <module>shop_backstage</module> |
| | | </modules> |
| | | <packaging>pom</packaging> |
| | | |
| | |
| | | return comShopStoreService.getOneInfo(id); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取用户商铺详细 |
| | | * |
| | | * @param userId 用户ID |
| | | * @return |
| | | */ |
| | | @GetMapping("/getUserStoreInfo") |
| | | public R getUserStoreInfo(@RequestParam("userId") Long userId) { |
| | | return comShopStoreService.getUserStoreInfo(userId); |
| | | } |
| | | |
| | | /** |
| | | * 添加商城后台日志 |
| | | * |
| | |
| | | |
| | | |
| | | /** |
| | | * 商品列表-分页查询-运营后台 |
| | | * 商品列表-分页查询 |
| | | * @param pageComShopGoodsDTO 查询参数 |
| | | * @return PageShopStoreVO |
| | | */ |
| | |
| | | return comShopGoodsService.deleteShopGoods(id); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 修改商品状态 |
| | | * @param id |
| | |
| | | return comShopOrderService.capitalDetailByStore(id); |
| | | } |
| | | |
| | | /** |
| | | * 订单发货 |
| | | * @param orderShipDTO 发货信息 |
| | | * @return 发货结果 |
| | | */ |
| | | @PostMapping("/shipOrder") |
| | | R shipOrder(@RequestBody ComShopOrderShipDTO orderShipDTO){ |
| | | return comShopOrderService.shipOrder(orderShipDTO); |
| | | } |
| | | |
| | | /** |
| | | * 订单配送 |
| | | * @param deliverDTO 订单ID |
| | | * @return 配送结果 |
| | | */ |
| | | @PostMapping("/deliverOrder") |
| | | R deliverOrder(@RequestBody ComShopOrderDeliverDTO deliverDTO){ |
| | | Long orderId = deliverDTO.getOrderId(); |
| | | return comShopOrderService.deliverOrder(orderId); |
| | | } |
| | | /** |
| | | * 订单配送 |
| | | * @param deliverDTO 订单ID |
| | | * @return 配送完成 |
| | | */ |
| | | @PostMapping("/finishDeliverOrder") |
| | | R finishDeliverOrder(@RequestBody ComShopOrderDeliverDTO deliverDTO){ |
| | | Long orderId = deliverDTO.getOrderId(); |
| | | return comShopOrderService.finishDeliverOrder(orderId); |
| | | } |
| | | |
| | | /** |
| | | * 订单导出信息 |
| | | * @param comShopOrderExportDTO 订单导出信息 |
| | | * @return 订单导出信息 |
| | | */ |
| | | @PostMapping("/shopOrderExportData") |
| | | R shopOrderExportData(@RequestBody ComShopOrderExportDTO comShopOrderExportDTO){ |
| | | return comShopOrderService.shopOrderExportData(comShopOrderExportDTO); |
| | | } |
| | | |
| | | /** |
| | | * 资金管理导出信息 |
| | | * @param comShopFundsExportDTO 资金管理导出信息 |
| | | * @return 资金管理导出信息 |
| | | */ |
| | | @PostMapping("/shopOrderFundsExportData") |
| | | R shopOrderFundsExportData(@RequestBody ComShopFundsExportDTO comShopFundsExportDTO){ |
| | | return comShopOrderService.shopOrderFundsExportData(comShopFundsExportDTO); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 用户资金统计信息 |
| | | * @param userId 用户ID |
| | | * @return 统计信息 |
| | | */ |
| | | @GetMapping("/getFundsStat") |
| | | R getFundsStat(@RequestParam("userId") Long userId){ |
| | | return comShopOrderService.getFundsStat(userId); |
| | | } |
| | | |
| | | /** |
| | | * 店铺资金统计信息 |
| | | * @param pageComShopFundsSearchDTO 店铺资金 |
| | | * @return 店铺资金统计信息 |
| | | */ |
| | | @PostMapping("/pageShopFunds") |
| | | R pageShopFunds(@RequestBody PageComShopFundsSearchDTO pageComShopFundsSearchDTO){ |
| | | return comShopOrderService.pageShopFunds(pageComShopFundsSearchDTO); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.panzhihua.common.model.dtos.shop.PageComOrderListDTO; |
| | | import com.panzhihua.common.model.vos.shop.*; |
| | | import com.panzhihua.common.model.dtos.shop.*; |
| | | import com.panzhihua.common.model.vos.shop.*; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.panzhihua.common.model.dtos.PageDTO; |
| | | import com.panzhihua.common.model.dtos.shop.PageComShopOrderSearchDTO; |
| | | import com.panzhihua.common.model.vos.shop.ComShopOrderVO; |
| | | import com.panzhihua.service_community.model.dos.ComShopOrderDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | |
| | | IPage<ComShopOrderPageVO> pageOrderList(Page page,@Param("comOrderListDTO") PageComOrderListDTO comOrderListDTO); |
| | | |
| | | @Select("<script> " + |
| | | "SELECT ordr.id, ordr.store_id, ordr. user_id, ordr.order_no, ordr.pay_no, \n" + |
| | | " ordr.wx_tarde_no, ordr.status, ordr.pay_status, ordr.receiver_id, \n" + |
| | | " ordr.total_amount, ordr.discount_amount, ordr.pay_amount, ordr.pay_type, \n" + |
| | | " ordr.pay_time, ordr.delivery_type, ordr.delivery_status, ordr.logistics_company, \n" + |
| | | " ordr.logistics_no, ordr.create_at \n" + |
| | | " FROM com_shop_order ordr LEFT JOIN com_shop_order_goods goods ON ordr.id = goods.order_id \n" + |
| | | " order by create_at desc"+ |
| | | "SELECT sr.id, sr.store_id, sr.user_id, sr.order_no, sr.pay_no, \n" + |
| | | " sr.wx_tarde_no, sr.status, sr.pay_status, sr.receiver_id, \n" + |
| | | " sr.total_amount, sr.discount_amount, sr.pay_amount, sr.pay_type, \n" + |
| | | " sr.pay_time, sr.delivery_type, sr.delivery_status, sr.logistics_company, \n" + |
| | | " sr.logistics_no, sr.create_at \n" + |
| | | " FROM com_shop_order sr LEFT JOIN com_shop_order_goods og ON sr.id = og.order_id \n" + |
| | | " LEFT JOIN com_shop_goods_attr ga ON og.goods_attr_id = ga.id \n" + |
| | | " LEFT JOIN sys_user su ON sr.user_id = su.user_id \n" + |
| | | " LEFT JOIN com_shop_user_address uad ON sr.receiver_id = uad.id \n" + |
| | | " LEFT JOIN com_shop_store ss ON sr.store_id = ss.id \n" + |
| | | " WHERE sr.delete_status = 1" + |
| | | "<if test='pageComShopOrderSearchDTO.userId != null'>" + |
| | | " AND sr.user_id = #{pageComShopOrderSearchDTO.userId} " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.createAtStart != null'>" + |
| | | " AND #{pageComShopOrderSearchDTO.createAtStart} <![CDATA[<=]]> sr.create_at " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.createAtEnd != null'>" + |
| | | " AND sr.create_at <![CDATA[<=]]> #{pageComShopOrderSearchDTO.createAtEnd} " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.orderNo != null '>" + |
| | | " AND sr.order_no = #{pageComShopOrderSearchDTO.orderNo} " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.userAccount != null '>" + |
| | | " AND su.phone = #{pageComShopOrderSearchDTO.userAccount} " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.receiverAccount != null '>" + |
| | | " AND uad.name = #{pageComShopOrderSearchDTO.receiverAccount} " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.receiverPhone != null '>" + |
| | | " AND uad.phone = #{pageComShopOrderSearchDTO.receiverPhone} " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.goodsName != null'>" + |
| | | " AND og.goods_name like concat('%', #{pageComShopOrderSearchDTO.goodsName}, '%') " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.status != null '>" + |
| | | " AND sr.status = #{pageComShopOrderSearchDTO.status} " + |
| | | " </if> " + |
| | | "<if test='pageComShopOrderSearchDTO.storeName != null '>" + |
| | | " AND ss.name like concat('%', #{pageComShopOrderSearchDTO.storeName}, '%') " + |
| | | " </if> " + |
| | | " ORDER BY sr.create_at "+ |
| | | "</script>") |
| | | IPage<ComShopOrderVO> pageOrderBy(PageDTO page,@Param("pageComShopOrderSearchDTO") PageComShopOrderSearchDTO pageComShopOrderSearchDTO); |
| | | IPage<ComShopOrderSearchVO> pageOrderBy(Page page, @Param("pageComShopOrderSearchDTO") PageComShopOrderSearchDTO pageComShopOrderSearchDTO); |
| | | |
| | | @Select("<script> " + |
| | | "SELECT sr.total_amount AS goods_total, GROUP_CONCAT(og.goods_name) AS goods_name , count(og.id) AS goods_count, " + |
| | | " su.phone AS account, uad.name AS receiver, uad.phone AS receiverPhone, \n" + |
| | | " concat(uad.province_name, uad.city_name, uad.district_name, uad.detail_address) AS receiver_address, ss.name AS storeName, sr.remark," + |
| | | " CASE\n" + |
| | | " WHEN sr.`status` = 1 THEN '待付款' \n" + |
| | | " WHEN sr.`status` = 2 THEN '待发货' \n" + |
| | | " WHEN sr.`status` = 3 THEN '待收货' \n" + |
| | | " WHEN sr.`status` = 4 THEN '待评价' \n" + |
| | | " WHEN sr.`status` = 5 THEN '已完成' \n" + |
| | | " WHEN sr.`status` = 5 THEN '已取消' \n" + |
| | | " ELSE '---' \n" + |
| | | " END AS 'status' , " + |
| | | " sr.create_at, " + |
| | | " CASE WHEN sr.pay_time IS NOT NULL THEN sr.pay_time ELSE '---' END AS pay_time " + |
| | | " FROM com_shop_order sr LEFT JOIN com_shop_order_goods og ON sr.id = og.order_id \n" + |
| | | " LEFT JOIN com_shop_goods_attr ga ON og.goods_attr_id = ga.id \n" + |
| | | " LEFT JOIN sys_user su ON sr.user_id = su.user_id \n" + |
| | | " LEFT JOIN com_shop_user_address uad ON sr.receiver_id = uad.id \n" + |
| | | " LEFT JOIN com_shop_store ss ON sr.store_id = ss.id \n" + |
| | | " WHERE sr.delete_status = 1" + |
| | | "<if test='comShopOrderExportDTO.userId != null'>" + |
| | | " AND ss.user_id = #{comShopOrderExportDTO.userId} " + |
| | | " </if> " + |
| | | "<if test='comShopOrderExportDTO.orderIds != null and comShopOrderExportDTO.orderIds.length>0 '>" + |
| | | " AND sr.id in " + |
| | | "<foreach collection='comShopOrderExportDTO.orderIds' item='id' index='index' open='(' close=')' separator=',' >\n" + |
| | | " #{id}" + |
| | | "</foreach>" + |
| | | " </if> " + |
| | | |
| | | "<if test='comShopOrderExportDTO.orderIds == null or comShopOrderExportDTO.orderIds.length==0 '>" + |
| | | "<if test='comShopOrderExportDTO.createAtStart != null '>" + |
| | | " AND #{comShopOrderExportDTO.createAtStart} <![CDATA[<=]]> sr.create_at " + |
| | | " </if> " + |
| | | "<if test='comShopOrderExportDTO.createAtEnd != null'>" + |
| | | " AND sr.create_at <![CDATA[<=]]> #{comShopOrderExportDTO.createAtEnd} " + |
| | | " </if> " + |
| | | "<if test='comShopOrderExportDTO.orderNo != null '>" + |
| | | " AND sr.order_no = #{comShopOrderExportDTO.orderNo} " + |
| | | " </if> " + |
| | | "<if test='comShopOrderExportDTO.userAccount != null '>" + |
| | | " AND su.phone = #{comShopOrderExportDTO.userAccount} " + |
| | | " </if> " + |
| | | "<if test='comShopOrderExportDTO.receiverAccount != null'>" + |
| | | " AND uad.name = #{comShopOrderExportDTO.receiverAccount} " + |
| | | " </if> " + |
| | | "<if test='comShopOrderExportDTO.receiverPhone != null '>" + |
| | | " AND uad.phone = #{comShopOrderExportDTO.receiverPhone} " + |
| | | " </if> " + |
| | | "<if test='comShopOrderExportDTO.goodsName != null '>" + |
| | | " AND og.name like concat('%', #{comShopOrderExportDTO.goodsName}, '%') " + |
| | | " </if> " + |
| | | "<if test='comShopOrderExportDTO.status != null '>" + |
| | | " AND sr.status = #{comShopOrderExportDTO.status} " + |
| | | " </if> " + |
| | | " </if> " + |
| | | " GROUP BY sr.id ORDER BY sr.create_at "+ |
| | | "</script>") |
| | | IPage<ExcelShopOrderDTO> selectOrderExport(Page page, @Param("comShopOrderExportDTO") ComShopOrderExportDTO comShopOrderExportDTO); |
| | | |
| | | @Select("<script> " + |
| | | "SELECT sr.total_amount, sr.pay_time, sr.order_no, \n" + |
| | | " CASE WHEN sr.pay_type = 1 THEN '微信支付' ELSE '' END AS payType, \n" + |
| | | " '收入' AS 'type' " + |
| | | "FROM com_shop_order sr LEFT JOIN com_shop_store st ON sr.store_id = st.id \n" + |
| | | " WHERE sr.pay_status = 2 AND sr.delete_status=1 " + |
| | | "<if test='comShopFundsExportDTO.userId != null'>" + |
| | | " AND st.sys_user_id = #{comShopFundsExportDTO.userId} " + |
| | | " </if> " + |
| | | "<if test='comShopFundsExportDTO.orderIds != null and comShopFundsExportDTO.orderIds.length>0 '>" + |
| | | " AND sr.id in " + |
| | | "<foreach collection='comShopFundsExportDTO.orderIds' item='id' index='index' open='(' close=')' separator=',' >\n" + |
| | | " #{id}" + |
| | | "</foreach>" + |
| | | " </if> " + |
| | | "<if test='comShopFundsExportDTO.orderIds == null or comShopFundsExportDTO.orderIds.length==0 '>" + |
| | | "<if test='comShopFundsExportDTO.payTimeStart != null'>" + |
| | | " AND #{comShopFundsExportDTO.payTimeStart} <![CDATA[<=]]> sr.pay_time " + |
| | | " </if> " + |
| | | "<if test='comShopFundsExportDTO.payTimeEnd != null'>" + |
| | | " AND sr.pay_time <![CDATA[<=]]> #{comShopFundsExportDTO.payTimeEnd} " + |
| | | " </if> " + |
| | | "<if test='comShopFundsExportDTO.orderNo != null '>" + |
| | | " AND sr.order_no = #{comShopFundsExportDTO.orderNo} " + |
| | | " </if> " + |
| | | " </if> " + |
| | | " GROUP BY sr.id ORDER BY sr.create_at "+ |
| | | "</script>") |
| | | IPage<ExcelShopFundsDTO> selectFundsExport(Page page, @Param("comShopFundsExportDTO") ComShopFundsExportDTO comShopFundsExportDTO); |
| | | |
| | | @Select("<script> " + |
| | | " SELECT sys_user_id,\n" + |
| | | " sum(case when abt.days = DATE_FORMAT(NOW(),'%Y%m%d') then abt.t END) AS todayTotal,\n" + |
| | | " sum(case when abt.days = DATE_FORMAT(NOW(),'%Y%u') then abt.t END) AS weekTotal,\n" + |
| | | " sum(case when abt.days = DATE_FORMAT(NOW(),'%Y%m') then abt.t END) AS monthTotal\n" + |
| | | "FROM (\n" + |
| | | "SELECT ss.sys_user_id, (sr.pay_amount) AS t , DATE_FORMAT(sr.pay_time,'%Y%m%d') days\n" + |
| | | "FROM com_shop_order sr LEFT JOIN com_shop_store ss ON sr.store_id = ss.id\n" + |
| | | "WHERE sr.pay_status = 2 AND DATE_FORMAT(sr.pay_time,'%Y%m%d') = DATE_FORMAT(NOW(),'%Y%m%d')\n" + |
| | | "GROUP BY days\n" + |
| | | "UNION \n" + |
| | | "SELECT ss.sys_user_id, sum(sr.pay_amount) AS t, DATE_FORMAT(sr.pay_time,'%Y%u') weeks\n" + |
| | | "FROM com_shop_order sr LEFT JOIN com_shop_store ss ON sr.store_id = ss.id\n" + |
| | | "WHERE sr.pay_status = 2 AND DATE_FORMAT(sr.pay_time,'%Y%u') = DATE_FORMAT(NOW(),'%Y%u')\n" + |
| | | "GROUP BY weeks\n" + |
| | | "UNION \n" + |
| | | "SELECT ss.sys_user_id, sum(sr.pay_amount) AS t, DATE_FORMAT(sr.pay_time,'%Y%m') months\n" + |
| | | "FROM com_shop_order sr LEFT JOIN com_shop_store ss ON sr.store_id = ss.id\n" + |
| | | "WHERE sr.pay_status = 2 AND DATE_FORMAT(sr.pay_time,'%Y%m') = DATE_FORMAT(NOW(),'%Y%m')\n" + |
| | | "GROUP BY months\n" + |
| | | ") abt\n" + |
| | | "GROUP BY abt.sys_user_id "+ |
| | | "</script>") |
| | | ComShopFundsVO queryStatis(Long userId); |
| | | |
| | | @Select("<script> " + |
| | | "SELECT sr.id, sr.total_amount, sr.pay_time, sr.order_no, \n" + |
| | | " CASE WHEN sr.pay_type = 1 THEN '微信支付' ELSE '' END AS payType, \n" + |
| | | " '收入' AS 'type' " + |
| | | "FROM com_shop_order sr LEFT JOIN com_shop_store st ON sr.store_id = st.id \n" + |
| | | " WHERE sr.pay_status = 2 AND sr.delete_status=1 " + |
| | | "<if test='pageComShopFundsSearchDTO.userId != null'>" + |
| | | " AND st.sys_user_id = #{pageComShopFundsSearchDTO.userId} " + |
| | | " </if> " + |
| | | "<if test='pageComShopFundsSearchDTO.payTimeStart != null'>" + |
| | | " AND #{pageComShopFundsSearchDTO.payTimeStart} <![CDATA[<=]]> sr.pay_time " + |
| | | " </if> " + |
| | | "<if test='pageComShopFundsSearchDTO.payTimeEnd != null'>" + |
| | | " AND sr.pay_time <![CDATA[<=]]> #{pageComShopFundsSearchDTO.payTimeEnd} " + |
| | | " </if> " + |
| | | "<if test='pageComShopFundsSearchDTO.orderNo != null '>" + |
| | | " AND sr.order_no = #{pageComShopFundsSearchDTO.orderNo} " + |
| | | " </if> " + |
| | | " GROUP BY sr.id ORDER BY sr.create_at "+ |
| | | "</script>") |
| | | IPage<ComShopFundsOrderVO> pageShopFunds(Page page, @Param("pageComShopFundsSearchDTO") PageComShopFundsSearchDTO pageComShopFundsSearchDTO); |
| | | |
| | | @Select("<script> " + |
| | | "SELECT\n" + |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.panzhihua.common.model.dtos.shop.*; |
| | | import com.panzhihua.common.model.dtos.shop.*; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.service_community.model.dos.ComShopOrderDO; |
| | | |
| | |
| | | */ |
| | | R capitalDetailByStore(Long id); |
| | | |
| | | /** |
| | | * 订单发货 |
| | | * @param orderShipDTO 订单发货信息 |
| | | * @return 发货结果 |
| | | */ |
| | | R shipOrder(ComShopOrderShipDTO orderShipDTO); |
| | | |
| | | /** |
| | | * 订单配送 |
| | | * @param orderId 订单id |
| | | * @return 配送结果 |
| | | */ |
| | | R deliverOrder(Long orderId); |
| | | |
| | | /** |
| | | * 订单完成配送 |
| | | * @param orderId 订单id |
| | | * @return 完成配送结果 |
| | | */ |
| | | R finishDeliverOrder(Long orderId); |
| | | |
| | | /** |
| | | * 获取订单导出数据 |
| | | * @param comShopOrderExportDTO 订单导出参数 |
| | | * @return 订单数据 |
| | | */ |
| | | R shopOrderExportData(ComShopOrderExportDTO comShopOrderExportDTO); |
| | | |
| | | /** |
| | | * 获取资金导出数据 |
| | | * @param comShopFundsExportDTO 资金导出参数 |
| | | * @return 资金数据 |
| | | */ |
| | | R shopOrderFundsExportData(ComShopFundsExportDTO comShopFundsExportDTO); |
| | | |
| | | /** |
| | | * 获取用户资金信息 |
| | | * @param userId 用户ID |
| | | * @return 统计结果 |
| | | */ |
| | | R getFundsStat(Long userId); |
| | | |
| | | /** |
| | | * 获取分页 资金订单数据 |
| | | * @param pageComShopFundsSearchDTO 资金导出参数 |
| | | * @return 资金订单数据 |
| | | */ |
| | | R pageShopFunds(PageComShopFundsSearchDTO pageComShopFundsSearchDTO); |
| | | } |
| | |
| | | * @return |
| | | */ |
| | | R getOneInfo(Long id); |
| | | |
| | | /** |
| | | * 获取用户商铺信息 |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | R getUserStoreInfo(Long userId); |
| | | } |
| | |
| | | package com.panzhihua.service_community.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.service_community.dao.ComShopOrderDAO; |
| | | import com.panzhihua.service_community.model.dos.ComShopOrderDO; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.shop.*; |
| | | import com.panzhihua.common.utlis.OrderNoUtils; |
| | | import com.panzhihua.common.utlis.StringUtils; |
| | |
| | | private ComShopOrderOperateDAO comShopOrderOperateDAO; |
| | | @Resource |
| | | private ComShopOrderGoodsDAO comShopOrderGoodsDAO; |
| | | @Resource |
| | | private ComShopOrderDAO comShopOrderDAO; |
| | | |
| | | /** |
| | | * 订单预览 |
| | |
| | | |
| | | /** |
| | | * 创建订单 |
| | | * |
| | | * @param orderCreateDTO 创建订单请求参数 |
| | | * @return 创建结果 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 分页查询用户订单列表 |
| | | * |
| | | * @param comOrderListDTO 请求参数 |
| | | * @return 查询结果 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 根据订单id查询订单详情 |
| | | * |
| | | * @param orderId 订单id |
| | | * @return 订单详情 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 根据订单id取消订单 |
| | | * |
| | | * @param orderId 订单id |
| | | * @param phone 操作用户手机号 |
| | | * @return 取消结果 |
| | |
| | | |
| | | /** |
| | | * 根据订单id删除订单 |
| | | * |
| | | * @param orderId 订单id |
| | | * @return 删除结果 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 根据订单id确认收货 |
| | | * |
| | | * @param orderId 订单id |
| | | * @param phone 手机号 |
| | | * @return 确认结果 |
| | |
| | | |
| | | /** |
| | | * 统计用户订单数量 |
| | | * |
| | | * @param userId 用户id |
| | | * @return 统计结果 |
| | | */ |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R pageShopOrder(PageComShopOrderSearchDTO pageComShopOrderSearchDTO) { |
| | | public R shipOrder(ComShopOrderShipDTO orderShipDTO) { |
| | | ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderShipDTO.getOrderId()); |
| | | if(comShopOrderDO==null){ |
| | | return R.fail("订单不存在"); |
| | | } |
| | | if(!(comShopOrderDO.getStatus()==2) |
| | | || !(comShopOrderDO.getDeleteStatus()==1)){ |
| | | return R.fail("订单发货失败,订单状态不允许发货"); |
| | | } |
| | | comShopOrderDO.setDeliveryStatus(2); |
| | | comShopOrderDO.setDeliveryType(2); |
| | | comShopOrderDO.setStatus(3); |
| | | comShopOrderDO.setLogisticsCompany(orderShipDTO.getLogisticsCompany()); |
| | | comShopOrderDO.setLogisticsNo(orderShipDTO.getLogisticsNo()); |
| | | int updated = comShopOrderDAO.updateById(comShopOrderDO); |
| | | if(updated==1){ |
| | | return R.ok("发货成功"); |
| | | } |
| | | return R.fail("发货失败!"); |
| | | } |
| | | |
| | | @Override |
| | | public R deliverOrder(Long orderId) { |
| | | ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderId); |
| | | if(comShopOrderDO==null){ |
| | | return R.fail("订单不存在"); |
| | | } |
| | | if(!(comShopOrderDO.getStatus()==2)){ |
| | | return R.fail("当前订单不能配送"); |
| | | } |
| | | comShopOrderDO.setDeliveryStatus(4); |
| | | comShopOrderDO.setDeliveryType(1); |
| | | int updated = comShopOrderDAO.updateById(comShopOrderDO); |
| | | if(updated==1){ |
| | | return R.ok("开始配送"); |
| | | } |
| | | return R.fail("操作失败!"); |
| | | } |
| | | |
| | | @Override |
| | | public R finishDeliverOrder(Long orderId) { |
| | | ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderId); |
| | | if(comShopOrderDO==null){ |
| | | return R.fail("订单不存在"); |
| | | } |
| | | if(!(comShopOrderDO.getDeliveryStatus() == 4)){ |
| | | return R.fail("订单还未开始配送"); |
| | | } |
| | | comShopOrderDO.setDeliveryStatus(5); |
| | | int updated = comShopOrderDAO.updateById(comShopOrderDO); |
| | | if(updated==1){ |
| | | return R.ok("配送完成"); |
| | | } |
| | | return R.fail("操作失败!"); |
| | | } |
| | | |
| | | @Override |
| | | public R shopOrderExportData(ComShopOrderExportDTO comShopOrderExportDTO) { |
| | | Page page = new Page(); |
| | | page.setSize(1000); |
| | | page.setCurrent(1); |
| | | IPage<ExcelShopOrderDTO> excelShopOrderDTO = comShopOrderDAO.selectOrderExport(page, comShopOrderExportDTO); |
| | | return R.ok(excelShopOrderDTO.getRecords()); |
| | | } |
| | | |
| | | @Override |
| | | public R shopOrderFundsExportData(ComShopFundsExportDTO comShopFundsExportDTO) { |
| | | Page page = new Page(); |
| | | page.setSize(1000); |
| | | page.setCurrent(1); |
| | | IPage<ExcelShopFundsDTO> excelShopFundsDTO = comShopOrderDAO.selectFundsExport(page, comShopFundsExportDTO); |
| | | return R.ok(excelShopFundsDTO.getRecords()); |
| | | } |
| | | |
| | | @Override |
| | | public R getFundsStat(Long userId) { |
| | | ComShopFundsVO comShopFundsVO = comShopOrderDAO.queryStatis(userId); |
| | | return R.ok(comShopFundsVO); |
| | | } |
| | | |
| | | @Override |
| | | public R pageShopFunds(PageComShopFundsSearchDTO pageComShopFundsSearchDTO) { |
| | | Long pageNum = pageComShopFundsSearchDTO.getPageNum(); |
| | | Long pageSize = pageComShopFundsSearchDTO.getPageSize(); |
| | | Page page = new Page(); |
| | | if(pageNum==null||0==pageNum.longValue()){ |
| | | pageNum = 1l; |
| | | } |
| | | if(pageSize==null||0==pageSize.longValue()){ |
| | | pageSize = 10l; |
| | | } |
| | | page.setCurrent(pageNum); |
| | | page.setSize(pageSize); |
| | | IPage<ComShopFundsOrderVO> comShopFundsOrderVOIPage = comShopOrderDAO.pageShopFunds(page, pageComShopFundsSearchDTO); |
| | | return R.ok(comShopFundsOrderVOIPage); |
| | | } |
| | | |
| | | @Override |
| | | public R pageShopOrder(PageComShopOrderSearchDTO pageComShopOrderSearchDTO) { |
| | | Long pageNum = pageComShopOrderSearchDTO.getPageNum(); |
| | | Long pageSize = pageComShopOrderSearchDTO.getPageSize(); |
| | | PageDTO page = new PageDTO(); |
| | | Page page = new Page(); |
| | | |
| | | page.setPageNum(pageNum); |
| | | page.setPageSize(pageSize); |
| | | if (pageNum == null || new Long(0).equals(pageNum.longValue())) { |
| | | page.setPageNum(1l); |
| | | page.setCurrent(pageNum); |
| | | page.setSize(pageSize); |
| | | if(pageNum==null||0==pageNum.longValue()){ |
| | | page.setCurrent(1l); |
| | | } |
| | | if (pageSize == null || new Long(0).equals(pageSize.longValue())) { |
| | | page.setPageSize(10l); |
| | | if(pageSize==null||0==pageSize.longValue()){ |
| | | page.setSize(10l); |
| | | } |
| | | |
| | | this.baseMapper.pageOrderBy(page, pageComShopOrderSearchDTO); |
| | | return null; |
| | | IPage<ComShopOrderSearchVO> ipage = this.baseMapper.pageOrderBy(page, pageComShopOrderSearchDTO); |
| | | return R.ok(ipage); |
| | | } |
| | | |
| | | |
| | |
| | | BeanUtils.copyProperties(comShopStoreDO,shopStoreVO); |
| | | return R.ok(shopStoreVO); |
| | | } |
| | | |
| | | @Override |
| | | public R getUserStoreInfo(Long userId) { |
| | | ComShopStoreDO comShopStoreDO = this.baseMapper.selectOne(new LambdaQueryWrapper<ComShopStoreDO>().eq(ComShopStoreDO::getDeleteStatus, 1).eq(ComShopStoreDO::getSysUserId, userId)); |
| | | if (comShopStoreDO == null) { |
| | | R.fail(500,"商铺不存在"); |
| | | } |
| | | ShopStoreVO shopStoreVO = new ShopStoreVO(); |
| | | BeanUtils.copyProperties(comShopStoreDO,shopStoreVO); |
| | | return R.ok(shopStoreVO); |
| | | } |
| | | } |
New file |
| | |
| | | HELP.md |
| | | target/ |
| | | !.mvn/wrapper/maven-wrapper.jar |
| | | !**/src/main/**/target/ |
| | | !**/src/test/**/target/ |
| | | |
| | | ### STS ### |
| | | .apt_generated |
| | | .classpath |
| | | .factorypath |
| | | .project |
| | | .settings |
| | | .springBeans |
| | | .sts4-cache |
| | | |
| | | ### IntelliJ IDEA ### |
| | | .idea |
| | | *.iws |
| | | *.iml |
| | | *.ipr |
| | | |
| | | ### NetBeans ### |
| | | /nbproject/private/ |
| | | /nbbuild/ |
| | | /dist/ |
| | | /nbdist/ |
| | | /.nb-gradle/ |
| | | build/ |
| | | !**/src/main/**/build/ |
| | | !**/src/test/**/build/ |
| | | |
| | | ### VS Code ### |
| | | .vscode/ |
New file |
| | |
| | | @REM ---------------------------------------------------------------------------- |
| | | @REM Licensed to the Apache Software Foundation (ASF) under one |
| | | @REM or more contributor license agreements. See the NOTICE file |
| | | @REM distributed with this work for additional information |
| | | @REM regarding copyright ownership. The ASF licenses this file |
| | | @REM to you under the Apache License, Version 2.0 (the |
| | | @REM "License"); you may not use this file except in compliance |
| | | @REM with the License. You may obtain a copy of the License at |
| | | @REM |
| | | @REM https://www.apache.org/licenses/LICENSE-2.0 |
| | | @REM |
| | | @REM Unless required by applicable law or agreed to in writing, |
| | | @REM software distributed under the License is distributed on an |
| | | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| | | @REM KIND, either express or implied. See the License for the |
| | | @REM specific language governing permissions and limitations |
| | | @REM under the License. |
| | | @REM ---------------------------------------------------------------------------- |
| | | |
| | | @REM ---------------------------------------------------------------------------- |
| | | @REM Maven Start Up Batch script |
| | | @REM |
| | | @REM Required ENV vars: |
| | | @REM JAVA_HOME - location of a JDK home dir |
| | | @REM |
| | | @REM Optional ENV vars |
| | | @REM M2_HOME - location of maven2's installed home dir |
| | | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands |
| | | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending |
| | | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven |
| | | @REM e.g. to debug Maven itself, use |
| | | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 |
| | | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files |
| | | @REM ---------------------------------------------------------------------------- |
| | | |
| | | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' |
| | | @echo off |
| | | @REM set title of command window |
| | | title %0 |
| | | @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' |
| | | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% |
| | | |
| | | @REM set %HOME% to equivalent of $HOME |
| | | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") |
| | | |
| | | @REM Execute a user defined script before this one |
| | | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre |
| | | @REM check for pre script, once with legacy .bat ending and once with .cmd ending |
| | | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" |
| | | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" |
| | | :skipRcPre |
| | | |
| | | @setlocal |
| | | |
| | | set ERROR_CODE=0 |
| | | |
| | | @REM To isolate internal variables from possible post scripts, we use another setlocal |
| | | @setlocal |
| | | |
| | | @REM ==== START VALIDATION ==== |
| | | if not "%JAVA_HOME%" == "" goto OkJHome |
| | | |
| | | echo. |
| | | echo Error: JAVA_HOME not found in your environment. >&2 |
| | | echo Please set the JAVA_HOME variable in your environment to match the >&2 |
| | | echo location of your Java installation. >&2 |
| | | echo. |
| | | goto error |
| | | |
| | | :OkJHome |
| | | if exist "%JAVA_HOME%\bin\java.exe" goto init |
| | | |
| | | echo. |
| | | echo Error: JAVA_HOME is set to an invalid directory. >&2 |
| | | echo JAVA_HOME = "%JAVA_HOME%" >&2 |
| | | echo Please set the JAVA_HOME variable in your environment to match the >&2 |
| | | echo location of your Java installation. >&2 |
| | | echo. |
| | | goto error |
| | | |
| | | @REM ==== END VALIDATION ==== |
| | | |
| | | :init |
| | | |
| | | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". |
| | | @REM Fallback to current working directory if not found. |
| | | |
| | | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% |
| | | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir |
| | | |
| | | set EXEC_DIR=%CD% |
| | | set WDIR=%EXEC_DIR% |
| | | :findBaseDir |
| | | IF EXIST "%WDIR%"\.mvn goto baseDirFound |
| | | cd .. |
| | | IF "%WDIR%"=="%CD%" goto baseDirNotFound |
| | | set WDIR=%CD% |
| | | goto findBaseDir |
| | | |
| | | :baseDirFound |
| | | set MAVEN_PROJECTBASEDIR=%WDIR% |
| | | cd "%EXEC_DIR%" |
| | | goto endDetectBaseDir |
| | | |
| | | :baseDirNotFound |
| | | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% |
| | | cd "%EXEC_DIR%" |
| | | |
| | | :endDetectBaseDir |
| | | |
| | | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig |
| | | |
| | | @setlocal EnableExtensions EnableDelayedExpansion |
| | | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a |
| | | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% |
| | | |
| | | :endReadAdditionalConfig |
| | | |
| | | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" |
| | | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" |
| | | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain |
| | | |
| | | set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" |
| | | |
| | | FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( |
| | | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B |
| | | ) |
| | | |
| | | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central |
| | | @REM This allows using the maven wrapper in projects that prohibit checking in binary data. |
| | | if exist %WRAPPER_JAR% ( |
| | | if "%MVNW_VERBOSE%" == "true" ( |
| | | echo Found %WRAPPER_JAR% |
| | | ) |
| | | ) else ( |
| | | if not "%MVNW_REPOURL%" == "" ( |
| | | SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" |
| | | ) |
| | | if "%MVNW_VERBOSE%" == "true" ( |
| | | echo Couldn't find %WRAPPER_JAR%, downloading it ... |
| | | echo Downloading from: %DOWNLOAD_URL% |
| | | ) |
| | | |
| | | powershell -Command "&{"^ |
| | | "$webclient = new-object System.Net.WebClient;"^ |
| | | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ |
| | | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ |
| | | "}"^ |
| | | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ |
| | | "}" |
| | | if "%MVNW_VERBOSE%" == "true" ( |
| | | echo Finished downloading %WRAPPER_JAR% |
| | | ) |
| | | ) |
| | | @REM End of extension |
| | | |
| | | @REM Provide a "standardized" way to retrieve the CLI args that will |
| | | @REM work with both Windows and non-Windows executions. |
| | | set MAVEN_CMD_LINE_ARGS=%* |
| | | |
| | | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* |
| | | if ERRORLEVEL 1 goto error |
| | | goto end |
| | | |
| | | :error |
| | | set ERROR_CODE=1 |
| | | |
| | | :end |
| | | @endlocal & set ERROR_CODE=%ERROR_CODE% |
| | | |
| | | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost |
| | | @REM check for post script, once with legacy .bat ending and once with .cmd ending |
| | | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" |
| | | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" |
| | | :skipRcPost |
| | | |
| | | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' |
| | | if "%MAVEN_BATCH_PAUSE%" == "on" pause |
| | | |
| | | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% |
| | | |
| | | exit /B %ERROR_CODE% |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <parent> |
| | | <groupId>com.panzhihua</groupId> |
| | | <artifactId>zhihuishequ</artifactId> |
| | | <version>1.0-SNAPSHOT</version> |
| | | </parent> |
| | | <groupId>com.panzhihua</groupId> |
| | | <artifactId>shop_backstage</artifactId> |
| | | <version>0.0.1-SNAPSHOT</version> |
| | | <name>shop_backstage</name> |
| | | <description>商家后台</description> |
| | | |
| | | |
| | | |
| | | <dependencies> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-web</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-config</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-openfeign</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.projectlombok</groupId> |
| | | <artifactId>lombok</artifactId> |
| | | <optional>true</optional> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.panzhihua</groupId> |
| | | <artifactId>common</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.netflix.hystrix</groupId> |
| | | <artifactId>hystrix-javanica</artifactId> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.github.xiaoymin</groupId> |
| | | <artifactId>swagger-bootstrap-ui</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | | <plugins> |
| | | <plugin> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-maven-plugin</artifactId> |
| | | <configuration> |
| | | <mainClass>com.panzhihua.community_backstage.CommunityBackstageApplication</mainClass> |
| | | </configuration> |
| | | <executions> |
| | | <execution> |
| | | <goals> |
| | | <goal>repackage</goal> |
| | | </goals> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | |
| | | <plugin> |
| | | <groupId>com.spotify</groupId> |
| | | <artifactId>docker-maven-plugin</artifactId> |
| | | <version>1.2.0</version> |
| | | <configuration> |
| | | <imageName>registry.cn-chengdu.aliyuncs.com/panzhihua/community_backstage:v1</imageName> |
| | | <serverId></serverId> |
| | | <baseImage>java</baseImage> |
| | | <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> |
| | | <resources> |
| | | <resource> |
| | | <targetPath>/</targetPath> |
| | | <directory>${project.build.directory}</directory> |
| | | <include>${project.build.finalName}.jar</include> |
| | | </resource> |
| | | </resources> |
| | | </configuration> |
| | | </plugin> |
| | | </plugins> |
| | | </build> |
| | | |
| | | <repositories> |
| | | <repository> |
| | | <id>spring-snapshots</id> |
| | | <name>Spring Snapshots</name> |
| | | <url>https://repo.spring.io/snapshot</url> |
| | | <snapshots> |
| | | <enabled>true</enabled> |
| | | </snapshots> |
| | | </repository> |
| | | <repository> |
| | | <id>spring-milestones</id> |
| | | <name>Spring Milestones</name> |
| | | <url>https://repo.spring.io/milestone</url> |
| | | </repository> |
| | | </repositories> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.panzhihua.shop_backstage; |
| | | |
| | | import org.springframework.boot.SpringApplication; |
| | | import org.springframework.cloud.client.SpringCloudApplication; |
| | | import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; |
| | | import org.springframework.cloud.netflix.eureka.EnableEurekaClient; |
| | | import org.springframework.cloud.openfeign.EnableFeignClients; |
| | | import org.springframework.context.annotation.ComponentScan; |
| | | import springfox.documentation.swagger2.annotations.EnableSwagger2; |
| | | |
| | | @EnableSwagger2 |
| | | @SpringCloudApplication |
| | | @EnableCircuitBreaker |
| | | @EnableEurekaClient |
| | | @EnableFeignClients(basePackages = {"com.panzhihua.common.service"}) |
| | | @ComponentScan({"com.panzhihua.shop_backstage","com.panzhihua.common"}) |
| | | public class ShopBackstageApplication { |
| | | |
| | | public static void main(String[] args) { |
| | | SpringApplication.run(ShopBackstageApplication.class, args); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.aop; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.panzhihua.common.constants.Constants; |
| | | import com.panzhihua.common.constants.TokenConstant; |
| | | import com.panzhihua.common.interfaces.ShopOperLog; |
| | | import com.panzhihua.common.model.vos.LoginUserInfoVO; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.shop.ShopOperLogVO; |
| | | import com.panzhihua.common.service.community.CommunityService; |
| | | import com.panzhihua.common.service.user.UserService; |
| | | import com.panzhihua.common.utlis.AES; |
| | | import com.panzhihua.common.utlis.IPUtil; |
| | | import com.panzhihua.shop_backstage.model.vos.LoginBody; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.aspectj.lang.JoinPoint; |
| | | import org.aspectj.lang.annotation.AfterReturning; |
| | | import org.aspectj.lang.annotation.Aspect; |
| | | import org.aspectj.lang.annotation.Pointcut; |
| | | import org.aspectj.lang.reflect.MethodSignature; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.web.context.request.RequestAttributes; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.BufferedReader; |
| | | import java.io.IOException; |
| | | import java.lang.reflect.Method; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @ClasssName 商家后台日志 |
| | | * @Description |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | @Slf4j |
| | | @Aspect |
| | | @Component |
| | | public class OperLogAspect { |
| | | |
| | | @Resource |
| | | private CommunityService communityService; |
| | | @Resource |
| | | private UserService userService; |
| | | |
| | | /** |
| | | * 设置操作日志切入点 记录操作日志 在注解的位置切入代码 |
| | | */ |
| | | @Pointcut("@annotation(com.panzhihua.common.interfaces.ShopOperLog)") |
| | | public void operLogPoinCut() { |
| | | } |
| | | |
| | | |
| | | |
| | | // /** |
| | | // * 设置操作异常切入点记录异常日志 扫描所有controller包下操作 |
| | | // */ |
| | | // @Pointcut("execution(* com.hyd.zcar.cms.controller..*.*(..))") |
| | | // public void operExceptionLogPoinCut() { |
| | | // } |
| | | |
| | | /** |
| | | * 正常返回通知,拦截用户操作日志,连接点正常执行完成后执行, 如果连接点抛出异常,则不会执行 |
| | | * |
| | | * @param joinPoint 切入点 |
| | | * @param keys 返回结果 |
| | | */ |
| | | @AfterReturning(value = "operLogPoinCut()", returning = "keys") |
| | | public void saveOperLog(JoinPoint joinPoint, Object keys) { |
| | | log.info("进入切面"); |
| | | // 获取RequestAttributes |
| | | RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); |
| | | // 从获取RequestAttributes中获取HttpServletRequest的信息 |
| | | HttpServletRequest request = (HttpServletRequest) requestAttributes |
| | | .resolveReference(RequestAttributes.REFERENCE_REQUEST); |
| | | // 登录对象信息 |
| | | String userInfo = request.getHeader(TokenConstant.TOKEN_USERINFO); |
| | | boolean empty = ObjectUtils.isEmpty(userInfo); |
| | | if (empty) { |
| | | log.error("操作日志获取登录用户信息失败【{}】",joinPoint); |
| | | return; |
| | | } |
| | | byte[] bytes = AES.parseHexStr2Byte(userInfo); |
| | | byte[] decrypt = AES.decrypt(bytes, Constants.AES_KEY); |
| | | userInfo=new String(decrypt); |
| | | LoginUserInfoVO loginUserInfoVO= JSONObject.parseObject(userInfo,LoginUserInfoVO.class); |
| | | |
| | | ShopOperLogVO shopOperlog = new ShopOperLogVO(); |
| | | try { |
| | | |
| | | // 从切面织入点处通过反射机制获取织入点处的方法 |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | // 获取切入点所在的方法 |
| | | Method method = signature.getMethod(); |
| | | // 获取操作 |
| | | ShopOperLog opLog = method.getAnnotation(ShopOperLog.class); |
| | | if (opLog != null) { |
| | | String operModul = opLog.operModul(); |
| | | int operType = opLog.operType(); |
| | | shopOperlog.setTitle(operModul); // 操作模块 |
| | | shopOperlog.setBusinessType(operType); // 操作类型 |
| | | } |
| | | // 获取请求的类名 |
| | | String className = joinPoint.getTarget().getClass().getName(); |
| | | // 获取请求的方法名 |
| | | String methodName = method.getName(); |
| | | methodName = className + "." + methodName; |
| | | |
| | | shopOperlog.setMethod(methodName); // 请求方法 |
| | | |
| | | if (joinPoint.getArgs().length > 0) { |
| | | for (Object o : joinPoint.getArgs()) { |
| | | if (o instanceof HttpServletRequest || o instanceof HttpServletResponse) { |
| | | continue; |
| | | } |
| | | shopOperlog.setOperParam(JSONObject.toJSONString(o)); // 请求参数 |
| | | } |
| | | } |
| | | |
| | | shopOperlog.setJsonResult(JSONObject.toJSONString(keys)); // 返回结果 |
| | | shopOperlog.setAccount(loginUserInfoVO.getAccount()); |
| | | shopOperlog.setOperName(loginUserInfoVO.getName()); // 请求用户名称 |
| | | shopOperlog.setOperIp(IPUtil.getIpAddress(request)); // 请求IP |
| | | shopOperlog.setOperUrl(request.getRequestURI()); // 请求URI |
| | | shopOperlog.setRequestMethod(request.getMethod()); |
| | | shopOperlog.setOperLocation(IPUtil.getIpBelongAddress(request)); |
| | | shopOperlog.setOperTime(new Date()); // 创建时间 |
| | | shopOperlog.setAccount(loginUserInfoVO.getAccount()); |
| | | Long communityId = loginUserInfoVO.getCommunityId(); |
| | | shopOperlog.setCommunityId(null==communityId?0:communityId); |
| | | shopOperlog.setUserId(loginUserInfoVO.getUserId()); |
| | | communityService.addShopOperLog(shopOperlog); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | // /** |
| | | // * 异常返回通知,用于拦截异常日志信息 连接点抛出异常后执行 |
| | | // * |
| | | // * @param joinPoint 切入点 |
| | | // * @param e 异常信息 |
| | | // */ |
| | | // @AfterThrowing(pointcut = "operExceptionLogPoinCut()", throwing = "e") |
| | | // public void saveExceptionLog(JoinPoint joinPoint, Throwable e) { |
| | | // // 获取RequestAttributes |
| | | // RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); |
| | | // // 从获取RequestAttributes中获取HttpServletRequest的信息 |
| | | // HttpServletRequest request = (HttpServletRequest) requestAttributes |
| | | // .resolveReference(RequestAttributes.REFERENCE_REQUEST); |
| | | // |
| | | // ExceptionLog excepLog = new ExceptionLog(); |
| | | // try { |
| | | // // 从切面织入点处通过反射机制获取织入点处的方法 |
| | | // MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | // // 获取切入点所在的方法 |
| | | // Method method = signature.getMethod(); |
| | | // excepLog.setExcId(UuidUtil.get32UUID()); |
| | | // // 获取请求的类名 |
| | | // String className = joinPoint.getTarget().getClass().getName(); |
| | | // // 获取请求的方法名 |
| | | // String methodName = method.getName(); |
| | | // methodName = className + "." + methodName; |
| | | // // 请求的参数 |
| | | // Map<String, String> rtnMap = converMap(request.getParameterMap()); |
| | | // // 将参数所在的数组转换成json |
| | | // String params = JSON.toJSONString(rtnMap); |
| | | // excepLog.setExcRequParam(params); // 请求参数 |
| | | // excepLog.setOperMethod(methodName); // 请求方法名 |
| | | // excepLog.setExcName(e.getClass().getName()); // 异常名称 |
| | | // excepLog.setExcMessage(stackTraceToString(e.getClass().getName(), e.getMessage(), e.getStackTrace())); // 异常信息 |
| | | // excepLog.setOperUserId(UserShiroUtil.getCurrentUserLoginName()); // 操作员ID |
| | | // excepLog.setOperUserName(UserShiroUtil.getCurrentUserName()); // 操作员名称 |
| | | // excepLog.setOperUri(request.getRequestURI()); // 操作URI |
| | | // excepLog.setOperIp(IPUtil.getRemortIP(request)); // 操作员IP |
| | | // excepLog.setOperVer(operVer); // 操作版本号 |
| | | // excepLog.setOperCreateTime(new Date()); // 发生异常时间 |
| | | // |
| | | // exceptionLogService.insert(excepLog); |
| | | // |
| | | // } catch (Exception e2) { |
| | | // e2.printStackTrace(); |
| | | // } |
| | | // |
| | | // } |
| | | |
| | | /** |
| | | * 转换request 请求参数 |
| | | * |
| | | * @param paramMap request获取的参数数组 |
| | | */ |
| | | public Map<String, String> converMap(Map<String, String[]> paramMap) { |
| | | Map<String, String> rtnMap = new HashMap<String, String>(); |
| | | for (String key : paramMap.keySet()) { |
| | | rtnMap.put(key, paramMap.get(key)[0]); |
| | | } |
| | | return rtnMap; |
| | | } |
| | | |
| | | private String getPostData(HttpServletRequest request) { |
| | | StringBuffer data = new StringBuffer(); |
| | | String line = null; |
| | | BufferedReader reader = null; |
| | | try { |
| | | reader = request.getReader(); |
| | | while (null != (line = reader.readLine())) |
| | | data.append(line); |
| | | } catch (IOException e) { |
| | | } finally { |
| | | } |
| | | return data.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 转换异常信息为字符串 |
| | | * |
| | | * @param exceptionName 异常名称 |
| | | * @param exceptionMessage 异常信息 |
| | | * @param elements 堆栈信息 |
| | | */ |
| | | public String stackTraceToString(String exceptionName, String exceptionMessage, StackTraceElement[] elements) { |
| | | StringBuffer strbuff = new StringBuffer(); |
| | | for (StackTraceElement stet : elements) { |
| | | strbuff.append(stet + "\n"); |
| | | } |
| | | String message = exceptionName + ":" + exceptionMessage + "\n\t" + strbuff.toString(); |
| | | return message; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 登录日志切入点 |
| | | */ |
| | | @Pointcut("execution(public * com.panzhihua.shop_backstage.api.LoginApi.login(..) )") |
| | | public void operLogLoginPoinCut() { |
| | | } |
| | | |
| | | /** |
| | | * 正常返回通知,拦截用户操作日志,连接点正常执行完成后执行, 如果连接点抛出异常,则不会执行 |
| | | * |
| | | * @param joinPoint 切入点 |
| | | * @param keys 返回结果 |
| | | */ |
| | | @AfterReturning(value = "operLogLoginPoinCut()", returning = "keys") |
| | | public void saveLoginOperLog(JoinPoint joinPoint, Object keys) { |
| | | log.info("进入商家后台登录日志切面"); |
| | | // 获取RequestAttributes |
| | | RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); |
| | | // 从获取RequestAttributes中获取HttpServletRequest的信息 |
| | | HttpServletRequest request = (HttpServletRequest) requestAttributes |
| | | .resolveReference(RequestAttributes.REFERENCE_REQUEST); |
| | | if(keys instanceof R ){ |
| | | R r = (R)keys; |
| | | if(r.getCode()==200 && "success".equals(r.getMsg())) { |
| | | |
| | | Object obj = joinPoint.getArgs(); |
| | | Object[] obja = (Object[])obj; |
| | | LoginBody loginBody = (LoginBody)obja[0]; |
| | | String userName = loginBody.getAccount(); |
| | | R<LoginUserInfoVO> userR = userService.getUserInfo(userName+"_5"); |
| | | LoginUserInfoVO loginUserInfoVO = userR.getData(); |
| | | |
| | | ShopOperLogVO shopOperlog = new ShopOperLogVO(); |
| | | try { |
| | | |
| | | // 从切面织入点处通过反射机制获取织入点处的方法 |
| | | MethodSignature signature = (MethodSignature) joinPoint.getSignature(); |
| | | // 获取切入点所在的方法 |
| | | Method method = signature.getMethod(); |
| | | // 获取操作 |
| | | ShopOperLog opLog = method.getAnnotation(ShopOperLog.class); |
| | | if (opLog != null) { |
| | | String operModul = opLog.operModul(); |
| | | int operType = opLog.operType(); |
| | | shopOperlog.setTitle(operModul); // 操作模块 |
| | | shopOperlog.setBusinessType(operType); // 操作类型 |
| | | } |
| | | // 获取请求的类名 |
| | | String className = joinPoint.getTarget().getClass().getName(); |
| | | // 获取请求的方法名 |
| | | String methodName = method.getName(); |
| | | methodName = className + "." + methodName; |
| | | |
| | | shopOperlog.setMethod(methodName); // 请求方法 |
| | | |
| | | |
| | | if (joinPoint.getArgs().length > 0) { |
| | | for (Object o : joinPoint.getArgs()) { |
| | | if (o instanceof HttpServletRequest || o instanceof HttpServletResponse) { |
| | | continue; |
| | | } |
| | | shopOperlog.setOperParam(JSONObject.toJSONString(o)); // 请求参数 |
| | | } |
| | | } |
| | | |
| | | shopOperlog.setJsonResult(JSONObject.toJSONString(keys)); // 返回结果 |
| | | shopOperlog.setAccount(loginUserInfoVO.getAccount()); |
| | | shopOperlog.setOperName(loginUserInfoVO.getName()); // 请求用户名称 |
| | | shopOperlog.setOperIp(IPUtil.getIpAddress(request)); // 请求IP |
| | | shopOperlog.setOperUrl(request.getRequestURI()); // 请求URI |
| | | shopOperlog.setRequestMethod(request.getMethod()); |
| | | shopOperlog.setOperLocation(IPUtil.getIpBelongAddress(request)); |
| | | shopOperlog.setOperTime(new Date()); // 创建时间 |
| | | shopOperlog.setAccount(loginUserInfoVO.getAccount()); |
| | | Long communityId = loginUserInfoVO.getCommunityId(); |
| | | shopOperlog.setCommunityId(null==communityId?0:communityId); |
| | | shopOperlog.setUserId(loginUserInfoVO.getUserId()); |
| | | communityService.addShopOperLog(shopOperlog); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.api; |
| | | |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.alibaba.excel.ExcelWriter; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | | import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.panzhihua.common.controller.BaseController; |
| | | import com.panzhihua.common.interfaces.ShopOperLog; |
| | | import com.panzhihua.common.model.dtos.shop.*; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.shop.ShopStoreVO; |
| | | import com.panzhihua.common.service.community.CommunityService; |
| | | import com.panzhihua.common.utlis.SFTPUtil; |
| | | import com.panzhihua.shop_backstage.excel.CustomSheetWriteHandler; |
| | | import com.panzhihua.shop_backstage.utils.ClazzUtils; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.InputStream; |
| | | import java.net.URLEncoder; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | |
| | | /** |
| | | * @ClasssName GoodsApi 商品API |
| | | * @Description |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/funs") |
| | | @Api(tags = {"商家后台", "资金管理"}) |
| | | public class FundsApi extends BaseController { |
| | | |
| | | @Resource |
| | | private CommunityService communityService; |
| | | |
| | | @Value("${excel.userurl}") |
| | | private String excelUrl; |
| | | // FTP 登录用户名 |
| | | @Value("${ftp.username}") |
| | | private String userName; |
| | | // FTP 登录密码 |
| | | @Value("${ftp.password}") |
| | | private String password; |
| | | // FTP 服务器地址IP地址 |
| | | @Value("${ftp.host}") |
| | | private String host; |
| | | // FTP 端口 |
| | | @Value("${ftp.port}") |
| | | private int port; |
| | | |
| | | @ApiOperation(value = "订单分页") |
| | | @PostMapping("/page") |
| | | public R page(@RequestBody PageComShopFundsSearchDTO pageComShopFundsSearchDTO){ |
| | | pageComShopFundsSearchDTO.setUserId(getUserId()); |
| | | ClazzUtils.setIfStringIsEmpty(pageComShopFundsSearchDTO); |
| | | return communityService.pageShopFunds(pageComShopFundsSearchDTO); |
| | | } |
| | | |
| | | @ApiOperation(value = "资金统计信息") |
| | | @GetMapping("/stat") |
| | | public R stat(){ |
| | | return communityService.getFundsStat(getUserId()); |
| | | } |
| | | |
| | | @ApiOperation(value = "导出表格") |
| | | @PostMapping("/export") |
| | | @ShopOperLog(operType = 12) |
| | | public R export(@RequestBody ComShopFundsExportDTO comShopFundsExportDTO){ |
| | | ClazzUtils.setIfStringIsEmpty(comShopFundsExportDTO); |
| | | String url=excelUrl; |
| | | String uuid= UUID.randomUUID().toString().replace("-",""); |
| | | //String name=uuid+".xlsx"; |
| | | String ftpUrl="/mnt/data/web/excel/"; |
| | | |
| | | R<ShopStoreVO> storeR = communityService.getUserStoreInfo(getUserId()); |
| | | |
| | | if(!R.isOk(storeR)){ |
| | | return R.fail("用户不是商家"); |
| | | } |
| | | |
| | | ShopStoreVO shopStoreVO = JSONObject.parseObject(JSONObject.toJSONString(storeR.getData()),ShopStoreVO.class); |
| | | Long userId = this.getUserId(); |
| | | comShopFundsExportDTO.setUserId(userId); |
| | | R r=communityService.shopOrderFundsExportData(comShopFundsExportDTO); |
| | | if (R.isOk(r)) { |
| | | List<ExcelShopFundsDTO> excelShopFundsDTO = JSONArray.parseArray(JSONArray.toJSONString(r.getData()),ExcelShopFundsDTO.class); |
| | | if(excelShopFundsDTO==null||excelShopFundsDTO.size()==0){ |
| | | return R.ok("未找到数据"); |
| | | } |
| | | try { |
| | | SFTPUtil sftp = new SFTPUtil(userName,password,host,port); |
| | | sftp.login(); |
| | | String name = shopStoreVO.getName() +"-商家资金流水-" + new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + ".xlsx"; |
| | | boolean existDir = sftp.isExistDir(ftpUrl+name); |
| | | if (!existDir) { |
| | | String property = System.getProperty("user.dir"); |
| | | String fileName = property + File.separator+name; |
| | | // 这里 需要指定写用哪个class去写 |
| | | ExcelWriter excelWriter = null; |
| | | InputStream inputStream=null; |
| | | try { |
| | | excelWriter = EasyExcel.write(fileName, ExcelShopFundsDTO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(new CustomSheetWriteHandler()).build(); |
| | | WriteSheet writeSheet = EasyExcel.writerSheet(shopStoreVO.getName()+"订单").build(); |
| | | excelWriter.write(excelShopFundsDTO, writeSheet); |
| | | excelWriter.finish(); |
| | | File file=new File(fileName); |
| | | inputStream=new FileInputStream(file); |
| | | sftp.uploadMore(ftpUrl, name, inputStream); |
| | | sftp.logout(); |
| | | inputStream.close(); |
| | | String absolutePath = file.getAbsolutePath(); |
| | | boolean delete = file.delete(); |
| | | log.info("删除excel【{}】结果【{}】",absolutePath,delete); |
| | | } finally { |
| | | // 千万别忘记finish 会帮忙关闭流 |
| | | if (inputStream != null) { |
| | | inputStream.close(); |
| | | } |
| | | if (excelWriter != null) { |
| | | excelWriter.finish(); |
| | | } |
| | | } |
| | | } |
| | | return R.ok(url+ URLEncoder.encode(name,"UTF-8")); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("文件传输失败【{}】", e.getMessage()); |
| | | return R.fail(); |
| | | } |
| | | } |
| | | return R.fail("导出数据失败"); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.api; |
| | | |
| | | import com.panzhihua.common.controller.BaseController; |
| | | import com.panzhihua.common.model.dtos.shop.ComShopGoodsDTO; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.shop.AddShopGoodsVO; |
| | | import com.panzhihua.common.service.community.CommunityService; |
| | | import com.panzhihua.common.validated.PageGroup; |
| | | import com.panzhihua.common.interfaces.ShopOperLog; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | | * @ClasssName GoodsApi 商品API |
| | | * @Description |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/goods") |
| | | public class GoodsApi extends BaseController { |
| | | |
| | | @Resource |
| | | private CommunityService communityService; |
| | | |
| | | @ApiOperation(value = "商品分页搜索") |
| | | @PostMapping("/page") |
| | | public R search(@RequestBody @Validated(PageGroup.class) ComShopGoodsDTO comShopGoodsDTO){ |
| | | return communityService.pageShopGoods(comShopGoodsDTO); |
| | | } |
| | | |
| | | @ApiOperation(value = "添加商品") |
| | | @ShopOperLog(operType = 3) |
| | | @PostMapping("/add") |
| | | public R search(@RequestBody AddShopGoodsVO addShopGoodsVO){ |
| | | return communityService.saveShopGoods(addShopGoodsVO); |
| | | } |
| | | |
| | | @ApiOperation(value = "编辑商品") |
| | | @ShopOperLog(operType = 4) |
| | | @PutMapping("/edit/{id}") |
| | | R editShopGoods(@PathVariable("id") Long id,@RequestBody AddShopGoodsVO addShopGoodsVO) { |
| | | return communityService.editShopGoods(id,addShopGoodsVO); |
| | | } |
| | | |
| | | @ApiOperation(value = "下架商品") |
| | | @ShopOperLog(operType = 5) |
| | | @PutMapping("/toggleDown/{id}") |
| | | public R toggleDown(@PathVariable("id") Long id){ |
| | | return communityService.changeStatus(id,2); |
| | | } |
| | | |
| | | @ApiOperation(value = "上架商品") |
| | | @ShopOperLog(operType = 6) |
| | | @PutMapping("/toggleUp/{id}") |
| | | public R toggleUp(@PathVariable("id") Long id){ |
| | | return communityService.changeStatus(id,1); |
| | | } |
| | | |
| | | @ApiOperation(value = "删除商品") |
| | | @ShopOperLog(operType = 7) |
| | | @DeleteMapping("/delete") |
| | | R deleteShopGoods(@RequestBody Long[] id) { |
| | | return communityService.deleteShopGoods(id); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.api; |
| | | |
| | | import com.panzhihua.common.controller.BaseController; |
| | | import com.panzhihua.common.model.dtos.PageDTO; |
| | | import com.panzhihua.common.model.vos.LoginUserInfoVO; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.service.community.CommunityService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | /** |
| | | * @ClasssName GoodsApi 商品API |
| | | * @Description |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/log") |
| | | @Api(tags = {"商家后台", "操作日志"}) |
| | | public class LogApi extends BaseController { |
| | | |
| | | @Resource |
| | | private CommunityService communityService; |
| | | |
| | | @ApiOperation(value = "登陆用户操作日志") |
| | | @GetMapping("/page") |
| | | public R page(@RequestParam("pageNum") Long pageNum, @RequestParam("pageSize") Long pageSize){ |
| | | PageDTO pageDTO = new PageDTO(); |
| | | pageDTO.setPageNum(pageNum); |
| | | pageDTO.setPageSize(pageSize); |
| | | if(pageNum==null||new Long(0).equals(pageNum.longValue())){ |
| | | pageDTO.setPageNum(1l); |
| | | } |
| | | if(pageSize==null||new Long(0).equals(pageSize.longValue())){ |
| | | pageDTO.setPageSize(10l); |
| | | } |
| | | |
| | | LoginUserInfoVO loginUserInfoVO = this.getLoginUserInfo(); |
| | | if(loginUserInfoVO==null){ |
| | | return R.fail("未登陆"); |
| | | } |
| | | pageDTO.setUserId(loginUserInfoVO.getUserId()); |
| | | return communityService.pageShopOperLog(pageDTO); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.api; |
| | | |
| | | import com.panzhihua.common.controller.BaseController; |
| | | import com.panzhihua.common.model.vos.LoginUserInfoVO; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.model.vos.user.ChangePasswordVO; |
| | | import com.panzhihua.common.service.auth.TokenService; |
| | | import com.panzhihua.common.service.user.UserService; |
| | | import com.panzhihua.common.interfaces.ShopOperLog; |
| | | import com.panzhihua.shop_backstage.model.vos.LoginBody; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/") |
| | | @Api(tags = {"商家后台", "登录"}) |
| | | public class LoginApi extends BaseController { |
| | | @Resource |
| | | private TokenService tokenService; |
| | | @Resource |
| | | private UserService userService; |
| | | |
| | | @ApiOperation(value = "商家后台登录") |
| | | @ShopOperLog(operType = 1) |
| | | @PostMapping("login") |
| | | public R login(@RequestBody LoginBody loginBody){ |
| | | String account = loginBody.getAccount(); |
| | | String password = loginBody.getPassword(); |
| | | boolean empty = ObjectUtils.isEmpty(account); |
| | | boolean empty1 = ObjectUtils.isEmpty(password); |
| | | if (empty||empty1) { |
| | | return R.fail("账户密码不能为空"); |
| | | } |
| | | log.info("登录用户信息【{}】",loginBody); |
| | | R r = tokenService.loginShopBackStage(account,password); |
| | | return r; |
| | | } |
| | | |
| | | @ApiOperation(value = "修改密码") |
| | | @PutMapping("changepassword") |
| | | @ShopOperLog(operType = 2) |
| | | public R changePassword(@Validated @RequestBody ChangePasswordVO changePasswordVO){ |
| | | Long userId = this.getUserId(); |
| | | String newPassword = changePasswordVO.getNewPassword(); |
| | | String oldPassword=changePasswordVO.getOldPassword(); |
| | | if (newPassword.equals(oldPassword)) { |
| | | return R.fail("修改失败,新密码和原密码一致"); |
| | | } |
| | | changePasswordVO.setUserId(userId); |
| | | return userService.changePassword(changePasswordVO); |
| | | } |
| | | |
| | | @ApiOperation(value = "当前登录用户信息",response = LoginUserInfoVO.class) |
| | | @GetMapping("user") |
| | | public R detailUser(){ |
| | | Long userId = this.getUserId(); |
| | | return userService.detailUser(userId); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.api; |
| | | |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.alibaba.excel.ExcelWriter; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | | import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.panzhihua.common.controller.BaseController; |
| | | import com.panzhihua.common.model.dtos.shop.*; |
| | | import com.panzhihua.common.model.vos.R; |
| | | import com.panzhihua.common.interfaces.ShopOperLog; |
| | | import com.panzhihua.common.model.vos.shop.ShopStoreVO; |
| | | import com.panzhihua.common.service.community.CommunityService; |
| | | import com.panzhihua.common.utlis.SFTPUtil; |
| | | import com.panzhihua.shop_backstage.excel.CustomSheetWriteHandler; |
| | | import com.panzhihua.shop_backstage.utils.ClazzUtils; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.InputStream; |
| | | import java.net.URLEncoder; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | |
| | | /** |
| | | * @ClasssName GoodsApi 商品API |
| | | * @Description |
| | | * @Author cedoo |
| | | * @Date 2021/4/16 |
| | | * @Version 1.0 |
| | | **/ |
| | | |
| | | @Slf4j |
| | | @RestController |
| | | @RequestMapping("/order") |
| | | @Api(tags = {"商家后台", "订单管理"}) |
| | | public class OrderApi extends BaseController { |
| | | |
| | | @Resource |
| | | private CommunityService communityService; |
| | | |
| | | @Value("${excel.userurl}") |
| | | private String excelUrl; |
| | | // FTP 登录用户名 |
| | | @Value("${ftp.username}") |
| | | private String userName; |
| | | // FTP 登录密码 |
| | | @Value("${ftp.password}") |
| | | private String password; |
| | | // FTP 服务器地址IP地址 |
| | | @Value("${ftp.host}") |
| | | private String host; |
| | | // FTP 端口 |
| | | @Value("${ftp.port}") |
| | | private int port; |
| | | |
| | | @ApiOperation(value = "订单分页") |
| | | @PostMapping("") |
| | | public R page(@RequestBody @Validated PageComShopOrderSearchDTO pageComShopOrderSearchDTO){ |
| | | pageComShopOrderSearchDTO.setUserId(this.getUserId()); |
| | | ClazzUtils.setIfStringIsEmpty(pageComShopOrderSearchDTO); |
| | | return communityService.pageShopOrder(pageComShopOrderSearchDTO); |
| | | } |
| | | |
| | | @ApiOperation(value = "取消订单") |
| | | @PutMapping("/cancel") |
| | | @ShopOperLog(operType = 8) |
| | | public R cancel(@RequestBody ComShopOrderQueryDTO comShopOrderQueryDTO){ |
| | | return communityService.orderCancel(comShopOrderQueryDTO); |
| | | } |
| | | |
| | | @ApiOperation(value = "发货") |
| | | @PutMapping("/ship") |
| | | @ShopOperLog(operType = 9) |
| | | public R ship(@RequestBody ComShopOrderShipDTO orderShipDTO){ |
| | | return communityService.shipOrder(orderShipDTO); |
| | | } |
| | | |
| | | @ApiOperation(value = "配送") |
| | | @PutMapping("/startDeliver") |
| | | @ShopOperLog(operType = 10) |
| | | public R deliver(@RequestBody ComShopOrderDeliverDTO deliverDTO){ |
| | | return communityService.deliverOrder(deliverDTO); |
| | | } |
| | | |
| | | @ApiOperation(value = "配送完成") |
| | | @PutMapping("/finishDeliver") |
| | | public R finishDeliver(@RequestBody ComShopOrderDeliverDTO deliverDTO){ |
| | | return communityService.finishDeliverOrder(deliverDTO); |
| | | } |
| | | |
| | | @ApiOperation(value = "订单详细") |
| | | @GetMapping("/detail") |
| | | @ShopOperLog(operType = 11) |
| | | public R detail(@RequestParam("orderId") Long orderId){ |
| | | return communityService.orderDetail(orderId); |
| | | } |
| | | |
| | | @ApiOperation(value = "导出表格") |
| | | @PostMapping("/export") |
| | | @ShopOperLog(operType = 12) |
| | | public R export(@RequestBody ComShopOrderExportDTO comShopOrderExportDTO){ |
| | | ClazzUtils.setIfStringIsEmpty(comShopOrderExportDTO); |
| | | String url=excelUrl; |
| | | String uuid= UUID.randomUUID().toString().replace("-",""); |
| | | //String name=uuid+".xlsx"; |
| | | String ftpUrl="/mnt/data/web/excel/"; |
| | | |
| | | R<ShopStoreVO> storeR = communityService.getUserStoreInfo(getUserId()); |
| | | |
| | | if(!R.isOk(storeR)){ |
| | | return R.fail("用户不是商家"); |
| | | } |
| | | |
| | | ShopStoreVO shopStoreVO = JSONObject.parseObject(JSONObject.toJSONString(storeR.getData()),ShopStoreVO.class); |
| | | Long userId = this.getUserId(); |
| | | comShopOrderExportDTO.setUserId(userId); |
| | | R r=communityService.shopOrderExportData(comShopOrderExportDTO); |
| | | if (R.isOk(r)) { |
| | | List<ExcelShopOrderDTO> excelShopOrderDTO = JSONArray.parseArray(JSONArray.toJSONString(r.getData()),ExcelShopOrderDTO.class); |
| | | if(excelShopOrderDTO==null||excelShopOrderDTO.size()==0){ |
| | | return R.ok("未找到数据"); |
| | | } |
| | | try { |
| | | SFTPUtil sftp = new SFTPUtil(userName,password,host,port); |
| | | sftp.login(); |
| | | String name = shopStoreVO.getName() +"商城订单-" + new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + ".xlsx"; |
| | | boolean existDir = sftp.isExistDir(ftpUrl+name); |
| | | if (!existDir) { |
| | | String property = System.getProperty("user.dir"); |
| | | String fileName = property + File.separator+name; |
| | | // 这里 需要指定写用哪个class去写 |
| | | ExcelWriter excelWriter = null; |
| | | InputStream inputStream=null; |
| | | try { |
| | | excelWriter = EasyExcel.write(fileName, ExcelShopOrderDTO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).registerWriteHandler(new CustomSheetWriteHandler()).build(); |
| | | WriteSheet writeSheet = EasyExcel.writerSheet(shopStoreVO.getName()+"订单").build(); |
| | | excelWriter.write(excelShopOrderDTO, writeSheet); |
| | | excelWriter.finish(); |
| | | File file=new File(fileName); |
| | | inputStream=new FileInputStream(file); |
| | | sftp.uploadMore(ftpUrl, name, inputStream); |
| | | sftp.logout(); |
| | | inputStream.close(); |
| | | String absolutePath = file.getAbsolutePath(); |
| | | boolean delete = file.delete(); |
| | | log.info("删除excel【{}】结果【{}】",absolutePath,delete); |
| | | } finally { |
| | | // 千万别忘记finish 会帮忙关闭流 |
| | | if (inputStream != null) { |
| | | inputStream.close(); |
| | | } |
| | | if (excelWriter != null) { |
| | | excelWriter.finish(); |
| | | } |
| | | } |
| | | } |
| | | return R.ok(url+ URLEncoder.encode(name,"UTF-8")); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | log.error("文件传输失败【{}】", e.getMessage()); |
| | | return R.fail(); |
| | | } |
| | | } |
| | | return R.fail("导出数据失败"); |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.config; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @Author: llming |
| | | * @Description: |
| | | */ |
| | | @Configuration |
| | | @Data |
| | | public class SFTPConfig { |
| | | // FTP 登录用户名 |
| | | @Value("${ftp.username}") |
| | | private String userName; |
| | | // FTP 登录密码 |
| | | @Value("${ftp.password}") |
| | | private String password; |
| | | // FTP 服务器地址IP地址 |
| | | @Value("${ftp.host}") |
| | | private String host; |
| | | // FTP 端口 |
| | | @Value("${ftp.port}") |
| | | private int port; |
| | | @Value("${ftp.url}") |
| | | private String url; |
| | | @Value("${excel.userurl}") |
| | | private String excelUrl; |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.config; |
| | | |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import springfox.documentation.builders.ApiInfoBuilder; |
| | | import springfox.documentation.builders.PathSelectors; |
| | | import springfox.documentation.builders.RequestHandlerSelectors; |
| | | import springfox.documentation.service.ApiInfo; |
| | | import springfox.documentation.service.Contact; |
| | | import springfox.documentation.spi.DocumentationType; |
| | | import springfox.documentation.spring.web.plugins.Docket; |
| | | |
| | | /** |
| | | * @program: springcloud_k8s_panzhihuazhihuishequ |
| | | * @description: swagger3 |
| | | * @author: huang.hongfa weixin hhf9596 qq 959656820 |
| | | * @create: 2020-11-19 16:08 |
| | | **/ |
| | | @Configuration |
| | | public class SwaggerConfig { |
| | | @Bean |
| | | public Docket createRestApi() { |
| | | return new Docket(DocumentationType.SWAGGER_2) |
| | | .apiInfo(apiInfo()) |
| | | .select() |
| | | .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) |
| | | .paths(PathSelectors.any()) |
| | | .build(); |
| | | } |
| | | |
| | | private ApiInfo apiInfo() { |
| | | return new ApiInfoBuilder() |
| | | .title("商家后台管理接口") |
| | | .description("。") |
| | | .contact(new Contact("Ray。", "http://www.ruiyeclub.cn", "ruiyeclub@foxmail.com")) |
| | | .version("1.0") |
| | | .build(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.excel; |
| | | |
| | | import com.alibaba.excel.write.handler.SheetWriteHandler; |
| | | import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; |
| | | import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; |
| | | import org.apache.poi.ss.usermodel.DataValidation; |
| | | import org.apache.poi.ss.usermodel.DataValidationConstraint; |
| | | import org.apache.poi.ss.usermodel.DataValidationHelper; |
| | | import org.apache.poi.ss.util.CellRangeAddressList; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | /** |
| | | * 自定义拦截器.对第一列第一行和第二行的数据新增下拉框,显示 测试1 测试2 |
| | | * |
| | | * @author Jiaju Zhuang |
| | | */ |
| | | public class CustomSheetWriteHandler implements SheetWriteHandler { |
| | | |
| | | private static final Logger LOGGER = LoggerFactory.getLogger(CustomSheetWriteHandler.class); |
| | | |
| | | @Override |
| | | public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { |
| | | LOGGER.info("第{}个Sheet写入成功。", writeSheetHolder.getSheetNo()); |
| | | |
| | | // 区间设置 第一列第一行和第二行的数据。由于第一行是头,所以第一、二行的数据实际上是第二三行 |
| | | CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 2000, 1, 1); |
| | | CellRangeAddressList cellRangeAddressList1 = new CellRangeAddressList(1, 2000, 3 ,3); |
| | | CellRangeAddressList cellRangeAddressList2 = new CellRangeAddressList(1, 2000, 10 ,10); |
| | | DataValidationHelper helper = writeSheetHolder.getSheet().getDataValidationHelper(); |
| | | DataValidationConstraint constraint = helper.createExplicitListConstraint(new String[] {"是", "否"}); |
| | | DataValidationConstraint constraint1 = helper.createExplicitListConstraint(new String[] {"中共党员","中共预备党员","共青团员","民革党员","民盟盟员","民建会员","农工党党员","致公党党员","九三学社社员","台盟盟员","无党派人士","群众"}); |
| | | DataValidationConstraint constraint2 = helper.createExplicitListConstraint(new String[] {"男", "女","未知"}); |
| | | DataValidation dataValidation = helper.createValidation(constraint2, cellRangeAddressList); |
| | | DataValidation dataValidation1 = helper.createValidation(constraint, cellRangeAddressList1); |
| | | DataValidation dataValidation2= helper.createValidation(constraint1, cellRangeAddressList2); |
| | | |
| | | writeSheetHolder.getSheet().addValidationData(dataValidation); |
| | | writeSheetHolder.getSheet().addValidationData(dataValidation1); |
| | | writeSheetHolder.getSheet().addValidationData(dataValidation2); |
| | | } |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.model.vos; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | /** |
| | | * @program: springcloud_k8s_panzhihuazhihuishequ |
| | | * @description: 登录 |
| | | * @author: huang.hongfa weixin hhf9596 qq 959656820 |
| | | * @create: 2020-11-24 10:54 |
| | | **/ |
| | | @Data |
| | | @ApiModel(value = "小程序后台登录") |
| | | @AllArgsConstructor |
| | | @NoArgsConstructor |
| | | public class LoginBody { |
| | | |
| | | @ApiModelProperty(value = "登录账户") |
| | | private String account; |
| | | @ApiModelProperty(value = "登录密码") |
| | | private String password; |
| | | |
| | | } |
New file |
| | |
| | | package com.panzhihua.shop_backstage.utils; |
| | | |
| | | import com.panzhihua.common.model.dtos.shop.PageComShopOrderSearchDTO; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.text.DecimalFormat; |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * 工具类 |
| | | */ |
| | | public class ClazzUtils { |
| | | |
| | | /** |
| | | * 如果string属性为“”, 则将其设置为NULL |
| | | * @param o |
| | | */ |
| | | public static void setIfStringIsEmpty(Object o){ |
| | | if(o==null){ |
| | | return; |
| | | } |
| | | Class clazz = o.getClass(); |
| | | Field[] fields = clazz.getDeclaredFields(); |
| | | Arrays.stream(fields).forEach(field -> { |
| | | if(String.class == field.getType()){ |
| | | try { |
| | | field.setAccessible(true); |
| | | if(field.get(o)!=null) { |
| | | String oVal = (String) field.get(o); |
| | | if ("".equals(oVal)) { |
| | | field.set(o, null); |
| | | } |
| | | } |
| | | } catch (IllegalAccessException e) { |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | public static void main(String[] args){ |
| | | PageComShopOrderSearchDTO dto = new PageComShopOrderSearchDTO(); |
| | | dto.setGoodsName(""); |
| | | dto.setOrderNo("123"); |
| | | setIfStringIsEmpty(dto); |
| | | System.out.println(dto); |
| | | |
| | | double d = 1234.200; |
| | | DecimalFormat df = new DecimalFormat("0.00"); |
| | | System.out.println(df.format(d)); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | spring: |
| | | application: |
| | | name: shopbackstage |
| | | cloud: |
| | | config: |
| | | discovery: |
| | | enabled: true |
| | | service-id: config # 注册中心的服务名 |
| | | profile: ${ENV:dev} # 指定配置文件的环境 |
| | | uri: http://${CONFIG_URL:localhost}:8193/ |
| | | profiles: |
| | | active: ${ENV:dev} |
| | | servlet: |
| | | multipart: |
| | | max-file-size: 10MB |
| | | max-request-size: 10MB |
| | | |
| | | eureka: |
| | | client: |
| | | service-url: |
| | | defaultZone: http://${EUREKA_URL:localhost}:8192/eureka |
| | | |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <configuration debug="false"> |
| | | <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> |
| | | <springProfile name="dev"> |
| | | <property name="LOG_HOME" value="F:/log" /> |
| | | </springProfile> |
| | | <springProfile name="test"> |
| | | <property name="LOG_HOME" value="/mnt/data/gocd/log" /> |
| | | </springProfile> |
| | | <property name="LOG_HOME" value="/mnt/data/gocd/log" /> |
| | | <!-- 控制台输出 --> |
| | | <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> |
| | | <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> |
| | | <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | </encoder> |
| | | </appender> |
| | | <!-- 按照每天生成日志文件 --> |
| | | <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <!--日志文件输出的文件名--> |
| | | <FileNamePattern>${LOG_HOME}/community_backstage.log.%d{yyyy-MM-dd}.log</FileNamePattern> |
| | | <!--日志文件保留天数--> |
| | | <MaxHistory>30</MaxHistory> |
| | | </rollingPolicy> |
| | | <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> |
| | | <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> |
| | | <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> |
| | | </encoder> |
| | | <!--日志文件最大的大小--> |
| | | <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> |
| | | <MaxFileSize>10MB</MaxFileSize> |
| | | </triggeringPolicy> |
| | | </appender> |
| | | |
| | | <!--myibatis log configure--> |
| | | <logger name="com.apache.ibatis" level="TRACE"/> |
| | | <logger name="java.sql.Connection" level="DEBUG"/> |
| | | <logger name="java.sql.Statement" level="DEBUG"/> |
| | | <logger name="java.sql.PreparedStatement" level="DEBUG"/> |
| | | <logger name="com.panzhihua.community_backstage" level="DEBUG"/> |
| | | |
| | | <!-- 日志输出级别 --> |
| | | <root level="DEBUG"> |
| | | <appender-ref ref="STDOUT" /> |
| | | </root> |
| | | <root level="INFO"> |
| | | <appender-ref ref="STDOUT" /> |
| | | <appender-ref ref="FILE" /> |
| | | </root> |
| | | </configuration> |