手工单创建

master
谭国京 4 months ago
parent c1109d8516
commit cb1d53092f
  1. 1
      crmeb-admin/src/main/java/com/zbkj/admin/config/WebSecurityConfig.java
  2. 10
      crmeb-admin/src/main/java/com/zbkj/admin/controller/StoreOrderController.java
  3. 39
      crmeb-common/src/main/java/com/zbkj/common/request/TradeOrderDetailRespDTO.java
  4. 116
      crmeb-common/src/main/java/com/zbkj/common/request/TradeOrderRespDTO.java
  5. 5
      crmeb-service/src/main/java/com/zbkj/service/service/StoreOrderService.java
  6. 84
      crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java

@ -144,6 +144,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/druid/**").anonymous()
.antMatchers("/captcha/get", "/captcha/check").anonymous()
.antMatchers("/api/admin/payment/callback/**").anonymous()
.antMatchers("/api/admin/store/order/add").anonymous()
.antMatchers("/api/public/**").permitAll()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()

@ -302,6 +302,16 @@ public class StoreOrderController {
return CommonResult.failed();
}
@ApiOperation(value = "新增订单")
@RequestMapping(value = "/add", method = RequestMethod.POST)
public CommonResult<String> add(@RequestBody @Validated TradeOrderRespDTO request) {
if (storeOrderService.add(request)) {
return CommonResult.success();
} else {
return CommonResult.failed();
}
}
}

@ -0,0 +1,39 @@
package com.zbkj.common.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* @author wyq
*/
@Data
public class TradeOrderDetailRespDTO {
@ApiModelProperty("skuNo")
@NotNull(message = "skuNo不能为空")
private String skuNo;
private String brandType;
private String priceNote;
@ApiModelProperty("skuName")
@NotNull(message = "skuName不能为空")
private String skuName;
@ApiModelProperty("销售价格")
@NotNull(message = "销售价格不可为空")
private BigDecimal sellPrice;
@ApiModelProperty("销售数量")
@NotBlank(message = "销售数量不能为空")
private Integer sellQty;
@ApiModelProperty("成本")
private BigDecimal cost;
@ApiModelProperty("毛利")
private BigDecimal profit;
@ApiModelProperty("库存")
private Integer inStock;
private BigDecimal profitRate;
}

