diff --git a/hiver-admin/src/main/resources/application.yml b/hiver-admin/src/main/resources/application.yml index d2e60c6a..639fa094 100644 --- a/hiver-admin/src/main/resources/application.yml +++ b/hiver-admin/src/main/resources/application.yml @@ -287,6 +287,7 @@ ignored: # 临时增加 - /hiver/app/** - /hiver/thorui/** + - /hiver/order/** # 限流及黑名单不拦截的路径 limitUrls: - /**/*.js @@ -351,4 +352,7 @@ logging: # 最大保存天数 max-history: 7 # 每个文件最大大小 - max-file-size: 5MB \ No newline at end of file + max-file-size: 5MB +jpush: + appKey: 130f556e8473c9b558777fe3 + masterSecret: 2b4e5196dfc40a78db36480d \ No newline at end of file diff --git a/hiver-core/pom.xml b/hiver-core/pom.xml index f3039e4e..6939a04e 100644 --- a/hiver-core/pom.xml +++ b/hiver-core/pom.xml @@ -138,5 +138,15 @@ org.seleniumhq.selenium selenium-java + + cn.jpush.api + jpush-client + 3.2.17 + + + cn.jpush.api + jiguang-common + 1.1.12 + \ No newline at end of file diff --git a/hiver-core/src/main/java/cc/hiver/core/config/jpush/JPushConfig.java b/hiver-core/src/main/java/cc/hiver/core/config/jpush/JPushConfig.java new file mode 100644 index 00000000..65f1dc8f --- /dev/null +++ b/hiver-core/src/main/java/cc/hiver/core/config/jpush/JPushConfig.java @@ -0,0 +1,24 @@ +package cc.hiver.core.config.jpush; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import cn.jiguang.common.ClientConfig; +import cn.jpush.api.JPushClient; + +@Configuration +public class JPushConfig { + + @Value("${jpush.appKey}") + private String appKey; + + @Value("${jpush.masterSecret}") + private String masterSecret; + + @Bean + public JPushClient jPushClient() { + ClientConfig clientConfig = ClientConfig.getInstance(); + return new JPushClient(masterSecret, appKey, null, clientConfig); + } +} diff --git a/hiver-core/src/main/java/cc/hiver/core/service/JPushService.java b/hiver-core/src/main/java/cc/hiver/core/service/JPushService.java new file mode 100644 index 00000000..c113b9a6 --- /dev/null +++ b/hiver-core/src/main/java/cc/hiver/core/service/JPushService.java @@ -0,0 +1,36 @@ +package cc.hiver.core.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import cn.jpush.api.JPushClient; +import cn.jpush.api.push.PushResult; +import cn.jpush.api.push.model.Message; +import cn.jpush.api.push.model.PushPayload; +import cn.jpush.api.push.model.notification.Notification; + +@Service +public class JPushService { + + private final JPushClient jPushClient; + + @Autowired + public JPushService(JPushClient jPushClient) { + this.jPushClient = jPushClient; + } + + public void sendPushNotification(String registrationId, String message) { + PushPayload payload = PushPayload.newBuilder() + .setPlatform(cn.jpush.api.push.model.Platform.all()) + .setAudience(cn.jpush.api.push.model.audience.Audience.registrationId(registrationId)) + .setNotification(Notification.alert(message)) + .build(); + + try { + PushResult result = jPushClient.sendPush(payload); + System.out.println("Push result: " + result); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PushController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PushController.java new file mode 100644 index 00000000..5364f7f6 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PushController.java @@ -0,0 +1,24 @@ +package cc.hiver.mall.controller; + +import cc.hiver.core.service.JPushService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class PushController { + + private final JPushService jPushService; + + @Autowired + public PushController(JPushService jPushService) { + this.jPushService = jPushService; + } + + @GetMapping("/push") + public String pushNotification(@RequestParam String registrationId, @RequestParam String message) { + jPushService.sendPushNotification(registrationId, message); + return "Push request sent!"; + } +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java new file mode 100644 index 00000000..963c83b5 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java @@ -0,0 +1,136 @@ +package cc.hiver.mall.controller; + +import cc.hiver.core.common.utils.ResultUtil; +import cc.hiver.core.common.utils.SecurityUtil; +import cc.hiver.core.common.utils.StringUtils; +import cc.hiver.core.common.vo.Result; +import cc.hiver.mall.entity.*; + + +import cc.hiver.mall.pojo.dto.SaleDTO; +import cc.hiver.mall.pojo.vo.SaleQueryVO; +import cc.hiver.mall.pojo.vo.SaleVO; +import cc.hiver.mall.service.*; +import cc.hiver.mall.service.mybatis.SaleDetailService; +import cc.hiver.mall.service.mybatis.SaleService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Slf4j +@RestController +@Api(tags = "销售订单接口") +@RequestMapping(value = "/hiver/app/sale/") +@Transactional +public class SaleController { + @Autowired + private SalesAndDetailsService salesAndDetailsService; + + @Autowired + private StockAndLogService stockAndLogService; + + @Autowired + private RushOrderService rushOrderService; + + @Autowired + private SendMessageService sendMessageService; + + @Autowired + private SaleService saleService; + + @Autowired + private SaleDetailService saleDetailService; + + @Autowired + private SecurityUtil securityUtil; + + + @RequestMapping(value = "/buy", method = RequestMethod.POST) + @ApiOperation(value = "下单操作") + @Transactional + public Result buy(@RequestBody SaleDTO saleDTO) { + + /** + * 订单中是物流且包含扛包工人员的话,直接进入抢单表 + * */ + //1.处理订单表模块 + Sale sale = salesAndDetailsService.handleSalesAndDetails(saleDTO); + //更新sale + saleDTO.setSale(sale); + //2.处理库存模块 + stockAndLogService.handleSubStockAndLog(saleDTO.getSaleDetailList()); + //3.处理抢单模块 + rushOrderService.handleRushOrder(saleDTO); + //4.消息推送模块 + sendMessageService.handleSendAppMessage(); + + return ResultUtil.success("下单成功"); + + } + + @RequestMapping(value = "/edit", method = RequestMethod.POST) + @ApiOperation(value = "根据id修改货品属性") + public Result edit(SaleQueryVO saleQueryVO) { + Sale sale = saleQueryVO.getSale(); + List saleDetailList = saleQueryVO.getSaleDetailList(); + boolean result = saleService.updateById(sale); + if(result) { + QueryWrapper deleteWrapper = new QueryWrapper<>(); + deleteWrapper.eq("sale_id",sale.getId()); + boolean removeBatchByIds = saleDetailService.remove(deleteWrapper); + if (removeBatchByIds){ + return saleDetailService.saveBatch(saleDetailList)?ResultUtil.success("修改成功"):ResultUtil.error("修改失败"); + } + } + return ResultUtil.error("修改失败"); + } + + @RequestMapping(value = "/delById", method = RequestMethod.POST) + @ApiOperation(value = "根据id删除订单") + public Result delete(Sale sale) { + boolean result = saleService.removeById(sale); + if(result) { + QueryWrapper deleteWrapper = new QueryWrapper<>(); + deleteWrapper.eq("sale_id",sale.getId()); + boolean removeBatchByIds = saleDetailService.remove(deleteWrapper); + if (removeBatchByIds){ + return ResultUtil.success("删除成功"); + } + } + return ResultUtil.error("删除失败"); + } + + @RequestMapping(value = "/list", method = RequestMethod.POST) + @ApiOperation(value = "根据条件获得分页") + public Result> queryAll(SaleVO saleVO) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (!ObjectUtils.isEmpty(saleVO)){ + if (ObjectUtils.isEmpty(saleVO.getPayStatus())) queryWrapper.eq("pay_status",saleVO.getPayStatus()); + if (StringUtils.isEmpty(saleVO.getStatus())) queryWrapper.eq("status",saleVO.getStatus()); + if (StringUtils.isEmpty(saleVO.getTransportType())) queryWrapper.eq("transport_type",saleVO.getTransportType()); + } + List saleList = saleService.list(queryWrapper); + return new ResultUtil>().setData(saleList); + } + + @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) + @ApiOperation(value = "获得订单详情") + public Result get(@PathVariable String id) { + SaleQueryVO saleQueryVO = new SaleQueryVO(); + Sale sale = saleService.getById(id); + saleQueryVO.setSale(sale); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sale_id",id); + List saleDetailList = saleDetailService.list(queryWrapper); + saleQueryVO.setSaleDetailList(saleDetailList); + return new ResultUtil().setData(saleQueryVO); + } + +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Sale.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Sale.java index 0b72aeed..e1e86046 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Sale.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Sale.java @@ -12,7 +12,7 @@ import java.util.Date; @ApiModel(value = "销售单主表") @TableName(value = "t_sale", autoResultMap = true) public class Sale implements Serializable { - private String id = SnowFlakeUtil.nextId().toString(); + private String id = "XD" + SnowFlakeUtil.nextId().toString(); private String createBy; @@ -48,13 +48,13 @@ public class Sale implements Serializable { @ApiModelProperty(value = "未收") private BigDecimal noEarn; - @ApiModelProperty(value = "收款状态 0-未收款 1-已收款") + @ApiModelProperty(value = "收款状态 0-未收款 1-已收款 2-部分收款") private String payStatus; - @ApiModelProperty(value = "订单状态 0-拣货中 1-已提交抢单 2-已取货 3-已送达") + @ApiModelProperty(value = "订单状态 1-拣货中 2-已预定 3-已作废 4-已取货 5-已送达") private String status; - @ApiModelProperty(value = "物流类别 0-物流 1-快递 2-自提 3-拼单") + @ApiModelProperty(value = "物流类别 1-物流 2-自提 3-快递 4-拼单") private String transportType; @ApiModelProperty(value = "拼单店铺地址 为拼单类别时手动输入") diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/dto/SaleDTO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/dto/SaleDTO.java new file mode 100644 index 00000000..d1374354 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/dto/SaleDTO.java @@ -0,0 +1,29 @@ +package cc.hiver.mall.pojo.dto; + +import cc.hiver.mall.entity.Sale; +import cc.hiver.mall.entity.SaleDetail; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@ApiModel(value = "销售单主表") +@Data +public class SaleDTO implements Serializable { + + @ApiModelProperty(value = "订单") + private Sale sale; + + @ApiModelProperty(value = "订单明细") + private List saleDetailList; + + + @ApiModelProperty(value = "扛包工编号") + private String orderByWorker; + + @ApiModelProperty(value = "物流公司编号") + private String transCompany; + +} \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MessageVO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MessageVO.java new file mode 100644 index 00000000..bc2b6e68 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/MessageVO.java @@ -0,0 +1,15 @@ +package cc.hiver.mall.pojo.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; + +@ApiModel(value = "消息推送实体") +public class MessageVO implements Serializable { + @ApiModelProperty(value = "客户端标识") + private String registrationId; + + @ApiModelProperty(value = "消息内容") + private String message; +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/SaleQueryVO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/SaleQueryVO.java new file mode 100644 index 00000000..33750c3e --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/SaleQueryVO.java @@ -0,0 +1,22 @@ +package cc.hiver.mall.pojo.vo; + +import cc.hiver.mall.entity.Sale; +import cc.hiver.mall.entity.SaleDetail; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@ApiModel(value = "销售单主表") +@Data +public class SaleQueryVO implements Serializable { + + @ApiModelProperty(value = "订单") + private Sale sale; + + @ApiModelProperty(value = "订单明细") + private List saleDetailList; + +} \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/SaleVO.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/SaleVO.java new file mode 100644 index 00000000..4fe6f5d1 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/SaleVO.java @@ -0,0 +1,28 @@ +package cc.hiver.mall.pojo.vo; + +import cc.hiver.mall.entity.SaleDetail; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; +@Data +@ApiModel(value = "销售单主表") +public class SaleVO implements Serializable { + + @ApiModelProperty(value = "收款状态 0-未收款 1-已收款 2-部分收款") + private String payStatus; + + @ApiModelProperty(value = "订单状态 1-未预定 2-已预定 3-待自提 4-已取货 5-已送达") + private String status; + + @ApiModelProperty(value = "物流类别 1-物流 2-快递 3-自提 4-拼单") + private String transportType; + + + + +} \ No newline at end of file diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/RushOrderService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/RushOrderService.java new file mode 100644 index 00000000..4f5c8605 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/RushOrderService.java @@ -0,0 +1,9 @@ +package cc.hiver.mall.service; + +import cc.hiver.mall.pojo.dto.SaleDTO; + +public interface RushOrderService { + + void handleRushOrder(SaleDTO saleDTO); + +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SalesAndDetailsService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SalesAndDetailsService.java new file mode 100644 index 00000000..91c97381 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SalesAndDetailsService.java @@ -0,0 +1,13 @@ +package cc.hiver.mall.service; + +import cc.hiver.mall.entity.Sale; +import cc.hiver.mall.pojo.dto.SaleDTO; +import cc.hiver.mall.pojo.vo.SaleVO; + +public interface SalesAndDetailsService { + + public Sale handleSalesAndDetails(SaleDTO saleDTO); + + public Sale handleBackSalesAndDetails(SaleDTO saleDTO); + +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SendMessageService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SendMessageService.java new file mode 100644 index 00000000..0d6f66e2 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SendMessageService.java @@ -0,0 +1,9 @@ +package cc.hiver.mall.service; + +public interface SendMessageService { + + void handleSendAppMessage(); + + void handleSendWXMessage(); + +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/StockAndLogService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/StockAndLogService.java new file mode 100644 index 00000000..fb77d744 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/StockAndLogService.java @@ -0,0 +1,15 @@ +package cc.hiver.mall.service; + +import cc.hiver.mall.entity.SaleDetail; + +import java.util.List; + +public interface StockAndLogService { + + //出 + void handleSubStockAndLog(List saleDetailList); + + //入 + void handleIncStockAndLog(List saleDetailList); + +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleDetailService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleDetailService.java new file mode 100644 index 00000000..e90c8d4e --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleDetailService.java @@ -0,0 +1,10 @@ +package cc.hiver.mall.service.mybatis; + +import cc.hiver.mall.entity.SaleDetail; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface SaleDetailService extends IService { + + + +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/RushOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/RushOrderServiceImpl.java new file mode 100644 index 00000000..5394a03c --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/RushOrderServiceImpl.java @@ -0,0 +1,41 @@ +package cc.hiver.mall.serviceimpl; + +import cc.hiver.mall.entity.OrderXd; +import cc.hiver.mall.entity.Sale; +import cc.hiver.mall.pojo.dto.SaleDTO; +import cc.hiver.mall.service.OrderService; +import cc.hiver.mall.service.RushOrderService; +import cn.hutool.core.util.StrUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class RushOrderServiceImpl implements RushOrderService { + + @Autowired + OrderService orderService; + + @Override + public void handleRushOrder(SaleDTO saleDTO) { + /** + * 根据销售单推入至抢单表 + * */ + Sale sale = saleDTO.getSale(); + OrderXd orderXd = new OrderXd(); + orderXd.setOrderId(sale.getId()); + orderXd.setOrderLogistics(sale.getTransportType()); + orderXd.setOrderAddress(sale.getProvince()+","+sale.getCity()+","+sale.getArea()); + if("4".equals(sale.getTransportType())) + orderXd.setOrderStreet(sale.getShareAddress()); + else + orderXd.setOrderStreet(sale.getReceiveAddress()); + orderXd.setOrderStatus(Integer.valueOf(sale.getStatus())); + orderXd.setOrderByWorker(StrUtil.isNotEmpty(saleDTO.getOrderByWorker())? saleDTO.getOrderByWorker() : null); + orderXd.setTransCompany(saleDTO.getTransCompany()); + orderXd.setOrderByWorkertime(sale.getCreateTime()); + orderXd.setTimeout(2); + + orderService.save(orderXd); + + } +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java new file mode 100644 index 00000000..50f23298 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java @@ -0,0 +1,103 @@ +package cc.hiver.mall.serviceimpl; + +import cc.hiver.mall.entity.Sale; +import cc.hiver.mall.entity.SaleDetail; +import cc.hiver.mall.pojo.dto.SaleDTO; +import cc.hiver.mall.service.SalesAndDetailsService; +import cc.hiver.mall.service.mybatis.SaleDetailService; +import cc.hiver.mall.service.mybatis.SaleService; +import cn.hutool.core.util.StrUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.List; + +@Service +public class SalesAndDetailsServiceImpl implements SalesAndDetailsService { + + + @Autowired + SaleService saleService; + + @Autowired + SaleDetailService saleDetailService; + + @Override + public Sale handleSalesAndDetails(SaleDTO saleDTO) { + + /** + * 1.处理Sale总订单 + * 处理订单状态/收款状态 + * */ + Sale sale = saleDTO.getSale(); + + BigDecimal realAmount = sale.getRealAmount(); + BigDecimal alreadyEarn = sale.getAlreadyEarn(); + if(realAmount.subtract(alreadyEarn).compareTo(BigDecimal.ZERO)>0 && alreadyEarn.compareTo(BigDecimal.ZERO)>0){ + sale.setPayStatus("2"); + } else if (realAmount.subtract(alreadyEarn).compareTo(BigDecimal.ZERO)==0){ + sale.setPayStatus("1"); + } else { + sale.setPayStatus("0"); + } + + if (StrUtil.isNotBlank(saleDTO.getOrderByWorker())) { + sale.setStatus("2"); + } else { + sale.setStatus("1"); + } + saleService.save(sale); + + String saleId = sale.getId(); + /** + * 2.处理SaleDetail明细单 + * */ + + List saleDetailList = saleDTO.getSaleDetailList(); + for(SaleDetail saleDetail : saleDetailList) + saleDetail.setSaleId(saleId); + saleDetailService.saveBatch(saleDetailList); + + return sale; + } + + @Override + public Sale handleBackSalesAndDetails(SaleDTO saleDTO) { + + /** + * 1.处理Sale总订单 + * 处理订单状态/收款状态 + * */ + Sale sale = saleDTO.getSale(); + + BigDecimal realAmount = sale.getRealAmount(); + BigDecimal alreadyEarn = sale.getAlreadyEarn(); + if(realAmount.subtract(alreadyEarn).compareTo(BigDecimal.ZERO)>0 && alreadyEarn.compareTo(BigDecimal.ZERO)>0){ + sale.setPayStatus("2"); + } else if (realAmount.subtract(alreadyEarn).compareTo(BigDecimal.ZERO)==0){ + sale.setPayStatus("1"); + } else { + sale.setPayStatus("0"); + } + + if (StrUtil.isNotBlank(saleDTO.getOrderByWorker())) { + sale.setStatus("2"); + } else { + sale.setStatus("1"); + } + saleService.save(sale); + + String saleId = sale.getId(); + /** + * 2.处理SaleDetail明细单 + * */ + + List saleDetailList = saleDTO.getSaleDetailList(); + for(SaleDetail saleDetail : saleDetailList) + saleDetail.setSaleId(saleId); + saleDetailService.saveBatch(saleDetailList); + + return sale; + } +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SendMessageServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SendMessageServiceImpl.java new file mode 100644 index 00000000..1140c364 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SendMessageServiceImpl.java @@ -0,0 +1,25 @@ +package cc.hiver.mall.serviceimpl; + +import cc.hiver.core.service.JPushService; +import cc.hiver.mall.service.SendMessageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class SendMessageServiceImpl implements SendMessageService { + + @Autowired + JPushService jPushService; + + @Override + public void handleSendAppMessage() { + String registrationId = ""; + String message = "宝贝儿,来订单了"; + jPushService.sendPushNotification(registrationId, message); + } + + @Override + public void handleSendWXMessage() { + + } +} diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/StockAndLogServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/StockAndLogServiceImpl.java new file mode 100644 index 00000000..d625f6b2 --- /dev/null +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/StockAndLogServiceImpl.java @@ -0,0 +1,95 @@ +package cc.hiver.mall.serviceimpl; + +import cc.hiver.core.common.utils.BeanUtils; +import cc.hiver.mall.entity.SaleDetail; +import cc.hiver.mall.entity.Stock; +import cc.hiver.mall.entity.StockLog; +import cc.hiver.mall.service.StockAndLogService; +import cc.hiver.mall.service.mybatis.SaleDetailService; +import cc.hiver.mall.service.mybatis.StockLogService; +import cc.hiver.mall.service.mybatis.StockService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class StockAndLogServiceImpl implements StockAndLogService { + + @Autowired + StockService stockService; + + @Autowired + StockLogService stockLogService; + + @Autowired + SaleDetailService saleDetailService; + + @Override + public void handleSubStockAndLog(List saleDetailList) { + + //根据销售单明细进行库存消减 + for(SaleDetail saleDetail : saleDetailList){ + String productId = saleDetail.getProductId(); + String attributeList = saleDetail.getAttributeList(); + QueryWrapper stockQueryWrapper = new QueryWrapper<>(); + stockQueryWrapper.eq("product_id",productId); + stockQueryWrapper.eq("attribute_list",attributeList); + //存在库存则修改库存数量 + Stock origin = stockService.getOne(stockQueryWrapper); + Integer stockCount = origin.getStockCount(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",origin.getId()); + updateWrapper.set("stock_count",stockCount - saleDetail.getProductCount()); + stockService.update(updateWrapper); + + //2.记录库存履历 + StockLog stockLog = new StockLog(); + stockLog.setChangeType("1");//出库 + stockLog.setProductId(saleDetail.getProductId()); + stockLog.setProductSpecs(saleDetail.getAttributeList()); + stockLog.setStock(stockCount);//出库前数量 + stockLog.setChangeStock(saleDetail.getProductCount());//出库数量 + stockLog.setPrice(saleDetail.getPrice()); + stockLog.setPurchasePrice(saleDetail.getPurchasePrice()); + stockLog.setWholesalePrice(saleDetail.getWholesalePrice()); + stockLog.setShopId(saleDetail.getShopId()); + stockLogService.save(stockLog); + } + + } + + @Override + public void handleIncStockAndLog(List saleDetailList) { + //根据销售单明细进行库存消减 + for(SaleDetail saleDetail : saleDetailList){ + String productId = saleDetail.getProductId(); + String attributeList = saleDetail.getAttributeList(); + QueryWrapper stockQueryWrapper = new QueryWrapper<>(); + stockQueryWrapper.eq("product_id",productId); + stockQueryWrapper.eq("attribute_list",attributeList); + //存在库存则修改库存数量 + Stock origin = stockService.getOne(stockQueryWrapper); + Integer stockCount = origin.getStockCount(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",origin.getId()); + updateWrapper.set("stock_count",stockCount + saleDetail.getProductCount()); + stockService.update(updateWrapper); + + //2.记录库存履历 + StockLog stockLog = new StockLog(); + stockLog.setChangeType("0");//退货-入库 + stockLog.setProductId(saleDetail.getProductId()); + stockLog.setProductSpecs(saleDetail.getAttributeList()); + stockLog.setStock(stockCount);//退货-入库前数量 + stockLog.setChangeStock(saleDetail.getProductCount());//退货-入库数量 + stockLog.setPrice(saleDetail.getPrice()); + stockLog.setPurchasePrice(saleDetail.getPurchasePrice()); + stockLog.setWholesalePrice(saleDetail.getWholesalePrice()); + stockLog.setShopId(saleDetail.getShopId()); + stockLogService.save(stockLog); + } + } +}