diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index bb4e79a..6769d5e 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -4,7 +4,9 @@
+
+
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/bwie-common/src/main/java/com/bwie/common/pojo/DTO/DTOGoods.java b/bwie-common/src/main/java/com/bwie/common/pojo/DTO/DTOGoods.java
new file mode 100644
index 0000000..64b13e6
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/pojo/DTO/DTOGoods.java
@@ -0,0 +1,33 @@
+package com.bwie.common.pojo.DTO;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class DTOGoods {
+ private Integer goodsId; //商品设备中间id
+ private Integer shopId; //商品id
+ private Integer facilityId; //设备id
+ private Integer goodsNum; //库存
+ private Integer goodsIsDelete; //上下架(逻辑字段: 0上架, 1下架)
+ private String shopName; //商品名称
+ private Double shopPrice; //商品价格
+ private Integer typeId; //商品类型id
+ private String facilityType; //设备类型
+ private String facilitySite; //设备地址
+ private Integer replenishmentUserId; //补货员工
+ private Integer maintainUserId; //维修员工
+ private String facilityStatic; //设备状态
+ private Integer delId; //删除状态
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/pojo/DTO/DTOUser.java b/bwie-common/src/main/java/com/bwie/common/pojo/DTO/DTOUser.java
index 39344e8..94bebf7 100644
--- a/bwie-common/src/main/java/com/bwie/common/pojo/DTO/DTOUser.java
+++ b/bwie-common/src/main/java/com/bwie/common/pojo/DTO/DTOUser.java
@@ -1,9 +1,21 @@
package com.bwie.common.pojo.DTO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
/**
* @author FangShiBa
* @date 2023/12/16
* @apiNote
*/
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
public class DTOUser {
+ private Integer userId;
+
+
}
diff --git a/bwie-common/src/main/java/com/bwie/common/pojo/Facility.java b/bwie-common/src/main/java/com/bwie/common/pojo/Facility.java
new file mode 100644
index 0000000..a51451f
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/pojo/Facility.java
@@ -0,0 +1,28 @@
+package com.bwie.common.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class Facility {
+ private Integer facilityId; //设备编号
+ private String facilityType; //设备类型
+ private String facilitySite; //设备地址
+ private Integer replenishmentUserId; //补货员工
+ private Integer maintainUserId; //维修员工
+ private String facilityStatic; //设备状态
+ private Integer delId; //删除状态
+
+
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/pojo/Goods.java b/bwie-common/src/main/java/com/bwie/common/pojo/Goods.java
new file mode 100644
index 0000000..32dff04
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/pojo/Goods.java
@@ -0,0 +1,23 @@
+package com.bwie.common.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class Goods {
+ private Integer goodsId; //商品设备中间id
+ private Integer shopId; //商品id
+ private Integer facilityId; //设备id
+ private Integer goodsNum; //库存
+ private Integer goodsIsDelete; //上下架(逻辑字段: 0上架, 1下架)
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/pojo/Sell.java b/bwie-common/src/main/java/com/bwie/common/pojo/Sell.java
new file mode 100644
index 0000000..54c3cfc
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/pojo/Sell.java
@@ -0,0 +1,31 @@
+package com.bwie.common.pojo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/18
+ * @apiNote
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class Sell {
+ private Integer sellId;
+ private Integer shopId;
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ private Date sellTime;
+ private Integer userId;
+ private Integer facilityId;
+
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/pojo/Shop.java b/bwie-common/src/main/java/com/bwie/common/pojo/Shop.java
new file mode 100644
index 0000000..de761ea
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/pojo/Shop.java
@@ -0,0 +1,23 @@
+package com.bwie.common.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class Shop {
+ private Integer shopId; //商品id
+ private String shopName; //商品名称
+ private Double shopPrice; //商品价格
+ private Integer typeId; //商品类型id
+
+}
diff --git a/bwie-common/src/main/java/com/bwie/common/pojo/VO/VOGoods.java b/bwie-common/src/main/java/com/bwie/common/pojo/VO/VOGoods.java
new file mode 100644
index 0000000..78a91c0
--- /dev/null
+++ b/bwie-common/src/main/java/com/bwie/common/pojo/VO/VOGoods.java
@@ -0,0 +1,27 @@
+package com.bwie.common.pojo.VO;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class VOGoods {
+ private Integer goodsId; //商品设备中间id
+ private Integer shopId; //商品id
+ private Integer facilityId; //设备id
+ private Integer goodsNum; //库存
+ private Integer goodsIsDelete; //上下架(逻辑字段: 0上架, 1下架)
+ private Double payForMoney; //支付金额
+
+ private Integer pageNum=1;
+ private Integer pageSize=3;
+}
diff --git a/bwie-models/bwie-buy/.gitignore b/bwie-models/bwie-buy/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/bwie-models/bwie-buy/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/bwie-models/bwie-buy/pom.xml b/bwie-models/bwie-buy/pom.xml
new file mode 100644
index 0000000..3cc4cd5
--- /dev/null
+++ b/bwie-models/bwie-buy/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ com.bwie
+ bwie-models
+ 1.0-SNAPSHOT
+
+
+ bwie-buy
+
+
+ 8
+ 8
+ UTF-8
+
+
+
diff --git a/bwie-models/bwie-buy/src/main/java/com/bwie/buy/BuyApplication.java b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/BuyApplication.java
new file mode 100644
index 0000000..322bc35
--- /dev/null
+++ b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/BuyApplication.java
@@ -0,0 +1,18 @@
+package com.bwie.buy;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@SpringBootApplication
+@MapperScan("com.bwie.buy.dao")
+public class BuyApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(BuyApplication.class,args);
+ }
+}
diff --git a/bwie-models/bwie-buy/src/main/java/com/bwie/buy/controller/BuyController.java b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/controller/BuyController.java
new file mode 100644
index 0000000..da9a31f
--- /dev/null
+++ b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/controller/BuyController.java
@@ -0,0 +1,60 @@
+package com.bwie.buy.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.bwie.buy.service.BuyService;
+import com.bwie.common.pojo.VO.VOGoods;
+import com.bwie.common.result.Result;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@Log4j2
+@RestController
+@RequestMapping("/buy")
+public class BuyController {
+ @Autowired
+ private BuyService service;
+ @Autowired
+ private HttpServletRequest request;
+
+ /*
+ 商品列表展示,购买商品时展示
+ */
+ @PostMapping("/showGoodsList")
+ public Result showGoodsList(@RequestBody VOGoods voGoods){
+
+ log.info("功能:{商品列表展示},请求URI:{},请求方法:{},请求参数:{}",
+ request.getRequestURI(), request.getMethod(),voGoods );
+ Result result=service.showGoodsList(voGoods);
+ log.info("功能:{商品列表展示},请求URI:{},请求方法:{},响应参数:{}",
+ request.getRequestURI(), request.getMethod(), JSONObject.toJSONString(result));
+ return result;
+ }
+
+ /*
+ 购买商品
+ */
+ @PostMapping("/buyGood")
+ public Result buyGood(@RequestBody VOGoods voGoods){
+
+ log.info("功能:{购买商品},请求URI:{},请求方法:{},请求参数:{}",
+ request.getRequestURI(), request.getMethod(),voGoods );
+ Result result=service.buyGood(voGoods);
+ log.info("功能:{购买商品},请求URI:{},请求方法:{},响应参数:{}",
+ request.getRequestURI(), request.getMethod(), JSONObject.toJSONString(result));
+ return result;
+ }
+
+
+
+}
diff --git a/bwie-models/bwie-buy/src/main/java/com/bwie/buy/dao/BuyDao.java b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/dao/BuyDao.java
new file mode 100644
index 0000000..ef4ae53
--- /dev/null
+++ b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/dao/BuyDao.java
@@ -0,0 +1,29 @@
+package com.bwie.buy.dao;
+
+import com.bwie.common.pojo.DTO.DTOGoods;
+import com.bwie.common.pojo.Sell;
+import com.bwie.common.pojo.Shop;
+import com.bwie.common.pojo.VO.VOGoods;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@Component
+public interface BuyDao {
+
+
+ List showGoodsList(VOGoods voGoods);
+
+
+ Shop findById(@Param("shopId") Integer shopId);
+
+ void buyGood(VOGoods voGoods);
+
+ void addSell(Sell sell);
+}
diff --git a/bwie-models/bwie-buy/src/main/java/com/bwie/buy/service/BuyService.java b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/service/BuyService.java
new file mode 100644
index 0000000..68408b4
--- /dev/null
+++ b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/service/BuyService.java
@@ -0,0 +1,15 @@
+package com.bwie.buy.service;
+
+import com.bwie.common.pojo.VO.VOGoods;
+import com.bwie.common.result.Result;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+public interface BuyService {
+ Result buyGood(VOGoods voGoods);
+
+ Result showGoodsList(VOGoods voGoods);
+}
diff --git a/bwie-models/bwie-buy/src/main/java/com/bwie/buy/service/impl/BuyServiceImp.java b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/service/impl/BuyServiceImp.java
new file mode 100644
index 0000000..edf1f2a
--- /dev/null
+++ b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/service/impl/BuyServiceImp.java
@@ -0,0 +1,67 @@
+package com.bwie.buy.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.bwie.buy.dao.BuyDao;
+import com.bwie.buy.service.BuyService;
+import com.bwie.common.constants.JwtConstants;
+import com.bwie.common.pojo.DTO.DTOGoods;
+import com.bwie.common.pojo.DTO.DTOUser;
+import com.bwie.common.pojo.Sell;
+import com.bwie.common.pojo.Shop;
+import com.bwie.common.pojo.VO.VOGoods;
+import com.bwie.common.result.Result;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * @author FangShiBa
+ * @date 2023/12/17
+ * @apiNote
+ */
+@Service
+public class BuyServiceImp implements BuyService {
+ @Autowired
+ private BuyDao dao;
+ @Autowired
+ private RedisTemplate redisTemplate;
+ @Autowired
+ private HttpServletRequest request;
+
+ @Override
+ public Result buyGood(VOGoods voGoods) {
+ if(null==voGoods.getFacilityId()||null==voGoods.getPayForMoney()){
+ return Result.error("输入的值有误或未输入");
+ }
+ Shop shop=dao.findById(voGoods.getShopId());
+ if(shop.getShopPrice()>voGoods.getPayForMoney()){
+ return Result.error("小老弟,钱不够");
+ }
+
+ //voGoods 参数有商品编号和售货机编号
+ dao.buyGood(voGoods);
+ String token = request.getHeader("token");
+ String s = redisTemplate.opsForValue().get(JwtConstants.LOGIN_TOKEN + token);
+ DTOUser dtoUser = JSON.parseObject(s, DTOUser.class);
+ Sell sell = new Sell();
+ sell.setFacilityId(voGoods.getFacilityId());
+ sell.setShopId(voGoods.getShopId());
+ sell.setUserId(dtoUser.getUserId());
+ dao.addSell(sell);
+
+ return Result.success("购买成功");
+ }
+
+ @Override
+ public Result showGoodsList(VOGoods voGoods) {
+ PageHelper.startPage(voGoods.getPageNum(),voGoods.getPageSize());
+ List list=dao.showGoodsList(voGoods);
+ PageInfo info = new PageInfo<>(list);
+ return Result.success(info);
+ }
+}
diff --git a/bwie-models/bwie-buy/src/main/java/com/bwie/buy/util/FastUtil.java b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/util/FastUtil.java
new file mode 100644
index 0000000..c9a5e45
--- /dev/null
+++ b/bwie-models/bwie-buy/src/main/java/com/bwie/buy/util/FastUtil.java
@@ -0,0 +1,55 @@
+package com.bwie.buy.util;
+
+import org.springframework.stereotype.Component;
+import com.github.tobato.fastdfs.domain.fdfs.StorePath;
+import com.github.tobato.fastdfs.service.FastFileStorageClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+/**
+ * @BelongsProject: 0107day02
+ * @BelongsPackage: com.bw.config
+ * @Author: zhupengfei
+ * @CreateTime: 2023-02-01 08:52
+ */
+@Component
+public class FastUtil {
+ private static final Logger log = LoggerFactory.getLogger(FastUtil.class);
+
+ @Resource
+ private FastFileStorageClient storageClient ;
+
+ /**
+ * 上传文件
+ */
+ public String upload(MultipartFile multipartFile) throws Exception{
+ String originalFilename = multipartFile.getOriginalFilename().
+ substring(multipartFile.getOriginalFilename().
+ lastIndexOf(".") + 1);
+ StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
+ multipartFile.getInputStream(),
+ multipartFile.getSize(),originalFilename , null);
+ return storePath.getFullPath() ;
+ }
+ /**
+ * 删除文件
+ */
+ public String deleteFile(String fileUrl) {
+ if (StringUtils.isEmpty(fileUrl)) {
+ log.info("fileUrl == >>文件路径为空...");
+ return "文件路径不能为空";
+ }
+ try {
+ StorePath storePath = StorePath.parseFromUrl(fileUrl);
+ storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ }
+ return "删除成功";
+ }
+
+}
diff --git a/bwie-models/bwie-buy/src/main/resources/bootstrap.yml b/bwie-models/bwie-buy/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..0afddb4
--- /dev/null
+++ b/bwie-models/bwie-buy/src/main/resources/bootstrap.yml
@@ -0,0 +1,41 @@
+# Tomcat
+server:
+ port: 9004
+# Spring
+spring:
+ main:
+ allow-circular-references: true
+ jackson:
+ date-format: yyyy-MM-dd HH:mm:ss
+ time-zone: GMT+8
+ application:
+ # 应用名称
+ name: bwie-buy
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 110.42.214.8:8848
+ config:
+ # 配置中心地址
+ server-addr: 110.42.214.8:8848
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+fdfs:
+ so-timeout: 1500 # socket 连接时长
+ connect-timeout: 600 # 连接 tracker 服务器超时时长
+ # 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流
+ tracker-list: 110.42.214.8:22122
+ web-server-url: 110.42.214.8:8888
+ pool:
+ jmx-enabled: false
+ # 生成缩略图
+ thumb-image:
+ height: 500
+ width: 500
diff --git a/bwie-models/bwie-buy/src/main/resources/mapper/BuyMapper.xml b/bwie-models/bwie-buy/src/main/resources/mapper/BuyMapper.xml
new file mode 100644
index 0000000..93d3d47
--- /dev/null
+++ b/bwie-models/bwie-buy/src/main/resources/mapper/BuyMapper.xml
@@ -0,0 +1,29 @@
+
+
+
+
+ INSERT INTO `shop_manage`.`t_sell`
+ (`shop_id`, `sell_time`, `user_id`, `facility_id`) VALUES
+ (#{shopId}, now(), #{userId}, #{facilityId});
+
+
+
+
+ UPDATE `shop_manage`.`t_goods` SET
+ `goods_num` = (`goods_num`-1)
+ WHERE
+ `shop_id` = #{shopId} and
+ `facility_id` = #{facilityId}
+
+
+
+
+
diff --git a/bwie-models/pom.xml b/bwie-models/pom.xml
index 773a9c7..cd3e375 100644
--- a/bwie-models/pom.xml
+++ b/bwie-models/pom.xml
@@ -10,6 +10,10 @@
bwie-models
+ pom
+
+ bwie-buy
+
8