订单是系统中必不可少的一部分,通过销售下单可以形成销售订单,选择商品,填写客户信息
创建销售订单
表设计
CREATE TABLE `sale_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_no` varchar(100) NOT NULL COMMENT '采购订单编码',
`warehouse_code` varchar(100) NOT NULL COMMENT '仓库编码',
`warehouse_name` varchar(100) DEFAULT NULL COMMENT '仓库名称',
`order_state` smallint(6) NOT NULL DEFAULT '0' COMMENT '状态0:新建 10:已审核 30:已发货',
`total_amount` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '订单总金额',
`province_code` varchar(100) DEFAULT NULL COMMENT '省',
`province_name` varchar(100) DEFAULT NULL COMMENT '省',
`city_code` varchar(100) DEFAULT NULL COMMENT '市编码',
`city_name` varchar(100) DEFAULT NULL COMMENT '市',
`area_code` varchar(100) DEFAULT NULL COMMENT '区编码',
`area_name` varchar(100) DEFAULT NULL COMMENT '区',
`receiver_name` varchar(50) DEFAULT NULL COMMENT '收货人姓名',
`receiver_phone` varchar(100) DEFAULT NULL COMMENT '电话',
`address` varchar(500) DEFAULT NULL COMMENT '地址',
`audit_user` varchar(50) DEFAULT NULL COMMENT '审核人',
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
`cancel_user` varchar(50) DEFAULT NULL COMMENT '取消人',
`cancel_time` datetime DEFAULT NULL COMMENT '取消时间',
`delivery_time` datetime DEFAULT NULL COMMENT '出库时间',
`delivery_user` varchar(50) DEFAULT NULL COMMENT '发运人',
`delivery_date` datetime DEFAULT NULL COMMENT '发货日期',
`remark` varchar(1000) DEFAULT NULL COMMENT '备注',
`create_user` varchar(50) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_user` varchar(50) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`yn` tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='销售订单表'
CREATE TABLE `sale_order_detail` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_no` varchar(100) NOT NULL COMMENT '采购订单编码',
`sku_code` varchar(100) NOT NULL COMMENT '商品编码',
`goods_name` varchar(100) DEFAULT NULL COMMENT '商品名称',
`goods_model` varchar(100) DEFAULT NULL COMMENT '规格',
`unit_name` varchar(100) DEFAULT NULL COMMENT '单位',
`is_fresh` smallint(6) NOT NULL DEFAULT '0' COMMENT '0:否 1:是',
`plan_num` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '计划量',
`delivery_num` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '发运量',
`tax_rate` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '税率',
`tax_price` decimal(18,3) NOT NULL DEFAULT '0.000' COMMENT '单价',
`create_user` varchar(50) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_user` varchar(50) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`yn` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='销售订单明细'
@RequestMapping("/addOrderDetail")
@ResponseBody
public ResponseData addOrderDetail(
@RequestParam("receiverName") String receiverName,
@RequestParam("receiverPhone") String receiverPhone,
@RequestParam("address") String address,
@RequestParam("warehouseCode") String warehouseCode,
@RequestParam("warehouseName") String warehouseName,
@RequestParam("deliveryDate") Date deliveryDate,
@RequestParam("detailStr") String detailStr,
@RequestParam("remark") String remark
) {
List<SaleOrderDetailParam> saleOrderDetailParamList= JSONObject.parseArray(detailStr,SaleOrderDetailParam.class);
if (saleOrderDetailParamList==null||saleOrderDetailParamList.size()==0)
{
return ResponseData.error("请选择商品!");
}
Map<String, String> replaceMap = new HashMap<String, String>();
replaceMap.put("warehouseId", warehouseCode);
String orderNo = this.codeService.generateCode(CodeExpressEnum.billnoSaleOrder, replaceMap);
if (Strings.isNullOrEmpty(orderNo))
{
return ResponseData.error("单号为空");
}
// BigDecimal totalAmount =saleOrderDetailParamList.stream().map(SaleOrderDetailParam::getTaxPrice).reduce(BigDecimal.ZERO,BigDecimal::add);
BigDecimal totalAmount = saleOrderDetailParamList.stream().reduce(BigDecimal.ZERO, (x, y) -> {
return x.add(y.getPlanNum().multiply(y.getTaxPrice()));
}, BigDecimal::add);
SaleOrderParam saleOrderParam=new SaleOrderParam();
saleOrderParam.setOrderNo(orderNo);
saleOrderParam.setWarehouseCode(warehouseCode);
saleOrderParam.setWarehouseName(warehouseName);
saleOrderParam.setOrderState(SaleOrderStatusEnum.NEW.getStatusValue());
saleOrderParam.setTotalAmount(totalAmount);
saleOrderParam.setReceiverName(receiverName);
saleOrderParam.setReceiverPhone(receiverPhone);
saleOrderParam.setAddress(address);
saleOrderParam.setDeliveryDate(deliveryDate);
saleOrderParam.setRemark(remark);
saleOrderParam.setCreateUser(LoginContextHolder.getContext().getUser().getUsername());
saleOrderParam.setCreateTime(new Date());
saleOrderParam.setUpdateTime(new Date());
saleOrderParam.setUpdateUser(LoginContextHolder.getContext().getUser().getUsername());
saleOrderParam.setYn(1);
for (SaleOrderDetailParam saleOrderDetailParam:saleOrderDetailParamList)
{
saleOrderDetailParam.setOrderNo(orderNo);
saleOrderDetailParam.setCreateUser(LoginContextHolder.getContext().getUser().getUsername());
saleOrderDetailParam.setCreateTime(new Date());
saleOrderDetailParam.setUpdateTime(new Date());
saleOrderDetailParam.setUpdateUser(LoginContextHolder.getContext().getUser().getUsername());
saleOrderDetailParam.setYn(1);
}
saleOrderService.addOrder(saleOrderParam,saleOrderDetailParamList);
return ResponseData.success();
}