diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java index 1b4cb4d..3b7a0de 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java @@ -88,6 +88,15 @@ public class OrderController { orderVo.setUserId(jsonObject.getString("staffId")); return orderService.createOrder(orderVo,clientType,token); } + @PostMapping("/createBackOrder") + public Result createBackOrder(@RequestHeader("token") String token, @RequestHeader("loginName") String loginName, + @RequestHeader("clientType") String clientType, @RequestBody OrderVo orderVo){ + JSONObject jsonObject = TokenUtil.parseParamFromToken(token); + String userId = jsonObject.getString("accountId"); + orderVo.setMerchantId(Integer.valueOf(userId)); + orderVo.setUserId(jsonObject.getString("staffId")); + return orderService.createBackOrder(orderVo,clientType,token); + } @PostMapping("/packall") public Result packall(@RequestHeader("token") String token, @RequestHeader("loginName") String loginName, @RequestHeader("clientType") String clientType, @RequestBody CartVo cartVo){ diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java index 21f80f3..8942544 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/ProductController.java @@ -30,18 +30,28 @@ public class ProductController { @RequestParam("categoryId") String categoryId, @RequestParam("commdityName") String commdityName, @RequestParam("masterId") String masterId, - @RequestParam("page") int page, - @RequestParam("pageSize") int pageSize + int page, + int pageSize ){ return productService.queryCommodityInfo(shopId,categoryId,commdityName,page,pageSize,masterId); } + @GetMapping(value = "queryNewCommodityInfo") + public Result queryNewCommodityInfo( + @RequestHeader("token") String token, + @RequestHeader("loginName") String loginName, + @RequestHeader("clientType") String clientType, + @RequestParam("shopId") String shopId, + @RequestParam("categoryId") String categoryId, + @RequestParam("commdityName") String commdityName, + @RequestParam("masterId") String masterId, + @RequestParam("page") int page, + @RequestParam("pageSize") int pageSize + ){ - - - - + return productService.queryNewCommodityInfo(shopId,categoryId,commdityName,page,pageSize,masterId); + } @GetMapping(value = "queryCategory") public Result queryCategory( @RequestHeader("token") String token, diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderDetailMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderDetailMapper.java index 7499f13..b6d8232 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderDetailMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderDetailMapper.java @@ -41,4 +41,6 @@ public interface TbOrderDetailMapper { BigDecimal selectByOrderId(String orderId); int batchInsert(@Param("list") List list,@Param("orderId") String orderId); + + TbOrderDetail selectByOrderIdAndSkuId(@Param("orderId") int orderId, @Param("skuId") Integer skuId); } \ No newline at end of file diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderInfoMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderInfoMapper.java index 3eaac2a..61454d8 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderInfoMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbOrderInfoMapper.java @@ -30,4 +30,6 @@ public interface TbOrderInfoMapper { List selectAllByShop(@Param("shopId") Integer shopId, @Param("orderType") String orderType, @Param("day") String day, @Param("orderNo") String orderNo); + + TbOrderInfo selectByTradeAndMasterId(@Param("day")String day, @Param("masterId")String masterId, @Param("shopId")Integer shopId); } \ No newline at end of file diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java index 2b1bae7..be2fc48 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java @@ -17,6 +17,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -48,6 +49,10 @@ public class OrderService { @Autowired TbOrderInfoMapper tbOrderInfoMapper; @Autowired + private OrderChildDetailMapper orderChildDetailMapper; + @Autowired + private OrderChildInfoMapper orderChildInfoMapper; + @Autowired TbOrderDetailMapper orderDetailMapper; @Autowired TbProductSkuResultMapper tbProductSkuResultMapper; @@ -600,11 +605,16 @@ public class OrderService { orderId = Integer.valueOf(cashierCart.getOrderId()); } } + if (orderId > 0) { - tbOrderInfoMapper.updateStatusById(orderId, "cancelled"); - orderDetailMapper.updateStatusByOrderId(orderId, "cancelled"); + TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(orderId); + if (Objects.nonNull(orderInfo) && !orderInfo.getStatus().equals("pending")){ + tbOrderInfoMapper.updateStatusById(orderId, "cancelled"); + orderDetailMapper.updateStatusByOrderId(orderId, "cancelled"); + cashierCartMapper.deleteBymasterId(cartVo.getMasterId(), Integer.valueOf(cartVo.getShopId()), day, "create", cartVo.getUuid()); + } + } - cashierCartMapper.deleteBymasterId(cartVo.getMasterId(), Integer.valueOf(cartVo.getShopId()), day, "create", cartVo.getUuid()); return Result.success(CodeEnum.SUCCESS); } @@ -648,4 +658,130 @@ public class OrderService { } return Result.success(CodeEnum.SUCCESS, orderInfo); } + + public Result createBackOrder(OrderVo orderVo, String clientType, String token) { + String day = DateUtils.getDay(); + List list = cashierCartMapper.selectAllCreateOrder(orderVo.getMasterId(), orderVo.getShopId(), day, "create", orderVo.getUuid()); + if(ObjectUtil.isEmpty(list)||ObjectUtil.isNull(list)||list.size()<=0){ + return Result.fail(CARTEXIST); + } + BigDecimal totalAmount = BigDecimal.ZERO; + BigDecimal packAMount = BigDecimal.ZERO; + BigDecimal feeAmount = BigDecimal.ZERO; + BigDecimal saleAmount = BigDecimal.ZERO; + Map skuMap = new HashMap<>(); + List orderDetails = new ArrayList<>(); + List modityOrderDetails = new ArrayList<>(); + String masterId = ""; + int orderId = 0; + if (list.size()<1 || list.isEmpty()){ + return Result.fail(CARTEXIST); + } + TbOrderInfo orderInfo = tbOrderInfoMapper.selectByTradeAndMasterId(day,orderVo.getMasterId(),orderVo.getShopId()); + if (Objects.nonNull(orderInfo)){ + orderId = orderInfo.getId(); + } + for (TbCashierCart cashierCart : list) { + TbProductSkuWithBLOBs tbProduct = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(cashierCart.getSkuId())); + totalAmount = totalAmount.add(cashierCart.getTotalAmount()); + packAMount = packAMount.add(cashierCart.getPackFee()); + feeAmount = cashierCart.getPackFee(); + if (Objects.nonNull(tbProduct)) { + saleAmount = saleAmount.add(tbProduct.getSalePrice()); + } + skuMap.put(tbProduct.getId(), tbProduct); + + TbOrderDetail orderDetail = orderDetailMapper.selectByOrderIdAndSkuId(orderId,Integer.valueOf(cashierCart.getSkuId())); + if (Objects.nonNull(orderDetail)){ + orderDetail.setNum(orderDetail.getNum()+cashierCart.getNumber()); + orderDetail.setPriceAmount(orderDetail.getPriceAmount().add(cashierCart.getTotalAmount())); + orderDetail.setPackAmount(orderDetail.getPackAmount().add(cashierCart.getPackFee())); + modityOrderDetails.add(orderDetail); + }else { + orderDetail = new TbOrderDetail(); + orderDetail.setCreateTime(new Date()); + orderDetail.setNum(cashierCart.getNumber()); + orderDetail.setPrice(cashierCart.getSalePrice()); + orderDetail.setPriceAmount(cashierCart.getTotalAmount()); + orderDetail.setProductId(Integer.valueOf(cashierCart.getProductId())); + orderDetail.setProductSkuId(Integer.valueOf(cashierCart.getSkuId())); + orderDetail.setProductSkuName(tbProduct.getSpecSnap()); + orderDetail.setProductName(cashierCart.getName()); + orderDetail.setShopId(orderVo.getShopId()); + orderDetail.setPackAmount(cashierCart.getPackFee()); + orderDetail.setStatus("unpaid"); + orderDetail.setProductImg(cashierCart.getCoverImg()); + masterId = cashierCart.getMasterId(); + if (StringUtils.isNotEmpty(cashierCart.getOrderId())) { + orderId = Integer.valueOf(cashierCart.getOrderId()); + } + } + orderDetails.add(orderDetail); + } + String orderNo = generateOrderNumber(); + TbToken tbToken = tokenMapper.selectByToken(token); + + if (orderId > 0) { + orderDetailMapper.deleteByOUrderId(orderId); + orderInfo.setUpdatedAt(System.currentTimeMillis()); + orderInfo.setSettlementAmount(orderInfo.getSettlementAmount().add(totalAmount)); + orderInfo.setAmount(orderInfo.getAmount().add(totalAmount)); + orderInfo.setOriginAmount(orderInfo.getOriginAmount().add(totalAmount)); + orderInfo.setStatus("unpaid"); + orderInfo.setOrderAmount(orderInfo.getOrderAmount().add(totalAmount)); + orderInfo.setFreightAmount(orderInfo.getFreightAmount().add(feeAmount)); + orderInfo.setProductAmount(orderInfo.getProductAmount().add(saleAmount)); + orderInfo.setTradeDay(DateUtils.getDay()); + orderInfo.setUserId(orderVo.getUserId()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + } else { + orderInfo = new TbOrderInfo(orderNo, totalAmount, packAMount, totalAmount, saleAmount, totalAmount, feeAmount, "", + "table", "cash", orderVo.getMerchantId().toString(), orderVo.getShopId().toString(), + "", (byte) 1, day, masterId); + orderInfo.setMasterId(masterId); + orderInfo.setRemark(orderVo.getRemark()); + orderInfo.setUserId(orderVo.getUserId()); + if (Objects.nonNull(tbToken)){ + orderInfo.setTokenId(tbToken.getId()); + } + + tbOrderInfoMapper.insert(orderInfo); + orderId = orderInfo.getId(); + } + OrderChildInfo orderChildInfo = new OrderChildInfo(orderNo, totalAmount, packAMount, totalAmount, saleAmount, totalAmount, feeAmount, "", + "table", "cash", orderVo.getMerchantId().toString(), orderVo.getShopId().toString(), + "", (byte) 1, day, masterId); + orderChildInfo.setMasterId(masterId); + orderChildInfo.setRemark(orderVo.getRemark()); + orderChildInfo.setUserId(orderVo.getUserId()); + orderChildInfo.setParentorderno(orderNo); + orderChildInfo.setOrderNo(orderNo+"-"+1); + orderChildInfoMapper.insert(orderChildInfo); + List childDetailList = new ArrayList<>(); + for (TbOrderDetail orderDetail : orderDetails) { + orderDetail.setOrderId(orderId); + orderDetailMapper.insert(orderDetail); + OrderChildDetail orderChildDetail = new OrderChildDetail(); + BeanUtils.copyProperties(orderDetail,orderChildDetail); + childDetailList.add(orderChildDetail); + } + for (OrderChildDetail orderChildDetail:childDetailList){ + orderChildDetail.setOrderId(orderChildInfo.getId()); + orderChildDetailMapper.insert(orderChildDetail); + } + boolean flag = true; + for (TbCashierCart cashierCart : list) { + if (StringUtils.isNotEmpty(cashierCart.getOrderId())) { + flag = false; + } + cashierCart.setOrderId(orderId + ""); + cashierCart.setStatus("closed"); + cashierCart.setUpdatedAt(System.currentTimeMillis()); + cashierCartMapper.updateByPrimaryKeySelective(cashierCart); + } + if (flag) { + redisUtil.deleteByKey("SHOP:CODE:USER:" + clientType + ":" + orderVo.getShopId() + ":" + day + orderVo.getUserId()); + } + return Result.success(CodeEnum.SUCCESS, orderInfo); + } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java index 546fad0..5b07369 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/ProductService.java @@ -46,6 +46,46 @@ public class ProductService { public Result queryCommodityInfo(String shopId, String categoryId, String commdityName, Integer page, Integer pageSize, String masterId){ + List tbProductWithBLOBs=null; + if(ObjectUtil.isEmpty(categoryId)){ + tbProductWithBLOBs=tbProductMapper.selectByShopId(shopId,commdityName); + }else { + tbProductWithBLOBs=tbProductMapper.selectByShopIdAndShopType(shopId,categoryId,commdityName); + } + + String day = DateUtils.getDay(); + if(ObjectUtil.isNotEmpty(tbProductWithBLOBs)){ + tbProductWithBLOBs.parallelStream().forEach(it->{ + Integer orderCount=tbProductMapper.countOrderByshopIdAndProductId(it.getShopId(),it.getId().toString(),masterId,day); + it.setOrderCount((ObjectUtil.isNull(orderCount)||ObjectUtil.isEmpty(orderCount))?0:orderCount); + TbProductSpec tbProductSpec= tbProductSpecMapper.selectByPrimaryKey(it.getSpecId()); + if(ObjectUtil.isEmpty(tbProductSpec)){ + tbProductSpec=new TbProductSpec(); + } + it.setTbProductSpec(tbProductSpec); + + TbProductSkuResult skuResult=tbProductSkuResultMapper.selectByPrimaryKey(it.getId()); + if(ObjectUtil.isEmpty(skuResult)){ + skuResult=new TbProductSkuResult(); + } + it.setProductSkuResult(skuResult); + }); + } + return Result.success(CodeEnum.SUCCESS,tbProductWithBLOBs); + } + + + public Result queryProductSku(String shopId, String productId, String spec_tag){ + if(ObjectUtil.isEmpty(shopId)||ObjectUtil.isEmpty(productId)){ + return Result.fail(CodeEnum.PARAM); + } + + TbProductSkuWithBLOBs tbProductSkuWithBLOBs= tbProductSkuMapper.selectByShopIdAndProductIdAndSpec(shopId,productId,spec_tag); + return Result.success(CodeEnum.SUCCESS,tbProductSkuWithBLOBs); + + } + + public Result queryNewCommodityInfo(String shopId, String categoryId, String commdityName, int page, int pageSize, String masterId) { List tbProductWithBLOBs=null; if(ObjectUtil.isEmpty(categoryId)){ PageHelper.startPage(page, pageSize); @@ -73,18 +113,7 @@ public class ProductService { it.setProductSkuResult(skuResult); }); } - - return Result.success(CodeEnum.SUCCESS,tbProductWithBLOBs); - } - - - public Result queryProductSku(String shopId, String productId, String spec_tag){ - if(ObjectUtil.isEmpty(shopId)||ObjectUtil.isEmpty(productId)){ - return Result.fail(CodeEnum.PARAM); - } - - TbProductSkuWithBLOBs tbProductSkuWithBLOBs= tbProductSkuMapper.selectByShopIdAndProductIdAndSpec(shopId,productId,spec_tag); - return Result.success(CodeEnum.SUCCESS,tbProductSkuWithBLOBs); - + PageInfo pageInfo=new PageInfo(tbProductWithBLOBs); + return Result.success(CodeEnum.SUCCESS,pageInfo); } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/util/JSONUtil.java b/src/main/java/com/chaozhanggui/system/cashierservice/util/JSONUtil.java index 9f33248..b64e616 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/util/JSONUtil.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/util/JSONUtil.java @@ -3,6 +3,7 @@ package com.chaozhanggui.system.cashierservice.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializerFeature; @@ -117,7 +118,7 @@ public class JSONUtil { } /** - * 字符串转为JSON对象,注意数组类型会抛异常[{name:\"Stone\"}] + * 字符串转为JSON对象,注意数组类型会抛异常[{name:"Stone"}] * (假设json字符串多了某个字段,可能是新加上去的,显然转换成JSONObject时会有这个字段,因为JSONObject就相当于map) * * @param jsonStr 传入的JSON字串 @@ -133,7 +134,7 @@ public class JSONUtil { } /** - * 字符串转为JSON数组,注意对象类型,非数组的会抛异常{name:\"Stone\"} + * 字符串转为JSON数组,注意对象类型,非数组的会抛异常{name:"Stone"} * (假设json字符串多了某个字段,可能是新加上去的,显然转换成JSONArray时,其元素会有这个字段,因为JSONArray的元素JSONObject就相当于map) * * @param jsonStr 传入的JSON字串 @@ -166,6 +167,12 @@ public class JSONUtil { } } + public static void main(String[] args) { + String sss = "{\"bizData\":{\"amount\":1,\"currency\":\"cny\",\"ifCode\":\"sxfpay\",\"mchOrderNo\":\"CZ1715744291232\",\"mercNo\":\"B240510702030\",\"note\":\"等待用户付款\",\"payOrderId\":\"O1790587460614225921\",\"payType\":\"WECHAT\",\"settlementType\":\"D1\",\"state\":\"TRADE_AWAIT\",\"storeId\":\"S2405103298\",\"subject\":\"测试支付\",\"tradeFee\":0},\"code\":\"000000\",\"msg\":\"请求成功\",\"sign\":\"40710a3c293eeac3c7f4a1b0696a2bf6\",\"signType\":\"MD5\",\"timestamp\":\"20240515113813\"}"; +// TypeReference> typeRef = new TypeReference>(){}; +// PublicResp response = JSON.parseObject(sss, typeRef); + System.out.println("pm"); + } /** * 字符串转为某个类的列表 * (日期字段不管是时间戳形式还是yyyy-MM-dd HH:mm:ss的形式都能成功转换) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 13fe19d..d5cbf79 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -1,10 +1,12 @@ +server: + port: 10587 spring: application: name: cashierService datasource: - url: jdbc:mysql://121.40.128.145:3306/fycashier?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true - username: root - password: mysqlroot@123 + url: jdbc:mysql://101.37.12.135:3306/fycashier?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true + username: fycashier + password: Twc6MrzzjBiWSsjh driver-class-name: com.mysql.cj.jdbc.Driver initialSize: 5 minIdle: 5 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 71de68e..df8586d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: hph + active: prod2 server: servlet: context-path: /cashier-client/ diff --git a/src/main/resources/generator-mapper/generatorConfig.xml b/src/main/resources/generator-mapper/generatorConfig.xml index 1650fcb..65b82db 100644 --- a/src/main/resources/generator-mapper/generatorConfig.xml +++ b/src/main/resources/generator-mapper/generatorConfig.xml @@ -6,7 +6,7 @@ - + @@ -19,8 +19,8 @@ - + @@ -37,28 +37,31 @@ 也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下 --> - + - + - + - +
+
-
\ No newline at end of file diff --git a/src/main/resources/mapper/TbOrderDetailMapper.xml b/src/main/resources/mapper/TbOrderDetailMapper.xml index 91b359b..f58d3ce 100644 --- a/src/main/resources/mapper/TbOrderDetailMapper.xml +++ b/src/main/resources/mapper/TbOrderDetailMapper.xml @@ -228,6 +228,10 @@ + update tb_order_detail set status = #{status} where order_id = #{orderId} and status='unpaid' diff --git a/src/main/resources/mapper/TbOrderInfoMapper.xml b/src/main/resources/mapper/TbOrderInfoMapper.xml index da02b43..55e6184 100644 --- a/src/main/resources/mapper/TbOrderInfoMapper.xml +++ b/src/main/resources/mapper/TbOrderInfoMapper.xml @@ -537,4 +537,9 @@ + \ No newline at end of file diff --git a/src/main/resources/mapper/TbProductMapper.xml b/src/main/resources/mapper/TbProductMapper.xml index ba0a13c..b63d801 100644 --- a/src/main/resources/mapper/TbProductMapper.xml +++ b/src/main/resources/mapper/TbProductMapper.xml @@ -883,7 +883,7 @@ - select * from tb_product where shop_id=#{shopId} and status=1 and category_id=#{categoryId} and is_show_cash = 1 + select * from tb_product where shop_id=#{shopId} and status=1 and category_id=#{categoryId} and is_show_cash = 1 and type_enum in ('normal','sku','currentPrice','weight') and name like CONCAT('%',#{commdityName},'%')