mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-23 02:45:33 +08:00
312 lines
11 KiB
PHP
312 lines
11 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2026 ShopeX (https://www.shopex.cn)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
class ome_sales{
|
|
function set(&$data,&$msg=array()){
|
|
|
|
$itemsObj = app::get('ome')->model('sales_items');
|
|
if(is_array($data) && count($data)>0){
|
|
if(!$this->check_required($data,$msg)){
|
|
return false;
|
|
}
|
|
$this->divide_data($data,$main,$item);
|
|
|
|
if($this->_mainvalue($main,$msg) && $this->_itemvalue($item,$msg)){
|
|
$sale_id = $this->gen_id(); //获取销售编号
|
|
$main['sale_id'] = $sale_id;
|
|
foreach($item as $item_key=>$value){
|
|
$value['branch_id'] = $data['branch_id'];
|
|
$value['sale_id'] = $sale_id;
|
|
$item[$item_key] = $value;
|
|
}
|
|
|
|
$item_sql = ome_func::get_insert_sql($itemsObj,$item);
|
|
if ( kernel::database()->exec($item_sql) ){
|
|
$this->_add_Sales($main);
|
|
}
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//添加销售主表记录
|
|
function _add_Sales($data){
|
|
$salesObj = app::get('ome')->model('sales');
|
|
return $salesObj->save($data);
|
|
}
|
|
|
|
//添加销售明细表记录
|
|
function _add_Sales_Items($data){
|
|
$itemsObj = app::get('ome')->model('sales_items');
|
|
return $itemsObj->save($data);
|
|
}
|
|
|
|
function gen_id(){
|
|
|
|
list($msec, $sec) = explode(" ",microtime());
|
|
|
|
$id = $sec.strval($msec*1000000);
|
|
$conObj = app::get('ome')->model('concurrent');
|
|
if($conObj->is_pass($id,'sales')){
|
|
return $id;
|
|
} else {
|
|
return $this->gen_id();
|
|
}
|
|
}
|
|
|
|
//检查所有必填字段
|
|
function check_required($data,&$msg){
|
|
$msg = array();
|
|
$arrMain = array('iostock_bn','sale_amount','delivery_cost','operator','branch_id'); //主表必须字段
|
|
$arrItems = array('bn','nums'); //明细表必须字段
|
|
if(is_array($data) && count($data) > 0){
|
|
$arrExist = array_keys($data);
|
|
|
|
if(count(array_diff($arrMain,$arrExist))){
|
|
$msg[] = '主表中必填字段不全';
|
|
return false;
|
|
}
|
|
foreach($arrMain as $key){
|
|
$tmp_value = trim($data[$key]);
|
|
if(is_null($tmp_value) || $tmp_value === ''){
|
|
$msg[]=$key.'主表中必填字段值不能为空';
|
|
}
|
|
}
|
|
if(in_array('sales_items',$arrExist) && is_array($data['sales_items'])){
|
|
|
|
foreach($data['sales_items'] as $keys=>$contents){
|
|
$arrI = array_keys($contents);
|
|
if(count(array_diff($arrItems,$arrI))){
|
|
$msg[] ='明细表-' . $keys .'-' . '必填字段不全';
|
|
}else{
|
|
foreach($contents as $key=>$value){
|
|
if(in_array($key,$arrItems)){
|
|
empty($value) ? $msg[] = '明细表' . $keys . '-' .$key . '必填字段值不能为空' : '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(count($msg)){
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//拆分出主表与子表数据
|
|
function divide_data($data,&$mainArr,&$itemArr){
|
|
if($data){
|
|
foreach($data as $key=>$value){
|
|
if($key == 'sales_items'){
|
|
$itemArr = $data[$key];
|
|
}else{
|
|
$mainArr[$key] = $data[$key];
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//检查明细表值是否符合
|
|
function _itemvalue($data,&$msg){
|
|
$rea = '字段类型不符(子表)';
|
|
if(is_array($data)){
|
|
foreach($data as $key=>$val){
|
|
foreach($val as $field=>$content){
|
|
if($content != ''){
|
|
switch ($field){
|
|
//bigint(20) unsigned
|
|
case 'sale_id':
|
|
case 'iostock_id':
|
|
if(is_numeric($content) && strlen($content)<=20 && $content>0){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'. $field.'-'.$rea;
|
|
}
|
|
break;
|
|
//int(10) unsigned
|
|
case 'item_id':
|
|
if(is_numeric($content) && strlen($content)<=10 && $content>0){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'. $field.'-'.$rea;
|
|
}
|
|
break;
|
|
//varchar(32)
|
|
case 'bn':
|
|
if(is_string($content) && strlen($content)<=32){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'. $field.'-'.$rea;
|
|
}
|
|
break;
|
|
// mediumint(8) unsigned
|
|
case 'nums':
|
|
case 'branch_id':
|
|
if(is_numeric($content) && strlen($content)<=8 && $content>0){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'. $field.'-'.$rea;
|
|
}
|
|
break;
|
|
//decimal(20,3)
|
|
case 'price':
|
|
case 'cost':
|
|
case 'cost_tax':
|
|
if(is_numeric($content) && strlen($content)<=20){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'. $field.'-'.$rea;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
//检查主表字段值是否符合
|
|
function _mainvalue($data,&$msg){
|
|
$rea = '字段类型不符(主表)';
|
|
foreach($data as $key=>$content){
|
|
if($content != ''){
|
|
switch ($key){
|
|
//bigint(20) unsigned
|
|
case 'sale_id':
|
|
if(is_numeric($content) && strlen($content)<=20 && $content>0){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'.$rea;
|
|
}
|
|
break;
|
|
//varchar(32)
|
|
case 'sale_bn':
|
|
case 'iostock_bn':
|
|
case 'shop_id':
|
|
if(is_string($content) && strlen($content)<=32){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'.$rea;
|
|
}
|
|
break;
|
|
//int(10) unsigned
|
|
case 'sale_time':
|
|
case 'member_id':
|
|
if (!empty($content)){
|
|
if(is_numeric($content) && strlen($content)<=10 && $content>0){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'.$rea;
|
|
}
|
|
}
|
|
break;
|
|
//decimal(20,3)
|
|
case 'sale_amount':
|
|
case 'cost':
|
|
case 'delivery_cost':
|
|
case 'additional_costs':
|
|
case 'deposit':
|
|
case 'discount':
|
|
if(is_numeric($content) && strlen($content)<=20){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'.$rea;
|
|
}
|
|
break;
|
|
//varchar(30)
|
|
case 'operator':
|
|
if(is_string($content) && strlen($content)<=30){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'.$rea;
|
|
}
|
|
break;
|
|
//mediumint(8) unsigned
|
|
case 'branch_id':
|
|
if(is_numeric($content) && strlen($content)<=8 && $content>0){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'.$rea;
|
|
}
|
|
break;
|
|
//enum('0','1')
|
|
case 'pay_status':
|
|
if(is_numeric($content) && strlen($content)<=2){
|
|
continue;
|
|
} else{
|
|
$msg[] = $key .'-'.$rea;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* 生成销售单单号
|
|
**/
|
|
function get_salse_bn($num = 0){
|
|
$type = 'SALSE';
|
|
$prefix = 'S'.date('Ymd');
|
|
$sign = kernel::single('eccommon_guid')->incId($type, $prefix, 6, true);
|
|
return $sign;
|
|
|
|
/*
|
|
$type = 'SALSE';
|
|
|
|
if($num >= 1){
|
|
$num++;
|
|
}else{
|
|
$sql = "SELECT id FROM sdb_ome_concurrent WHERE `type`='$type' and `current_time`>'".strtotime(date('Y-m-d'))."' and `current_time`<=".time()." order by id desc limit 0,1";
|
|
$arr = kernel::database()->select($sql);
|
|
if($id = $arr[0]['id']){
|
|
$num = substr($id,-6);
|
|
$num = intval($num)+1;
|
|
}else{
|
|
$num = 1;
|
|
}
|
|
}
|
|
|
|
$po_num = str_pad($num,6,'0',STR_PAD_LEFT);
|
|
$salse_bn = 'S'.date(Ymd).$po_num;
|
|
|
|
$conObj = app::get('ome')->model('concurrent');
|
|
if($conObj->is_pass($salse_bn,$type)){
|
|
return $salse_bn;
|
|
} else {
|
|
if($num > 999999){
|
|
return false;
|
|
}else{
|
|
return $this->get_salse_bn($num);
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
}
|
|
|
|
?>
|