@ -0,0 +1,116 @@
package com.zbkj.common.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author wyq
*/
@Data
@ApiModel("手工订单详情返回对象")
public class TradeOrderRespDTO {
@ApiModelProperty("渠道 可选值:TO_B,EMPLOYEE_IN_PURCHASE")
private String channelCode;
private String channelName;
@ApiModelProperty("业务归属部门code")
@NotBlank(message = "业务归属部门code不能为空")
private String deptCode;
@ApiModelProperty("业务员")
@NotBlank(message = "业务员不能为空")
private String businessMan;
@ApiModelProperty("平台单号")
private String platformCode;
@ApiModelProperty("下单商户/会员")
@NotBlank(message = "下单商户或购物会员号不能为空")
private String buyVip;
@ApiModelProperty("下单时间")
@NotBlank(message = "下单时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime orderTime;
@ApiModelProperty("预付款时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime perPayTime;
@ApiModelProperty("凭证")
private String proofPath;
@ApiModelProperty("凭证名称")
private String proofName;
@Size(max = 100, message = "买家备注长度不能超过100字")
@ApiModelProperty("买家备注")
private String userRemark;
@Size(max = 100, message = "卖家备注长度不能超过100字")
@ApiModelProperty("卖家备注")
private String salerRemark;
@ApiModelProperty("发货仓库code")
@NotBlank(message = "发货仓库code不能为空")
private String warehouseCode;
@NotNull(message = "订单商品不能为空")
@ApiModelProperty("订单商品")
private List<TradeOrderDetailRespDTO> item;
@NotBlank(message = "收货人名称不能为空")
@ApiModelProperty("收货人")
private String receiverName;
@NotBlank(message = "收货人手机号不能为空")
@ApiModelProperty("收货人手机号")
private String receiverPhone;
@NotBlank(message = "收货人地址不能为空")
@ApiModelProperty("收货人地址")
private String receiverAddress;
@ApiModelProperty("收货人城市")
@NotBlank(message = "收货人城市不能为空")
private String receiverCity;
@ApiModelProperty("收货人区县")
@NotBlank(message = "收货人区县不能为空")
private String receiverDistrict;
@ApiModelProperty("收货人省份")
@NotBlank(message = "收货人省份不能为空")
private String receiverProvince;
@ApiModelProperty("发票抬头")
@NotBlank(message = "发票抬头不能为空")
private String invoiceTitle;
@ApiModelProperty("收票人")
@NotBlank(message = "收票人不能为空")
private String receiver;
@ApiModelProperty("纳税人标识号")
private String ratepayerCode;
@ApiModelProperty("注册地址")
private String registerAddress;
@ApiModelProperty("注册电话")
private String registerPhone;
@ApiModelProperty("开户银行")
private String registerBank;
@ApiModelProperty("银行账号")
private String registerAccount;
@ApiModelProperty("总额")
private BigDecimal totalAmount;
@ApiModelProperty("毛利")
private BigDecimal profit;
@ApiModelProperty("销售中心编码")
private String saleCenterCode;
@ApiModelProperty("销售中心名称")
private String saleCenterName;
@ApiModelProperty("销售主体")
private String sellerSubject;
@ApiModelProperty("购买主体")
private String buyerSubject;
@ApiModelProperty("入库仓库编码")
private String inWareHouseCode;
@ApiModelProperty("入库仓库名称")
private String inWareHouseName;
}

@ -2,13 +2,12 @@ package com.zbkj.service.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zbkj.common.model.order.StoreOrder;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.request.*;
import com.zbkj.common.response.*;
import com.zbkj.common.vo.ExpressSheetVo;
import com.zbkj.common.vo.LogisticsResultVo;
import com.zbkj.common.model.order.StoreOrder;
import com.zbkj.common.vo.MyRecord;
import java.math.BigDecimal;
import java.util.List;
@ -423,4 +422,6 @@ public interface StoreOrderService extends IService<StoreOrder> {
Boolean refundRequestPass(RefundPassRequest request);
String sendNew(StoreOrderSendRequest request);
boolean add(TradeOrderRespDTO request);
}

@ -23,6 +23,7 @@ import com.zbkj.common.model.extend.MallExpressInfoDto;
import com.zbkj.common.model.order.StoreOrder;
import com.zbkj.common.model.order.StoreOrderInfo;
import com.zbkj.common.model.parcel.ParcelPO;
import com.zbkj.common.model.product.StoreProductAttr;
import com.zbkj.common.model.product.StoreProductAttrValue;
import com.zbkj.common.model.sms.SmsTemplate;
import com.zbkj.common.model.system.SystemAdmin;
@ -55,6 +56,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
@ -1803,6 +1805,88 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
}
return mianDanResult;
}
@Override
@Transactional
public boolean add(TradeOrderRespDTO request) {
List<StoreOrderInfo> storeOrderInfos=new ArrayList<>();
String orderNo=CrmebUtil.getOrderNo("order1");
Integer totalNum=0;
BigDecimal totalPrice=BigDecimal.ZERO;
for(TradeOrderDetailRespDTO detail:request.getItem()){
totalNum=totalNum+detail.getSellQty();
LambdaQueryWrapper<StoreProductAttrValue> queryWrapper=new LambdaQueryWrapper<>();
queryWrapper.eq(StoreProductAttrValue::getBarCode,detail.getSkuNo());
queryWrapper.orderByDesc(StoreProductAttrValue::getId).last(" limit 1");
StoreProductAttrValue storeProductAttrValue= storeProductAttrValueDao.selectOne(queryWrapper);
if(storeProductAttrValue==null){
storeProductAttrValue=new StoreProductAttrValue();
storeProductAttrValue.setProductId(27);
storeProductAttrValue.setOtPrice(detail.getSellPrice());
storeProductAttrValue.setPrice(detail.getSellPrice());
storeProductAttrValue.setStock(10000);
storeProductAttrValue.setBarCode(detail.getSkuNo());
storeProductAttrValue.setSuk(detail.getSkuName());
storeProductAttrValue.setBrokerage(BigDecimal.ZERO);
storeProductAttrValue.setBrokerageTwo(BigDecimal.ZERO);
storeProductAttrValue.setCost(detail.getSellPrice());
storeProductAttrValue.setAttrValue("{\"规格\":\"默认\"}");
storeProductAttrValue.setImage("");
storeProductAttrValue.setQuota(10000);
storeProductAttrValue.setQuotaShow(10000);
storeProductAttrValue.setUnique("");
storeProductAttrValueDao.insert(storeProductAttrValue);
}
StoreOrderInfo storeOrderInfo=new StoreOrderInfo();
storeOrderInfo.setInfo(detail.getSkuName());
storeOrderInfo.setImage("");
storeOrderInfo.setOrderNo(orderNo);
storeOrderInfo.setIsReply(false);
storeOrderInfo.setAttrValueId(storeProductAttrValue.getId());
storeOrderInfo.setGiveIntegral(0);
storeOrderInfo.setIsSub(false);
storeOrderInfo.setPayNum(detail.getSellQty());
storeOrderInfo.setProductId(storeProductAttrValue.getProductId());
storeOrderInfo.setPrice(detail.getSellPrice());
storeOrderInfo.setProductName(detail.getSkuName());
storeOrderInfo.setProductType(0);
storeOrderInfo.setUnique("");
storeOrderInfo.setSku(detail.getSkuNo());
storeOrderInfo.setVolume(BigDecimal.ONE);
storeOrderInfo.setWeight(BigDecimal.ONE);
storeOrderInfos.add(storeOrderInfo);
totalPrice=totalPrice.add(storeOrderInfo.getPrice().multiply(new BigDecimal(storeOrderInfo.getPayNum())));
}
StoreOrder storeOrder=new StoreOrder();
storeOrder.setOrderId(orderNo);
storeOrder.setUid(5);
storeOrder.setRealName(request.getReceiverName());
storeOrder.setUserPhone(request.getReceiverPhone());
storeOrder.setUserAddress(request.getReceiverAddress());
storeOrder.setFreightPrice(BigDecimal.ZERO);
storeOrder.setTotalNum(totalNum);
storeOrder.setTotalPrice(totalPrice);
storeOrder.setTotalPostage(BigDecimal.ZERO);
storeOrder.setPayPrice(totalPrice);
storeOrder.setPaid(true);
storeOrder.setPayTime(new Date());
storeOrder.setPayType("weixin");
storeOrder.setCreateTime(new Date());
storeOrder.setStatus(0);
storeOrder.setCost(totalPrice);
storeOrder.setIsChannel(4);
storeOrder.setType(0);
storeOrder.setProTotalPrice(totalPrice);
storeOrder.setHasSync(1);
storeOrder.setOutTradeNo("wx"+orderNo);
dao.insert(storeOrder);
storeOrderInfos.forEach(info -> info.setOrderId(storeOrder.getId()));
// 生成订单日志
storeOrderStatusService.createLog(storeOrder.getId(), Constants.ORDER_STATUS_CACHE_CREATE_ORDER, "订单生成");
return true;
}
private void mappingExpressCode(StoreOrderSendRequest request, StoreOrder storeOrder) {
List<String> expressNames = request.getExpressList().stream().map(MallExpressInfoDto::getExpressName).collect(Collectors.toList());
Map<String, Express> expressMap = expressService.getByNames(expressNames).stream().collect(Collectors.toMap(Express::getName, Function.identity(), (v1, v2) -> v1));

Loading…
Cancel
Save