mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-23 10:55:34 +08:00
479 lines
15 KiB
PHP
479 lines
15 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2012-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.
|
|
*/
|
|
abstract class taoguaniostockorder_diff_process_abstract
|
|
{
|
|
/**
|
|
* 仓加库存
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
protected function branchAddStock($data)
|
|
{
|
|
//生成入库单 type_id = 70 bill_type = adjustment
|
|
$diffMdl = app::get('taoguaniostockorder')->model('diff');
|
|
$isoDiffItemsMdl = app::get('taoguaniostockorder')->model('diff_items');
|
|
$isoDiffItemsDetailMdl = app::get('taoguaniostockorder')->model('diff_items_detail');
|
|
$diff_id = $data['diff_id'];
|
|
$detailItems = $data['items'];
|
|
$data['type_id'] = '921';//直接入库
|
|
$filter = array(
|
|
'diff_id' => $diff_id,
|
|
);
|
|
// 检测单据是否有效
|
|
$info = $diffMdl->db_dump($filter);
|
|
if (!$info) {
|
|
return [false,'单据无效'];
|
|
}
|
|
|
|
if (in_array($info['diff_status'], array('2','3','4'))) {
|
|
return [false,'未处理的单据才能审核'];
|
|
}
|
|
|
|
if ($data['check_status'] == '2') {
|
|
return [false,'单据已经审核,不能再审核'];
|
|
}
|
|
|
|
$shift_data = $this->formatData($data);
|
|
$iostock_instance = kernel::single('console_adjust');
|
|
list($res,$msg) = $iostock_instance->createAdjustDiff($shift_data);
|
|
if(!$res){
|
|
//入库单处理失败返回
|
|
return [false,$msg];
|
|
}
|
|
//修改差异单状态
|
|
$diff_items_ids = array_column($detailItems,'diff_items_id');
|
|
$items_detail_ids = array_column($detailItems,'items_detail_id');
|
|
$isoDiffItemsDetailMdl->update(array('diff_status'=>'3'),array('items_detail_id'=>$items_detail_ids));
|
|
$isoDiffItemsMdl->update(array('diff_status'=>'3'),array('diff_items_id'=>$diff_items_ids));
|
|
|
|
//邮件发送
|
|
$this->sendMail($shift_data);
|
|
|
|
return [true,'创建入库单成功'];
|
|
}
|
|
|
|
/**
|
|
* 仓减库存
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
protected function branchSubStock($data)
|
|
{
|
|
//生成出库单 type_id = 7 bill_type = adjustment
|
|
$diffMdl = app::get('taoguaniostockorder')->model('diff');
|
|
$isoDiffItemsMdl = app::get('taoguaniostockorder')->model('diff_items');
|
|
$isoDiffItemsDetailMdl = app::get('taoguaniostockorder')->model('diff_items_detail');
|
|
|
|
$diff_id = $data['diff_id'];
|
|
$detailItems = $data['items'];
|
|
$data['type_id'] = '922';//直接出库
|
|
|
|
$filter = array(
|
|
'diff_id' => $diff_id,
|
|
);
|
|
// 检测单据是否有效
|
|
$info = $diffMdl->db_dump($filter);
|
|
if (!$info) {
|
|
return [false,'单据无效'];
|
|
}
|
|
|
|
if (in_array($info['diff_status'], array('2','3','4'))) {
|
|
return [false,'未处理的单据才能审核'];
|
|
}
|
|
|
|
if ($data['check_status'] == '2') {
|
|
return [false,'单据已经审核,不能再审核'];
|
|
}
|
|
|
|
$shift_data = $this->formatData($data);
|
|
|
|
$iostock_instance = kernel::single('console_adjust');
|
|
|
|
list($res,$msg) = $iostock_instance->createAdjustDiff($shift_data);
|
|
if(!$res){
|
|
//出库单处理失败返回
|
|
return [false,$msg];
|
|
}
|
|
//修改差异单状态
|
|
$diff_items_ids = array_column($detailItems,'diff_items_id');
|
|
$items_detail_ids = array_column($detailItems,'items_detail_id');
|
|
$isoDiffItemsDetailMdl->update(array('diff_status'=>'3'),array('items_detail_id'=>$items_detail_ids));
|
|
$isoDiffItemsMdl->update(array('diff_status'=>'3'),array('diff_items_id'=>$diff_items_ids));
|
|
|
|
//邮件发送
|
|
$this->sendMail($shift_data);
|
|
|
|
return [true,'创建入库单成功'];
|
|
}
|
|
|
|
/**
|
|
* 店加库存
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
protected function storeAddStock($data)
|
|
{
|
|
//生成入库单 type_id = 70 bill_type = adjustment
|
|
$diffMdl = app::get('taoguaniostockorder')->model('diff');
|
|
$isoDiffItemsMdl = app::get('taoguaniostockorder')->model('diff_items');
|
|
$isoDiffItemsDetailMdl = app::get('taoguaniostockorder')->model('diff_items_detail');
|
|
|
|
$diff_id = $data['diff_id'];
|
|
$detailItems = $data['items'];
|
|
$data['type_id'] = '921';//直接入库
|
|
|
|
$filter = array(
|
|
'diff_id' => $diff_id,
|
|
);
|
|
// 检测单据是否有效
|
|
$info = $diffMdl->db_dump($filter);
|
|
if (!$info) {
|
|
return [false,'单据无效'];
|
|
}
|
|
|
|
if (in_array($info['diff_status'], array('2','3','4'))) {
|
|
return [false,'未处理的单据才能审核'];
|
|
}
|
|
|
|
if ($data['check_status'] == '2') {
|
|
return [false,'单据已经审核,不能再审核'];
|
|
}
|
|
|
|
//return
|
|
$shift_data = $this->formatData($data);
|
|
|
|
$iostock_instance = kernel::single('console_adjust');
|
|
|
|
list($res,$msg) = $iostock_instance->createAdjustDiff($shift_data);
|
|
if(!$res){
|
|
//入库单处理失败返回
|
|
return [false,$msg];
|
|
}
|
|
//修改差异单状态
|
|
$diff_items_ids = array_column($detailItems,'diff_items_id');
|
|
$items_detail_ids = array_column($detailItems,'items_detail_id');
|
|
$isoDiffItemsDetailMdl->update(array('diff_status'=>'3'),array('items_detail_id'=>$items_detail_ids));
|
|
$isoDiffItemsMdl->update(array('diff_status'=>'3'),array('diff_items_id'=>$diff_items_ids));
|
|
|
|
//邮件发送
|
|
$this->sendMail($shift_data);
|
|
|
|
return [true,'创建入库单成功'];
|
|
}
|
|
|
|
/**
|
|
* 店减库存
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
protected function storeSubStock($data)
|
|
{
|
|
//生成出库单 type_id = 7 bill_type = adjustment
|
|
$diffMdl = app::get('taoguaniostockorder')->model('diff');
|
|
$isoDiffItemsMdl = app::get('taoguaniostockorder')->model('diff_items');
|
|
$isoDiffItemsDetailMdl = app::get('taoguaniostockorder')->model('diff_items_detail');
|
|
|
|
$diff_id = $data['diff_id'];
|
|
$detailItems = $data['items'];
|
|
$data['type_id'] = '922';//直接出库
|
|
|
|
$filter = array(
|
|
'diff_id' => $diff_id,
|
|
);
|
|
// 检测单据是否有效
|
|
$info = $diffMdl->db_dump($filter);
|
|
if (!$info) {
|
|
return [false,'单据无效'];
|
|
}
|
|
|
|
if (in_array($info['diff_status'], array('2','3','4'))) {
|
|
return [false,'未处理的单据才能审核'];
|
|
}
|
|
|
|
if ($data['check_status'] == '2') {
|
|
return [false,'单据已经审核,不能再审核'];
|
|
}
|
|
|
|
$shift_data = $this->formatData($data);
|
|
|
|
$iostock_instance = kernel::single('console_adjust');
|
|
|
|
list($res,$msg) = $iostock_instance->createAdjustDiff($shift_data);
|
|
if(!$res){
|
|
//出库单处理失败返回
|
|
return [false,$msg];
|
|
}
|
|
//修改差异单状态
|
|
$diff_items_ids = array_column($detailItems,'diff_items_id');
|
|
$items_detail_ids = array_column($detailItems,'items_detail_id');
|
|
$isoDiffItemsDetailMdl->update(array('diff_status'=>'3'),array('items_detail_id'=>$items_detail_ids));
|
|
$isoDiffItemsMdl->update(array('diff_status'=>'3'),array('diff_items_id'=>$diff_items_ids));
|
|
|
|
//邮件发送
|
|
$this->sendMail($shift_data);
|
|
|
|
return [true,'创建入库单成功'];
|
|
}
|
|
|
|
/**
|
|
* 物流店铺加库存
|
|
* @param $data
|
|
* @return array
|
|
*/
|
|
protected function logisticsAddStock($data)
|
|
{
|
|
//生成入库单 type_id = 70 bill_type = adjustment
|
|
$diffMdl = app::get('taoguaniostockorder')->model('diff');
|
|
$isoDiffItemsMdl = app::get('taoguaniostockorder')->model('diff_items');
|
|
$isoDiffItemsDetailMdl = app::get('taoguaniostockorder')->model('diff_items_detail');
|
|
$diff_id = $data['diff_id'];
|
|
$detailItems = $data['items'];
|
|
$data['type_id'] = '921';//直接入库
|
|
$filter = array(
|
|
'diff_id' => $diff_id,
|
|
);
|
|
// 检测单据是否有效
|
|
$info = $diffMdl->db_dump($filter);
|
|
if (!$info) {
|
|
return [false,'单据无效'];
|
|
}
|
|
|
|
if (in_array($info['diff_status'], array('2','3','4'))) {
|
|
return [false,'未处理的单据才能审核'];
|
|
}
|
|
|
|
if ($data['check_status'] == '2') {
|
|
return [false,'单据已经审核,不能再审核'];
|
|
}
|
|
|
|
$shift_data = $this->formatData($data);
|
|
$iostock_instance = kernel::single('console_adjust');
|
|
list($res,$msg) = $iostock_instance->createAdjustDiff($shift_data);
|
|
if(!$res){
|
|
//入库单处理失败返回
|
|
return [false,$msg];
|
|
}
|
|
//修改差异单状态
|
|
$diff_items_ids = array_column($detailItems,'diff_items_id');
|
|
$items_detail_ids = array_column($detailItems,'items_detail_id');
|
|
$isoDiffItemsDetailMdl->update(array('diff_status'=>'3'),array('items_detail_id'=>$items_detail_ids));
|
|
$isoDiffItemsMdl->update(array('diff_status'=>'3'),array('diff_items_id'=>$diff_items_ids));
|
|
|
|
//邮件发送
|
|
// $this->sendMail($shift_data);
|
|
|
|
return [true,'创建入库单成功'];
|
|
}
|
|
|
|
protected function sendMail($data)
|
|
{
|
|
$this->send_email($data);
|
|
|
|
}
|
|
|
|
/**
|
|
* 仓发店短发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
abstract public function b2sLess($data);
|
|
|
|
|
|
/**
|
|
* 仓发店超发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
abstract public function b2sMore($data);
|
|
|
|
/**
|
|
* 仓发店错发(错发逻辑拆分成超发和短发处理)
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
// abstract public function b2sWrong($data);
|
|
|
|
/**
|
|
* 店退仓短发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
abstract public function s2bLess($data);
|
|
|
|
|
|
/**
|
|
* 店退仓超发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
abstract public function s2bMore($data);
|
|
|
|
/**
|
|
* 店退仓错发()
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
// abstract public function s2bWrong($data);
|
|
|
|
/**
|
|
* 店转店短发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
abstract public function s2sLess($data);
|
|
|
|
|
|
/**
|
|
* 店转店超发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
abstract public function s2sMore($data);
|
|
|
|
/**
|
|
* 仓转仓短发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
abstract public function b2bLess($data);
|
|
|
|
/**
|
|
* 仓转仓超发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
abstract public function b2bMore($data);
|
|
/**
|
|
* 店转店错发
|
|
*
|
|
* @return void
|
|
* @author
|
|
* */
|
|
// abstract public function s2sWrong($data);
|
|
|
|
/**
|
|
* 直接出入库单数据组装
|
|
* @param $sdf
|
|
* @return array
|
|
*/
|
|
protected function formatData($sdf)
|
|
{
|
|
#组织明细
|
|
$items = array();
|
|
foreach ($sdf['items'] as $key => $value) {
|
|
if($value['nums'] > 0){
|
|
$items[$value['product_id']] = array(
|
|
'bn' => (string)$value['bn'],
|
|
'nums' => $value['nums'],
|
|
'unit' => $value['unit'],
|
|
'name' => $value['product_name'],
|
|
'price' => $value['price'],
|
|
);
|
|
}
|
|
}
|
|
|
|
$op_name = kernel::single('desktop_user')->get_name();
|
|
$iostockorder_name = $sdf['type_id'] == '921' ? '差异单入库' : '差异单出库';
|
|
$shift_data = array(
|
|
'iostockorder_name' => $iostockorder_name.$sdf['diff_bn'],
|
|
'branch' => $sdf['branch_id'],
|
|
// 'extrabranch_id' => $from_branch_id,
|
|
'type_id' => $sdf['type_id'],
|
|
'iso_price' => 0,
|
|
'operator' => $op_name,
|
|
'products' => $items,
|
|
'original_bn' => $sdf['diff_bn'],
|
|
'original_id' => $sdf['diff_id'],
|
|
'confirm' => 'Y',
|
|
'bill_type' => 'adjustment',
|
|
);
|
|
return $shift_data;
|
|
}
|
|
|
|
|
|
function send_email($data)
|
|
{
|
|
if (!defined('EMAIL_ACCOUNT') || !defined('EMAIL_PWD')) {
|
|
return false;
|
|
}
|
|
ini_set('memory_limit', '1G');
|
|
$end_starttime = strtotime(date('Y-m-d H:00:00', time()));
|
|
|
|
// $title = '预售预提单' . date('YmdH', $stat_starttime) . '-' . date('YmdH', $end_starttime);
|
|
|
|
$attachment = '';
|
|
|
|
$emailLib = new console_email_email;
|
|
$emailLib->CharSet = "UTF-8";
|
|
$emailLib->IsSMTP();
|
|
$emailLib->SMTPAuth = true;
|
|
|
|
$emailLib->SMTPSecure = 'ssl';
|
|
|
|
$emailLib->isHTML(true);
|
|
|
|
$emailLib->Host = 'smtp.exmail.qq.com';
|
|
$emailLib->Port = 465;
|
|
$emailLib->Username = EMAIL_ACCOUNT;
|
|
$emailLib->From = EMAIL_ACCOUNT;
|
|
$emailLib->FromName = 'GANT-业务中台';
|
|
$emailLib->Password = EMAIL_PWD;
|
|
|
|
//接收邮件人邮箱配置
|
|
$receivers = array(
|
|
// 'dengbin@shopex.cn',
|
|
);
|
|
// $receivers = app::get('console')->getConf('take_stock_daily_email_list');
|
|
foreach ($receivers as $value) {
|
|
list($receive_mail, $receive_name) = explode('#', $value);
|
|
|
|
$emailLib->AddAddress($receive_mail, $receive_name);
|
|
}
|
|
|
|
if ($attachment) {
|
|
$emailLib->AddAttachment($attachment);
|
|
}
|
|
|
|
$subject = $data['iostockorder_name'].'--' . date('YmdH', $end_starttime);
|
|
$emailLib->Subject = $subject;
|
|
$emailLib->Body = $subject;
|
|
|
|
try {
|
|
$emailLib->Send();
|
|
|
|
unlink($attachment);
|
|
|
|
app::get('presale')->setConf('presale.orders.exporttime', $end_starttime);
|
|
return true;
|
|
} catch (Exception $e) {
|
|
$err_msg = $emailLib->ErrorInfo;
|
|
|
|
unlink($attachment);
|
|
return false;
|
|
}
|
|
}
|
|
} |