From 44cfec9028fd5668737df8279a3e4d47b890e561 Mon Sep 17 00:00:00 2001 From: weicw <594098497@qq.com> Date: Tue, 8 Aug 2023 17:20:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AE=A2=E5=8D=95=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gxwebsoft/apps/entity/Equipment.java | 6 + .../com/gxwebsoft/apps/task/OrderTask.java | 141 ++++++++ .../common/core/config/MybatisPlusConfig.java | 26 +- .../common/core/constants/OrderConstants.java | 3 +- .../common/core/utils/AlipayConfigUtil.java | 2 +- .../controller/OpenEquipmentController.java | 302 +++++++++--------- .../shop/controller/OrderController.java | 290 +++++++++-------- .../java/com/gxwebsoft/shop/entity/Order.java | 3 + src/main/resources/application-dev.yml | 4 +- 9 files changed, 483 insertions(+), 294 deletions(-) create mode 100644 src/main/java/com/gxwebsoft/apps/task/OrderTask.java diff --git a/src/main/java/com/gxwebsoft/apps/entity/Equipment.java b/src/main/java/com/gxwebsoft/apps/entity/Equipment.java index f91fd16..aed2ca6 100644 --- a/src/main/java/com/gxwebsoft/apps/entity/Equipment.java +++ b/src/main/java/com/gxwebsoft/apps/entity/Equipment.java @@ -90,6 +90,8 @@ public class Equipment implements Serializable { @ApiModelProperty(value = "用户ID") private Integer userId; + @ApiModelProperty(value = "投资人ID") + private Integer touziUserId; @ApiModelProperty(value = "排序(数字越小越靠前)") private Integer sortNumber; @@ -145,4 +147,8 @@ public class Equipment implements Serializable { @ApiModelProperty(value = "绑定的用户") @TableField(exist = false) private User user; + + @ApiModelProperty(value = "绑定的用户") + @TableField(exist = false) + private User touziUser; } diff --git a/src/main/java/com/gxwebsoft/apps/task/OrderTask.java b/src/main/java/com/gxwebsoft/apps/task/OrderTask.java new file mode 100644 index 0000000..23289f8 --- /dev/null +++ b/src/main/java/com/gxwebsoft/apps/task/OrderTask.java @@ -0,0 +1,141 @@ +package com.gxwebsoft.apps.task; + +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.annotation.SqlParser; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.gxwebsoft.apps.entity.Equipment; +import com.gxwebsoft.apps.service.EquipmentGoodsService; +import com.gxwebsoft.apps.service.EquipmentService; +import com.gxwebsoft.common.core.config.MybatisPlusConfig; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.service.UserService; +import com.gxwebsoft.love.entity.UserPlanLog; +import com.gxwebsoft.love.param.UserPlanLogParam; +import com.gxwebsoft.shop.entity.Order; +import com.gxwebsoft.shop.param.OrderParam; +import com.gxwebsoft.shop.service.OrderService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +import static com.gxwebsoft.common.core.constants.OrderConstants.*; + +/** + * 定时任务:订单处理 + */ +@Component +@Slf4j +public class OrderTask { + + @Resource + private OrderService orderService; + + @Resource + private EquipmentService equipmentService; + + @Resource + private EquipmentGoodsService goodsService; + + @Resource + private UserService userService; + + /** + * 删除30分钟未下单的订单 + */ + @Scheduled(cron="0 0/30 * * * ? ") + public void removeTimeoutOrder() { + Date newDate = DateUtil.offset(DateUtil.date(), DateField.MINUTE, -30); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(Order.class) + .eq(Order::getPayStatus, PAY_STATUS_NO_PAY) + .lt(Order::getCreateTime, newDate); + + boolean remove = orderService.remove(wrapper); + + } + + /** + * 计算分润 + */ + @Scheduled(cron="0 0/30 * * * ? ") + @Transactional + public void CalcProfit() { + log.info("开始计算分润"); + // 查询所有未结算订单 + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(Order.class) + .eq(Order::getIsSettled, ORDER_SETTLED_NO) + .eq(Order::getPayStatus, PAY_STATUS_SUCCESS) + .eq(Order::getOrderStatus, ORDER_STATUS_COMPLETED); + + List orderList = orderService.list(wrapper); + + // 查询所有关联的设备 + Set equipmentIds = new HashSet<>(); + Set tuijianUserPhones = new HashSet<>(); + + for (Order order : orderList) { + equipmentIds.add(order.getEquipmentId()); + if(order.getDealerPhone() != null){ + tuijianUserPhones.add(order.getDealerPhone()); + } + } + List equipmentList = equipmentService.list(Wrappers.lambdaQuery(Equipment.class).in(Equipment::getEquipmentId, equipmentIds)); + Map equipmentMap = new HashMap<>(); + Set touziUserIds = new HashSet<>(); + for (Equipment equipment : equipmentList) { + equipmentMap.put(equipment.getEquipmentId(),equipment); + if(equipment.getTouziUserId() != null) { + touziUserIds.add(equipment.getTouziUserId()); + } + } + + // 查询所有投资人 + Map touziUserMap = new HashMap<>(); + if(CollectionUtils.isNotEmpty(touziUserIds)){ + List list = userService.list(Wrappers.lambdaQuery(User.class).in(User::getUserId, touziUserIds)); + for (User user : list) { + touziUserMap.put(user.getUserId(), user); + } + } + + // 查询所有推荐人 + Map tuijianUserMap = new HashMap<>(); + if(CollectionUtils.isNotEmpty(tuijianUserPhones)){ + List tuijianUserList = userService.list(Wrappers.lambdaQuery(User.class).in(User::getPhone, tuijianUserPhones)); + for (User user : tuijianUserList) { + tuijianUserMap.put(user.getPhone(), user); + } + } + + + // 开始结算 + for (Order order : orderList) { + // 计算投资人收益 + Equipment equipment = equipmentMap.get(order.getEquipment()); + User touziUser = touziUserMap.get(equipment.getTouziUserId()); + if(touziUser != null){ + + } + //获取推荐人身份、 计算推荐人收益 + User tuijianUser = tuijianUserMap.get(order.getDealerPhone()); + if(tuijianUser != null){ + + } + // 计算门店收益 + + // 计算区域经理收益 + System.out.println(equipment); + + } + + } +} diff --git a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java index c4704fb..788d4d0 100644 --- a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java @@ -38,16 +38,22 @@ public class MybatisPlusConfig { // String device_id = request.getHeader("device-id"); // System.out.println("device_id = " + device_id); // 从设备请求头拿ID - String DeviceID = request.getHeader("Device-ID"); - if (StrUtil.isNotBlank(DeviceID)) { - return new LongValue(10048); - } - // 从请求头拿ID - final String tenantId = request.getHeader("tenantId"); - if(tenantId != null){ - return new LongValue(tenantId); - } - return getLoginUserTenantId(); + try { + String DeviceID = request.getHeader("Device-ID"); + if (StrUtil.isNotBlank(DeviceID)) { + return new LongValue(6); + } + // 从请求头拿ID + final String tenantId = request.getHeader("tenantId"); + if(tenantId != null){ + return new LongValue(tenantId); + } + return getLoginUserTenantId(); + + }catch (Exception e){ + return new LongValue(6); + } + } @Override diff --git a/src/main/java/com/gxwebsoft/common/core/constants/OrderConstants.java b/src/main/java/com/gxwebsoft/common/core/constants/OrderConstants.java index e866654..ef3bc61 100644 --- a/src/main/java/com/gxwebsoft/common/core/constants/OrderConstants.java +++ b/src/main/java/com/gxwebsoft/common/core/constants/OrderConstants.java @@ -19,6 +19,8 @@ public class OrderConstants { // 收货状态 public static final Integer RECEIPT_STATUS_NO = 10; // 未收货 public static final Integer RECEIPT_STATUS_YES = 20; // 已收货 + public static final Integer RECEIPT_STATUS_APPLY = 21; // 申请 + public static final Integer RECEIPT_STATUS_reject = 22; // 已驳回退租 public static final Integer RECEIPT_STATUS_RETURN = 30; // 已退货 // 订单状态 @@ -33,5 +35,4 @@ public class OrderConstants { - } diff --git a/src/main/java/com/gxwebsoft/common/core/utils/AlipayConfigUtil.java b/src/main/java/com/gxwebsoft/common/core/utils/AlipayConfigUtil.java index 42975ef..dbcf295 100644 --- a/src/main/java/com/gxwebsoft/common/core/utils/AlipayConfigUtil.java +++ b/src/main/java/com/gxwebsoft/common/core/utils/AlipayConfigUtil.java @@ -67,7 +67,7 @@ public class AlipayConfigUtil { */ public JSONObject payment(Integer tenantId) { System.out.println("tenantId = " + tenantId); - String key = "cache".concat(tenantId.toString()).concat(":setting:payment"); + String key = "setting:payment:" + tenantId; System.out.println("key = " + key); String cache = stringRedisTemplate.opsForValue().get(key); if (cache == null) { diff --git a/src/main/java/com/gxwebsoft/open/controller/OpenEquipmentController.java b/src/main/java/com/gxwebsoft/open/controller/OpenEquipmentController.java index 22629b5..02fc230 100644 --- a/src/main/java/com/gxwebsoft/open/controller/OpenEquipmentController.java +++ b/src/main/java/com/gxwebsoft/open/controller/OpenEquipmentController.java @@ -66,7 +66,7 @@ public class OpenEquipmentController extends BaseController { PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); if (getMerchantCode() != null) { - param.setMerchantCode(getMerchantCode()); + param.setMerchantCode(getMerchantCode()); } return success(equipmentService.pageRel(param)); } @@ -101,18 +101,18 @@ public class OpenEquipmentController extends BaseController { // 记录当前登录用户id、租户id User loginUser = getLoginUser(); if (loginUser != null && getMerchantCode() != null) { - equipment.setMerchantCode(getMerchantCode()); + equipment.setMerchantCode(getMerchantCode()); } if (equipmentService.count(new LambdaQueryWrapper() - .eq(Equipment::getEquipmentCode, equipment.getEquipmentCode())) > 0) { - return fail("设备编号已存在"); + .eq(Equipment::getEquipmentCode, equipment.getEquipmentCode())) > 0) { + return fail("设备编号已存在"); } if (equipmentService.save(equipment)) { - // 生成二维码 - String qrcode = createQrcode(equipment); - equipment.setQrcode(qrcode); - equipmentService.saveOrUpdate(equipment); - return success("添加成功"); + // 生成二维码 + String qrcode = createQrcode(equipment); + equipment.setQrcode(qrcode); + equipmentService.saveOrUpdate(equipment); + return success("添加成功"); } return fail("添加失败"); } @@ -123,10 +123,10 @@ public class OpenEquipmentController extends BaseController { @PutMapping() public ApiResult update(@RequestBody Equipment equipment) throws AlipayApiException { if (equipmentService.updateById(equipment)) { - // 生成二维码 - String qrcode = createQrcode(equipment); - equipment.setQrcode(qrcode); - equipmentService.saveOrUpdate(equipment); + // 生成二维码 + String qrcode = createQrcode(equipment); + equipment.setQrcode(qrcode); + equipmentService.saveOrUpdate(equipment); return success("修改成功"); } return fail("修改失败"); @@ -177,163 +177,173 @@ public class OpenEquipmentController extends BaseController { } // 生成支付宝小程序码 - private String createQrcode(Equipment equipment) throws AlipayApiException{ - // 实例化客户端 - DefaultAlipayClient alipayClient = alipayConfig.alipayClient(getTenantId()); + private String createQrcode(Equipment equipment) throws AlipayApiException { + // 实例化客户端 + DefaultAlipayClient alipayClient = alipayConfig.alipayClient(getTenantId()); - AlipayOpenAppQrcodeCreateRequest request = new AlipayOpenAppQrcodeCreateRequest(); - AlipayOpenAppQrcodeCreateModel model = new AlipayOpenAppQrcodeCreateModel(); - model.setUrlParam("pages/checkout/checkout"); - model.setQueryParam("equipmentId=".concat(equipment.getEquipmentId().toString()).concat("&equipmentCode=").concat(equipment.getEquipmentCode())); - model.setDescribe("扫码租赁电池"); - request.setBizModel(model); - AlipayOpenAppQrcodeCreateResponse response = alipayClient.certificateExecute(request); - System.out.println(response.getBody()); - if (response.isSuccess()) { - System.out.println("调用成功"); - final JSONObject jsonObject = JSONObject.parseObject(response.getBody()); - final String alipay_open_app_qrcode_create_response = jsonObject.getString("alipay_open_app_qrcode_create_response"); - final JSONObject jsonObject1 = JSONObject.parseObject(alipay_open_app_qrcode_create_response); - return jsonObject1.getString("qr_code_url"); - } else { - System.out.println("调用失败"); - return null; - } + AlipayOpenAppQrcodeCreateRequest request = new AlipayOpenAppQrcodeCreateRequest(); + AlipayOpenAppQrcodeCreateModel model = new AlipayOpenAppQrcodeCreateModel(); + model.setUrlParam("pages/checkout/checkout"); + model.setQueryParam("equipmentId=".concat(equipment.getEquipmentId().toString()).concat("&equipmentCode=").concat(equipment.getEquipmentCode())); + model.setDescribe("扫码租赁电池"); + request.setBizModel(model); + AlipayOpenAppQrcodeCreateResponse response = alipayClient.certificateExecute(request); + System.out.println(response.getBody()); + if (response.isSuccess()) { + System.out.println("调用成功"); + final JSONObject jsonObject = JSONObject.parseObject(response.getBody()); + final String alipay_open_app_qrcode_create_response = jsonObject.getString("alipay_open_app_qrcode_create_response"); + final JSONObject jsonObject1 = JSONObject.parseObject(alipay_open_app_qrcode_create_response); + return jsonObject1.getString("qr_code_url"); + } else { + System.out.println("调用失败"); + return null; + } } @ApiOperation("绑定设备") @PostMapping("/bind") @Transactional(rollbackFor = {Exception.class}) public ApiResult bindEquipment(@RequestBody Equipment equipment) { - // 验证签名 - isCheckSign(); - final Integer orderId = equipment.getOrderId(); - final String equipmentCode = equipment.getEquipmentCode(); - final Order order = orderService.getById(orderId); - Equipment one = equipmentService.getByEquipmentCode(equipmentCode); - if(one == null){ - return fail("设备不存在"); - } - if(!one.getUserId().equals(0)){ - return fail("该设备已被绑定"); - } - // 绑定设备 - Equipment saveData = new Equipment(); - saveData.setEquipmentId(one.getEquipmentId()); - saveData.setUserId(getLoginUserId()); - saveData.setOrderId(orderId); - if (equipmentService.updateById(saveData)) { - // 记录明细 - EquipmentRecord record = new EquipmentRecord(); - record.setEquipmentCode(one.getEquipmentCode()); - record.setUserId(getLoginUserId()); - record.setOrderId(orderId); - record.setEventType(EVENT_TYPE_BIND); - record.setComments("使用电池:"); - record.setMerchantCode(one.getMerchantCode()); - equipmentRecordService.save(record); - // 订单发货 - order.setDeliveryStatus(DELIVERY_STATUS_YES); - order.setOrderStatus(ORDER_STATUS_COMPLETED); - order.setReceiptStatus(RECEIPT_STATUS_YES); - order.setExpirationTime(DateUtil.nextMonth()); - order.setEquipmentId(one.getEquipmentId()); - orderService.updateById(order); - return success("绑定成功"); - } - return fail("绑定失败"); + // 验证签名 + isCheckSign(); + final Integer orderId = equipment.getOrderId(); + final String equipmentCode = equipment.getEquipmentCode(); + final Order order = orderService.getById(orderId); + Equipment one = equipmentService.getByEquipmentCode(equipmentCode); + if (one == null) { + return fail("设备不存在"); + } + if (!one.getUserId().equals(0)) { + return fail("该设备已被绑定"); + } + // 绑定设备 + Equipment saveData = new Equipment(); + saveData.setEquipmentId(one.getEquipmentId()); + saveData.setUserId(getLoginUserId()); + saveData.setOrderId(orderId); + if (equipmentService.updateById(saveData)) { + // 记录明细 + EquipmentRecord record = new EquipmentRecord(); + record.setEquipmentCode(one.getEquipmentCode()); + record.setUserId(getLoginUserId()); + record.setOrderId(orderId); + record.setEventType(EVENT_TYPE_BIND); + record.setComments("使用电池:"); + record.setMerchantCode(one.getMerchantCode()); + equipmentRecordService.save(record); + // 订单发货 + order.setDeliveryStatus(DELIVERY_STATUS_YES); + order.setOrderStatus(ORDER_STATUS_COMPLETED); + order.setReceiptStatus(RECEIPT_STATUS_YES); + order.setExpirationTime(DateUtil.nextMonth()); + order.setEquipmentId(one.getEquipmentId()); + orderService.updateById(order); + return success("绑定成功"); + } + return fail("绑定失败"); } @ApiOperation("更换设备") @PostMapping("/change") @Transactional(rollbackFor = {Exception.class}) public ApiResult changeEquipment(@RequestBody Equipment equipment) { - // 验证签名 - isCheckSign(); - String equipmentCode = equipment.getEquipmentCode(); - Integer oid = equipment.getEquipmentId(); - Integer orderId = equipment.getOrderId(); - System.out.println("oid = " + oid); - Integer loginUserId = getLoginUserId(); - // 新电池 - Equipment one = equipmentService.getByEquipmentCode(equipmentCode); - // 旧电池 - Equipment old = equipmentService.getById(oid); - // 订单信息 - Order order = orderService.getById(orderId); - if(one == null){ - return fail("设备不存在"); - } - if(!one.getUserId().equals(0)){ - return fail("该设备已被绑定"); - } + // 验证签名 + isCheckSign(); + String equipmentCode = equipment.getEquipmentCode(); + Integer oid = equipment.getEquipmentId(); + Integer orderId = equipment.getOrderId(); + System.out.println("oid = " + oid); + Integer loginUserId = getLoginUserId(); + // 新电池 + Equipment one = equipmentService.getByEquipmentCode(equipmentCode); + // 旧电池 + Equipment old = equipmentService.getById(oid); + // 订单信息 + Order order = orderService.getById(orderId); + if (one == null) { + return fail("设备不存在"); + } + if (!one.getUserId().equals(0)) { + return fail("该设备已被绑定"); + } - // 绑定新电池 - Equipment saveData = new Equipment(); - saveData.setEquipmentId(one.getEquipmentId()); - saveData.setUserId(loginUserId); - saveData.setOrderId(orderId); - boolean b = equipmentService.updateById(saveData); - // 记录新电池明细 - EquipmentRecord record = new EquipmentRecord(); - record.setEquipmentCode(equipmentCode); - record.setEventType(EVENT_TYPE_BIND); - record.setUserId(loginUserId); - record.setOrderId(orderId); - record.setMerchantCode(one.getMerchantCode()); - equipmentRecordService.save(record); + // 绑定新电池 + Equipment saveData = new Equipment(); + saveData.setEquipmentId(one.getEquipmentId()); + saveData.setUserId(loginUserId); + saveData.setOrderId(orderId); + boolean b = equipmentService.updateById(saveData); + // 记录新电池明细 + EquipmentRecord record = new EquipmentRecord(); + record.setEquipmentCode(equipmentCode); + record.setEventType(EVENT_TYPE_BIND); + record.setUserId(loginUserId); + record.setOrderId(orderId); + record.setMerchantCode(one.getMerchantCode()); + equipmentRecordService.save(record); - if (b) { - // 解绑旧电池 - old.setUserId(0); - old.setMerchantCode(one.getMerchantCode()); - equipmentService.updateById(old); - // 记录明细 - EquipmentRecord record2 = new EquipmentRecord(); - record2.setEquipmentCode(old.getEquipmentCode()); - record2.setUserId(loginUserId); - record2.setOrderId(orderId); - record2.setEventType(EVENT_TYPE_UNBIND); - record2.setMerchantCode(one.getMerchantCode()); - equipmentRecordService.save(record2); - // 更新订单 - order.setEquipmentId(one.getEquipmentId()); - orderService.updateById(order); - return success("换电成功"); - } - return fail("换电失败"); + if (b) { + // 解绑旧电池 + old.setUserId(0); + old.setMerchantCode(one.getMerchantCode()); + equipmentService.updateById(old); + // 记录明细 + EquipmentRecord record2 = new EquipmentRecord(); + record2.setEquipmentCode(old.getEquipmentCode()); + record2.setUserId(loginUserId); + record2.setOrderId(orderId); + record2.setEventType(EVENT_TYPE_UNBIND); + record2.setMerchantCode(one.getMerchantCode()); + equipmentRecordService.save(record2); + // 更新订单 + order.setEquipmentId(one.getEquipmentId()); + orderService.updateById(order); + return success("换电成功"); + } + return fail("换电失败"); } @ApiOperation("重置") @PostMapping("/receipt") - public ApiResult receipt(@RequestBody Order order){ - // 验证签名 - isCheckSign(); - orderService.updateById(order); - return success("重置成功"); + public ApiResult receipt(@RequestBody Order order) { + // 验证签名 + isCheckSign(); + orderService.updateById(order); + return success("重置成功"); } @ApiModelProperty("退租") @PostMapping("/rentingOut") - public ApiResult rentingOut(@RequestBody Order order){ - // 验证签名 - isCheckSign(); - final int count = orderRefundService.count(new LambdaQueryWrapper().eq(OrderRefund::getOrderId, order.getOrderId())); - if(count > 0){ - return fail("申请成功,请等待客服人员审核"); - } - final OrderRefund refund = new OrderRefund(); - refund.setOrderId(order.getOrderId()); - refund.setOrderGoodsId(order.getGoodsId()); - refund.setUserId(getLoginUserId()); - refund.setType(10); - refund.setApplyDesc("申请退租"); - refund.setRefundMoney(new BigDecimal(0)); - refund.setMerchantCode(order.getMerchantCode()); - if (orderRefundService.save(refund)) { + public ApiResult rentingOut(@RequestBody Order order) { + + // 验证签名 + isCheckSign(); + OrderRefund refund = orderRefundService.getOne(new LambdaQueryWrapper() + .eq(OrderRefund::getOrderId, order.getOrderId())); + + if (refund != null) { + if (refund.getAuditStatus() != 30) { + return fail("申请成功,请等待客服人员审核"); + } + }else { + refund = new OrderRefund(); + refund.setOrderId(order.getOrderId()); + refund.setOrderGoodsId(order.getGoodsId()); + refund.setUserId(getLoginUserId()); + refund.setType(10); + refund.setApplyDesc("申请退租"); + refund.setRefundMoney(new BigDecimal(0)); + refund.setMerchantCode(order.getMerchantCode()); + } + refund.setAuditStatus(10); + orderRefundService.saveOrUpdate(refund); + // 更新订单状态 + Order updateOrder = new Order(); + updateOrder.setReceiptStatus(RECEIPT_STATUS_APPLY); + updateOrder.setOrderId(order.getOrderId()); + orderService.updateById(updateOrder); return success("申请成功,请等待客服人员审核"); - } - return fail("退租失败"); } // @ApiModelProperty("退租") diff --git a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java index 985e7ba..6510ea0 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/OrderController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/OrderController.java @@ -5,7 +5,10 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.gxwebsoft.apps.entity.BcAgent; +import com.gxwebsoft.apps.entity.Equipment; import com.gxwebsoft.apps.entity.EquipmentGoods; import com.gxwebsoft.apps.entity.EquipmentOrderGoods; import com.gxwebsoft.apps.param.BcAgentParam; @@ -18,6 +21,7 @@ import com.gxwebsoft.common.core.web.*; import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.common.system.service.UserService; import com.gxwebsoft.shop.entity.Order; +import com.gxwebsoft.shop.entity.OrderGoods; import com.gxwebsoft.shop.entity.UserReferee; import com.gxwebsoft.shop.param.OrderGoodsParam; import com.gxwebsoft.shop.param.OrderParam; @@ -34,7 +38,9 @@ import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; +import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -75,37 +81,53 @@ public class OrderController extends BaseController { public ApiResult> page(OrderParam param) { // 搜索条件 if (getMerchantCode() != null) { - param.setMerchantCode(getMerchantCode()); + param.setMerchantCode(getMerchantCode()); } // 云芯威项目查询关联设备 - if(getTenantId().equals(6)){ - // 查询订单的关联商品 - List list = orderService.listRel(param); - // 查询订单的设备 - for (Order order : list) { - final OrderGoodsParam orderGoodsParam = new OrderGoodsParam(); - orderGoodsParam.setOrderId(order.getOrderId()); - order.setGoodsList(orderGoodsService.listRel(orderGoodsParam)); - order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper().eq(EquipmentOrderGoods::getOrderId,order.getOrderId()))); - order.setEquipment(equipmentService.getById(order.getEquipmentId())); - } - PageParam page = new PageParam<>(param); - return success(new PageResult<>(list, page.getTotal())); + if (getTenantId().equals(6)) { + // 查询订单的关联商品 + List list = orderService.listRel(param); + Set equipmentIds = new HashSet<>(); + Set orderIds = new HashSet<>(); + for (Order order : list) { + equipmentIds.add(order.getEquipmentId()); + orderIds.add(order.getOrderId()); + } + List equipmentList = equipmentService.list(Wrappers.lambdaQuery(Equipment.class).in(Equipment::getEquipmentId, equipmentIds)); + List equipmentOrderGoodsList = equipmentOrderGoodsService.list(Wrappers.lambdaQuery(EquipmentOrderGoods.class).in(EquipmentOrderGoods::getOrderId, orderIds)); + Map> equipmentCollect = equipmentList.stream().collect(Collectors.groupingBy(Equipment::getEquipmentId)); + Map> equipmentOrderGoodsCollect = equipmentOrderGoodsList.stream().collect(Collectors.groupingBy(EquipmentOrderGoods::getOrderId)); + + // 查询订单的设备 + for (Order order : list) { + final OrderGoodsParam orderGoodsParam = new OrderGoodsParam(); + orderGoodsParam.setOrderId(order.getOrderId()); + List equipmentOrderGoods = equipmentOrderGoodsCollect.get(order.getOrderId()); + if(CollectionUtils.isNotEmpty(equipmentOrderGoods)){ + order.setEquipmentGoods(equipmentOrderGoods.get(0)); + } + List equipment = equipmentCollect.get(order.getEquipmentId()); + if(CollectionUtils.isNotEmpty(equipment)){ + order.setEquipment(equipment.get(0)); + } + } + PageParam page = new PageParam<>(param); + return success(new PageResult<>(list, page.getTotal())); } // 贵港自然资源报餐 - if(getTenantId().equals(10048) && getAppId() != null){ - param.setUserId(getLoginUserId()); - final Boolean agent = param.getAgent(); - if (agent != null) { - final BcAgentParam bcAgentParam = new BcAgentParam(); - bcAgentParam.setParentId(getLoginUserId()); - bcAgentParam.setLimit(100L); - final PageResult result = bcAgentService.pageRel(bcAgentParam); - final Set collect = result.getList().stream().map(BcAgent::getUserId).collect(Collectors.toSet()); - param.setUserId(null); - param.setUserIds(collect); - } - return success(orderService.pageRel(param)); + if (getTenantId().equals(10048) && getAppId() != null) { + param.setUserId(getLoginUserId()); + final Boolean agent = param.getAgent(); + if (agent != null) { + final BcAgentParam bcAgentParam = new BcAgentParam(); + bcAgentParam.setParentId(getLoginUserId()); + bcAgentParam.setLimit(100L); + final PageResult result = bcAgentService.pageRel(bcAgentParam); + final Set collect = result.getList().stream().map(BcAgent::getUserId).collect(Collectors.toSet()); + param.setUserId(null); + param.setUserIds(collect); + } + return success(orderService.pageRel(param)); } // 使用关联查询 @@ -118,7 +140,7 @@ public class OrderController extends BaseController { @GetMapping() public ApiResult> list(OrderParam param) { // 使用关联查询 - return success(orderService.listRel(param)); + return success(orderService.listRel(param)); } @PreAuthorize("hasAuthority('shop:order:list')") @@ -126,11 +148,11 @@ public class OrderController extends BaseController { @ApiOperation("按订单集查询") @PostMapping("/listByIds") public ApiResult> listByIds(@RequestBody List orderIds) { - System.out.println("按订单集查询 = " + orderIds); - if(orderIds.size() > 0){ - return success(orderService.listByIds(orderIds)); - } - return fail("订单不存在",null); + System.out.println("按订单集查询 = " + orderIds); + if (orderIds.size() > 0) { + return success(orderService.listByIds(orderIds)); + } + return fail("订单不存在", null); // @@ -164,19 +186,19 @@ public class OrderController extends BaseController { @ApiOperation("临时报餐订单") @PostMapping("/getByTemporary") public ApiResult> getByTemporary(@RequestBody OrderParam order) { - final List list = orderService.listRel(order); + final List list = orderService.listRel(order); - // 是否查询订单商品 - if(order.getShowGoodsList()){ - list.forEach(d->{ - final OrderGoodsParam ogp = new OrderGoodsParam(); - ogp.setOrderId(d.getOrderId()); - ogp.setTemporary(1); - d.setGoodsList(orderGoodsService.listRel(ogp)); - }); - } - // 返回待支付订单 - return success(list); + // 是否查询订单商品 + if (order.getShowGoodsList()) { + list.forEach(d -> { + final OrderGoodsParam ogp = new OrderGoodsParam(); + ogp.setOrderId(d.getOrderId()); + ogp.setTemporary(1); + d.setGoodsList(orderGoodsService.listRel(ogp)); + }); + } + // 返回待支付订单 + return success(list); } @PreAuthorize("hasAuthority('shop:order:list')") @@ -184,14 +206,14 @@ public class OrderController extends BaseController { @ApiOperation("根据id查询订单记录表") @GetMapping("/{id}") public ApiResult get(@PathVariable("id") Integer id) { - // 使用关联查询 - Order order = orderService.getByIdRel(id); - // 云芯威关联设备查询 - if (!order.getGoodsId().equals(0) || !order.getEquipmentId().equals(0)) { - order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper().eq(EquipmentOrderGoods::getOrderId,order.getOrderId()))); - order.setEquipment(equipmentService.getById(order.getEquipmentId())); - } - return success(order); + // 使用关联查询 + Order order = orderService.getByIdRel(id); + // 云芯威关联设备查询 + if (!order.getGoodsId().equals(0) || !order.getEquipmentId().equals(0)) { + order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper().eq(EquipmentOrderGoods::getOrderId, order.getOrderId()))); + order.setEquipment(equipmentService.getById(order.getEquipmentId())); + } + return success(order); } @PreAuthorize("hasAuthority('shop:order:save')") @@ -202,58 +224,58 @@ public class OrderController extends BaseController { // 记录当前登录用户id、租户id User loginUser = getLoginUser(); if (loginUser != null) { - order.setUserId(loginUser.getUserId()); + order.setUserId(loginUser.getUserId()); } if (orderService.save(order)) { - // 云芯威BMS - if (order.getTenantId().equals(6)) { - final EquipmentGoods eg = equipmentGoodsService.getById(order.getOrderSourceId()); - eg.setOrderId(order.getOrderId()); - // 添加订单商品 - final EquipmentOrderGoods oeg = new EquipmentOrderGoods(); - oeg.setOrderId(order.getOrderId()); - oeg.setGoodsName(eg.getGoodsName()); - oeg.setEquipmentCategory(eg.getEquipmentCategory()); - oeg.setImage(eg.getImage()); - oeg.setCategoryId(eg.getCategoryId()); - oeg.setBatteryModel(eg.getBatteryModel()); - oeg.setSellingPoint(eg.getSellingPoint()); - oeg.setStockTotal(eg.getStockTotal()); - oeg.setContent(eg.getContent()); - oeg.setBatteryPrice(eg.getBatteryPrice()); - oeg.setBatteryRent(eg.getBatteryRent()); - oeg.setBatteryInsurance(eg.getBatteryInsurance()); - oeg.setBatteryDeposit(eg.getBatteryDeposit()); - oeg.setDownPayment(eg.getDownPayment()); - oeg.setPeriods(eg.getPeriods()); - oeg.setRepayment(eg.getRepayment()); - oeg.setServiceCharges(eg.getServiceCharges()); - oeg.setPeriodsType(eg.getPeriodsType()); - oeg.setUserId(eg.getUserId()); - oeg.setComments(eg.getComments()); - oeg.setStatus(eg.getStatus()); - oeg.setMerchantCode(eg.getMerchantCode()); - oeg.setTenantId(eg.getTenantId()); + // 云芯威BMS + if (order.getTenantId().equals(6)) { + final EquipmentGoods eg = equipmentGoodsService.getById(order.getOrderSourceId()); + eg.setOrderId(order.getOrderId()); + // 添加订单商品 + final EquipmentOrderGoods oeg = new EquipmentOrderGoods(); + oeg.setOrderId(order.getOrderId()); + oeg.setGoodsName(eg.getGoodsName()); + oeg.setEquipmentCategory(eg.getEquipmentCategory()); + oeg.setImage(eg.getImage()); + oeg.setCategoryId(eg.getCategoryId()); + oeg.setBatteryModel(eg.getBatteryModel()); + oeg.setSellingPoint(eg.getSellingPoint()); + oeg.setStockTotal(eg.getStockTotal()); + oeg.setContent(eg.getContent()); + oeg.setBatteryPrice(eg.getBatteryPrice()); + oeg.setBatteryRent(eg.getBatteryRent()); + oeg.setBatteryInsurance(eg.getBatteryInsurance()); + oeg.setBatteryDeposit(eg.getBatteryDeposit()); + oeg.setDownPayment(eg.getDownPayment()); + oeg.setPeriods(eg.getPeriods()); + oeg.setRepayment(eg.getRepayment()); + oeg.setServiceCharges(eg.getServiceCharges()); + oeg.setPeriodsType(eg.getPeriodsType()); + oeg.setUserId(eg.getUserId()); + oeg.setComments(eg.getComments()); + oeg.setStatus(eg.getStatus()); + oeg.setMerchantCode(eg.getMerchantCode()); + oeg.setTenantId(eg.getTenantId()); - equipmentOrderGoodsService.saveOrUpdate(oeg); + equipmentOrderGoodsService.saveOrUpdate(oeg); - // 添加推荐人关系 - if (order.getDealerId() != null) { - final User dealer = userService.getById(order.getDealerId()); - if(dealer == null){ - return fail("推荐人的用户ID不存在"); - } - final UserReferee referee = new UserReferee(); - referee.setDealerId(order.getDealerId()); - referee.setUserId(getLoginUserId()); - userRefereeService.save(referee); + // 添加推荐人关系 + if (order.getDealerId() != null) { + final User dealer = userService.getById(order.getDealerId()); + if (dealer == null) { + return fail("推荐人的用户ID不存在"); + } + final UserReferee referee = new UserReferee(); + referee.setDealerId(order.getDealerId()); + referee.setUserId(getLoginUserId()); + userRefereeService.save(referee); + } } - } - // 是否存入星期值(10048) - if(order.getDeliveryTime() != null){ - order.setWeek(DateUtil.dayOfWeek(order.getDeliveryTime()) - 1); - } - return success("添加成功",order); + // 是否存入星期值(10048) + if (order.getDeliveryTime() != null) { + order.setWeek(DateUtil.dayOfWeek(order.getDeliveryTime()) - 1); + } + return success("添加成功", order); } return fail("添加失败"); } @@ -315,11 +337,11 @@ public class OrderController extends BaseController { @ApiOperation("支付成功") @PostMapping("/setPayStatus") - public ApiResult setPayStatus(@RequestBody Order order){ - if (orderService.updateById(order)) { - return success("设置成功"); - } - return fail("设置失败"); + public ApiResult setPayStatus(@RequestBody Order order) { + if (orderService.updateById(order)) { + return success("设置成功"); + } + return fail("设置失败"); } @PreAuthorize("hasAuthority('shop:order:list')") @@ -327,34 +349,34 @@ public class OrderController extends BaseController { @ApiOperation("生成核销付款码(二维码)") @GetMapping("/generateQrCode") public ApiResult generateQrCode(OrderParam param) throws IOException { - // 查询当天的报餐信息 - param.setUserId(getLoginUserId()); - param.setDeliveryTime(DateUtil.beginOfDay(DateUtil.date()).toString()); - param.setOrderStatus(ORDER_STATUS_DOING); - param.setPayStatus(PAY_STATUS_SUCCESS); - param.setDeleted(0); - final List list = orderService.listRel(param); - if(list.size() == 0){ - return fail("今日无报餐记录"); - } - final Order order = list.get(0); - // LOGO URL地址 - String logoUrl = "https://file.wsdns.cn/20230430/6fa31aca3b0d47af98a149cf2dd26a4f.jpeg"; - // 二维码生成图片保存路径 - String filePath = "/www/wwwroot/file.ws/file/qrcode/" + getLoginUserId() + "/payQrCode.jpg"; - // 二维码访问路径 - String qrcodeUrl = "https://file.gxwebsoft.com/qrcode/" + getLoginUserId() + "/payQrCode.jpg" + "?v=" + DateUtil.current(); - // 二维码内容 - final String orderNo = order.getOrderNo().toString(); - // 将URL转为BufferedImage - BufferedImage bufferedImage = ImageIO.read(new URL(logoUrl)); - // 生成二维码 - QrConfig config = new QrConfig(300, 300); - // 设置边距,既二维码和背景之间的边距 - config.setMargin(1); - // 附带小logo - config.setImg(bufferedImage); - QrCodeUtil.generate(orderNo, config, FileUtil.file(filePath)); - return success("请求成功",qrcodeUrl); + // 查询当天的报餐信息 + param.setUserId(getLoginUserId()); + param.setDeliveryTime(DateUtil.beginOfDay(DateUtil.date()).toString()); + param.setOrderStatus(ORDER_STATUS_DOING); + param.setPayStatus(PAY_STATUS_SUCCESS); + param.setDeleted(0); + final List list = orderService.listRel(param); + if (list.size() == 0) { + return fail("今日无报餐记录"); + } + final Order order = list.get(0); + // LOGO URL地址 + String logoUrl = "https://file.wsdns.cn/20230430/6fa31aca3b0d47af98a149cf2dd26a4f.jpeg"; + // 二维码生成图片保存路径 + String filePath = "/www/wwwroot/file.ws/file/qrcode/" + getLoginUserId() + "/payQrCode.jpg"; + // 二维码访问路径 + String qrcodeUrl = "https://file.gxwebsoft.com/qrcode/" + getLoginUserId() + "/payQrCode.jpg" + "?v=" + DateUtil.current(); + // 二维码内容 + final String orderNo = order.getOrderNo().toString(); + // 将URL转为BufferedImage + BufferedImage bufferedImage = ImageIO.read(new URL(logoUrl)); + // 生成二维码 + QrConfig config = new QrConfig(300, 300); + // 设置边距,既二维码和背景之间的边距 + config.setMargin(1); + // 附带小logo + config.setImg(bufferedImage); + QrCodeUtil.generate(orderNo, config, FileUtil.file(filePath)); + return success("请求成功", qrcodeUrl); } } diff --git a/src/main/java/com/gxwebsoft/shop/entity/Order.java b/src/main/java/com/gxwebsoft/shop/entity/Order.java index 77e2914..0c63b8e 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/Order.java +++ b/src/main/java/com/gxwebsoft/shop/entity/Order.java @@ -174,6 +174,9 @@ public class Order implements Serializable { @ApiModelProperty(value = "是否临时报餐") private Integer isTemporary; + @ApiModelProperty(value = "推荐人手机号") + private String dealerPhone; + @ApiModelProperty(value = "用户ID") private Integer userId; diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 822ad4e..10475db 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -5,10 +5,10 @@ spring: datasource: url: jdbc:mysql://47.119.165.234:3308/open_ws?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: open_ws - password: A6k4GHifNWWhjcde +# password: A6k4GHifNWWhjcde # url: jdbc:mysql://47.119.165.234:3308/open_ws?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 # username: open_ws -# password: DzAmFiZfPJ6ZGApm + password: DzAmFiZfPJ6ZGApm driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource