load->_model('Model_settingtest','settingtest'); $this->load->_model("Model_apiyyv1",'apiyyv1'); $this->load->_model('Model_classid','classid'); $this->load->_model('Model_typeclass','typeclass'); $this->load->_model('Model_shop','shop'); $this->load->_model('Model_zzquque_u9','zzquque_u9'); $this->load->_model('Model_zzququeu9_logs','zzququeu9_logs'); $this->load->_model('Model_logic_tools','logic_tools'); $this->load->_model('Model_logic_u9tools','logic_u9tools'); } public function getToken($type){ $name = "get_yytoken_".$type; $token = $this->settingtest->$name(); return $token; } //转码准备数据 public function transPrepare(){ $classid = $this->classid->sku(); $tcall = $this->typeclass->find_all(); foreach ($tcall as $v) { $tcjm[$v['id']] = array($v['jm'],$v['classid']); $typeclass[$v['id']] = array('zh'=>$v['zh'],'classid'=>$v['classid'],'bm'=>$v['bm'],'title'=>$v['title'],'jm'=>$v['jm']); } return [ 'classid'=>$classid, 'typeclass'=>$typeclass, ]; } //必须先建立许昌成品仓的销售单和调出单 香港仓的采购单 一次执行5单 //循环执行许昌成品仓的销售单 调出单和香港仓的采购单 public function xdlsOneStep($list){ $pre_data = $this->transPrepare(); foreach($list as $k=>$v){ $this->xdlsBeforeCreate($v,$pre_data['typeclass'],$pre_data['classid']); } } //循环执行许昌仓的销售单 调出单和香港仓的采购单 提交 顺带的也执行审核 public function xdlsTwoStep($list){ foreach($list as $k=>$v){ $r1 = $this->dcSubAndCheck($v); if(!$r1){ continue; } $r2 = $this->cgSubAndCheck($v); if(!$r2){ continue; } $this->xsSubAndCheck($v); } } //查询调出单生成的调入单是否生成 如果生成了就审核 如果没生成 说明异常了 这种都是按步骤走的 public function xdlsThreeStep($list){ $token_140 = $this->getToken(130); foreach($list as $k=>$v){ $r = $this->apiyyv1->drdcxBydcd($v['order_no'],$token_140); //如果获取对应调入单没有成功 if(empty($r[0]['Data'][0]['docno'])){ $this->editData($v['id'],['dr_status'=>-1,'update_time'=>time()],$v['order_no'],6,1,'dr',$r[1],$r[0]); continue; } if(count($r[0]['Data'])>1){ foreach($r[0]['Data'] as $item){ if($item['descflexfield_pubdescseg4'] == $v['order_no']){ $dr_no = $item['docno']; } } }else{ $dr_no = $r[0]['Data'][0]['docno']; } $this->editData($v['id'],['dr_no'=>$r[0]['Data'][0]['docno'],'dr_status'=>1,'update_time'=>time()],$v['order_no'],6,1,'dr',$r[1],$r[0]); //提交调入单 $rr = $this->apiyyv1->drdSubmit(['number'=>$dr_no],$token_140); if(!$rr[0]['Data'][0]['IsSucess']){ $this->editData($v['id'],['dr_status'=>-2,'update_time'=>time()],$v['order_no'],6,2,'dr',$rr[1],$rr[0]); continue; } $this->editData($v['id'],['dr_status'=>2,'update_time'=>time()],$v['order_no'],6,2,'dr',$rr[1],$rr[0]); //审核调入单 $rrr = $this->apiyyv1->drdApprove(['number'=>$dr_no],$token_140); if(!$rrr[0]['Data'][0]['IsSucess']){ $this->editData($v['id'],['dr_status'=>-3,'update_time'=>time()],$v['order_no'],6,3,'dr',$rrr[1],$rrr[0]); continue; } $this->editData($v['id'],['dr_status'=>3,'update_time'=>time()],$v['order_no'],6,3,'dr',$rrr[1],$rrr[0]); } } //建立香港的销售单 标准出库单有源的需要先审核 public function xdlsFourStep($list){ $pre_data = $this->transPrepare(); foreach($list as $k=>$v){ $this->xdlsAfterDetail($v,$pre_data['typeclass'],$pre_data['classid']); } } //审核香港销售单 同时生成标准出库单 public function xdlsFiveStep($list){ $token_140 = $this->getToken(130); // $xs_no_list = array_column($list,'xs_two_no'); echo "
";
// $r = $this->apiyyv1->xscsByordernos($xs_no_list,$token_140);
// var_dump($r);
//创建标准出库单
$v = [
'xs_no'=>'SO2502280046',
'drckbm'=>$this->xdxgls_code,
'list'=>[
[
'dcsl'=>1,
]
]
];
$bzch_res = $this->apiyyv1->bzchCreate($v,$token_140);
var_dump($bzch_res);
die;
if(empty($bzch_res[0]['Data'][0]['m_code'])){
$this->editData($info['zq_u9_id'],['bzch_status'=>-1,'update_time'=>time()],$info['number'],4,1,'bzch',$bzch_res[1],$bzch_res[0]);
return ;
}
//更新销售单数据
$bzch_no = $bzch_res[0]['Data'][0]["m_code"];
$this->editData($info['zq_u9_id'],['bzch_no'=>$bzch_no,'bzch_status'=>1,'update_time'=>time()],$info['number'],4,1,'bzch',$bzch_res[1],$bzch_res[0]);
}
//审核香港标准出库单
public function xdlsSixStep($list){
$token_140 = $this->getToken(130);
foreach($list as $k =>$v){
$bzch_res = $this->apiyyv1->bzchSubmitAndApprove(['number'=>$v['bzch_no']],$token_140);
var_dump($bzch_res);
if(empty($bzch_res[0]['Data'][0]['m_code'])){
$this->editData($v['id'],['bzch_status'=>-1,'update_time'=>time()],$v['order_no'],4,3,'bzch',$bzch_res[1],$bzch_res[0]);
return ;
}
//更新销售单数据
$bzch_no = $bzch_res[0]['Data'][0]["m_code"];
$this->editData($v['id'],['bzch_no'=>$bzch_no,'bzch_status'=>1,'update_time'=>time()],$v['order_no'],4,3,'bzch',$bzch_res[1],$bzch_res[0]);
}
}
//由于调出单生成可能不会申请后实时出现 需要差几分钟再去申请,避免这种错误
//从许昌成品库调出库存到香港临时仓
//创建 调出单 销售单 采购单
//必须先建立许昌成品仓的销售单和调出单 香港仓的采购单 因为u9生成需要时间 然后在进行 审核
public function xdlsBeforeCreate($info,$typeclass,$classid){
$time = time();
$token_130 = $this->getToken(120);
$list = [];
$fpdata = $info['fpdata'];
$fpdata_list = explode(';',trim( $fpdata,';'));
$whlabel_list = explode("|",trim($info['whlabel'],"|"));
$total_goods_num = 0;//订单产品总数量
foreach($whlabel_list as $k=>$v){
$tmp_data = explode("-",trim($v,'-'));
if(isset($tmp_data[1])){
$total_goods_num += $tmp_data[1];
}
}
$avg_price = floor(($info['skje']*1000)/$total_goods_num)/1000;
foreach($fpdata_list as $k=>$v){
$tmp_str = str_replace(array('-163-','-164-','-165-','-166-'),'-',$v);
$tmp_arr = explode('|',trim($tmp_str,'|'));
if(stripos($tmp_arr[0],',') !== false){
$ft = explode(',',$tmp_arr[0]);
$features = explode('-',trim($ft[1],'-'));
$features[] = $ft[0];
}else{
$features = explode('-',trim($tmp_arr[0],'-'));
}
$sku = implode("-",$features);
$tmp_ret = $this->logic_u9tools->getOneU9bm($sku,$classid,$typeclass);
$list[] = [
'jm'=>$tmp_ret['jm'],
'bm'=>$tmp_ret['bm'],
'zh'=>$tmp_ret['zh'],
'final_price'=>$avg_price,//目前先不设置 等后期财务说了再说
'title'=>isset($tmp_arr[1])?$tmp_arr[1]:'无',
'dcsl'=>$tmp_arr[2],
'is_register'=>0,//商品是否被注册 先都当没注册 后面会先确认下
];
}
$shop = $this->shop->read($info['shop']);
if(empty($shop['yyid'])){
//如果没有在u9上设置店铺的组织 那么需要设置
$this->editData($info['zq_u9_id'],['dc_status'=>-1,'update_time'=>time()],$info['number'],1,1,'',[],$this->logic_tools->ret_arr(-1,'店铺没有在u9平台设置参数'));
return ;
}
$dc_params = [
'gys'=>$this->gys,//供应商
'number'=>$info['number'],//erp订单编码
"TransOutDocType_Code"=>"TransOut001",//组织间调拨
"time"=>$time,
'TransferDirection'=>0,//普通
'yyid'=>$shop['yyid'],//来源店铺 这种需要在店铺表中有
'shipremarks'=>$info['shipremarks'],//订单的备注
'dcckbm'=>$this->xdcp_code,//调出仓库编码
'drckbm'=>$this->xdxgls_code,//调入仓库编码
'drzz_code'=>$this->xdxgzzcode,//调入组织Code
'owner_code'=>$this->xdzzcode,//货主组织Code
'ztcode'=>$this->ztcode,//账套
'tb_org_arr'=>$this->tb_org_arr,//要同步的组织列表
'list'=>$list
];
//调出单检测是否存在
$cxdcd_r = $this->apiyyv1->xcDcdByOtherId($dc_params['number'],$token_130);
$ret_data = $cxdcd_r[0]['Data'];
if(isset($ret_data[0])){
$descflexfield_pubdescseg4 = $ret_data[0]['descflexfield_pubdescseg4'];
if($dc_params['number'] == $descflexfield_pubdescseg4){
return ;
}
}
//检测料品是否在u9被添加
$r = $this->checkLp($dc_params,$token_130);
if($r['code'] !=1){
$this->editData($info['zq_u9_id'],['dc_status'=>-1,'update_time'=>time()],$info['number'],1,1,'lpck',$r[1],$r[0]);
return ;
}
//创建调出单
$dcd_res = $this->apiyyv1->dcdCrate($dc_params,$token_130);
if(empty($dcd_res[0]['Data'][0]["Code"])){
$this->editData($info['zq_u9_id'],['dc_status'=>-1,'update_time'=>time()],$info['number'],1,1,'dc',$dcd_res[1],$dcd_res[0]);
return ;
}
//更新
$dcd_no = $dcd_res[0]['Data'][0]["Code"];
$this->editData($info['zq_u9_id'],['dc_no'=>$dcd_no,'dc_status'=>1,'update_time'=>time()],$info['number'],1,1,'dc',$dcd_res[1],$dcd_res[0]);
//创建许昌成品库的销售单
$xsd_res = $this->apiyyv1->xsdCreate($dc_params,$token_130);
if(empty($xsd_res[0]['Data']['m_code'])){
$this->editData($info['zq_u9_id'],['xc_status'=>-1,'update_time'=>time()],$info['number'],2,1,'xs',$xsd_res[1],$xsd_res[0]);
return ;
}
//更新销售单数据
$xs_no = $xsd_res[0]['Data'][0]["m_code"];
$this->editData($info['zq_u9_id'],['xs_no'=>$xs_no,'xc_status'=>1,'update_time'=>time()],$info['number'],2,1,'xs',$xsd_res[1],$xsd_res[0]);
//创建香港公司的采购单
$token_140 = $this->getToken(120);
$cgd_res = $this->apiyyv1->cgdCreate($dc_params,$token_140);
if(empty($cgd_res[0]['Data'][0]["Code"])){
$this->editData($info['zq_u9_id'],['cg_status'=>-1,'update_time'=>time()],$info['number'],3,1,'cg',$cgd_res[1],$cgd_res[0]);
return ;
}
$this->editData($info['zq_u9_id'],['cg_no'=>$xs_no,'cg_status'=>1,'update_time'=>time()],$info['number'],3,1,'cg',$cgd_res[1],$cgd_res[0]);
return ;
}
// 提交审核调出单调出单
public function dcSubAndCheck($info){
$token_130 = $this->getToken(120);
$r = $this->apiyyv1->dcdSubmit([
'number'=>$info['dc_no']
],$token_130);
if(!$r[0]['Data'][0]['IsSucess']){
$this->editData($info['id'],['dc_status'=>-2,'update_time'=>time()],$info['order_no'],1,2,'dc',$r[1],$r[0]);
return false;
}
//更新调出单
$this->editData($info['id'],['dc_status'=>2,'update_time'=>time()],$info['order_no'],1,2,'dc',$r[1],$r[0]);
$rr = $this->apiyyv1->dcdApprove([
'number'=>$info['dc_no']
],$token_130);
if(!$rr[0]['Data'][0]['IsSucess']){
$this->editData($info['id'],['dc_status'=>-3,'update_time'=>time()],$info['order_no'],1,3,'dc',$rr[1],$rr[0]);
return false;
}
$this->editData($info['id'],['dc_status'=>3,'update_time'=>time()],$info['order_no'],1,3,'dc',$rr[1],$rr[0]);
return true;
}
//提交审核采购单
public function cgSubAndCheck($info){
$token_140 = $this->getToken(120);
$r = $this->apiyyv1->cgdSubmit([
'number'=>$info['cg_no']
],$token_140);
if(!$r[0]['Data'][0]['IsSucess']){
$this->editData($info['id'],['cg_status'=>-2,'update_time'=>time()],$info['order_no'],3,2,'cg',$r[1],$r[0]);
return false;
}
//更新采购单
$this->editData($info['id'],['cg_status'=>2,'update_time'=>time()],$info['order_no'],3,2,'cg',$r[1],$r[0]);
$rr = $this->apiyyv1->cgdApprove([
'number'=>$info['cg_no']
],$token_140);
if(!$rr[0]['Data'][0]['IsSucess']){
$this->editData($info['id'],['cg_status'=>-3,'update_time'=>time()],$info['order_no'],3,3,'cg',$rr[1],$rr[0]);
return false;
}
$this->editData($info['id'],['cg_status'=>3,'update_time'=>time()],$info['order_no'],3,3,'cg',$rr[1],$rr[0]);
return true;
}
//提交审核销售单
public function xsSubAndCheck($info){
$token_130 = $this->getToken(120);
$r = $this->apiyyv1->xsdSubmit([
'number'=>$info['xs_no']
],$token_130);
if(!$r[0]['Data'][0]['m_isSucess']){
$this->editData($info['id'],['xs_status'=>-2,'update_time'=>time()],$info['order_no'],2,2,'xs',$r[1],$r[0]);
return false;
}
$this->editData($info['id'],['xs_status'=>2,'update_time'=>time()],$info['order_no'],2,2,'xs',$r[1],$r[0]);
$rr = $this->apiyyv1->xsdApprove([
'number'=>$info['xs_no']
],$token_130);
if(!$rr[0]['Data'][0]['m_isSucess']){
$this->editData($info['id'],['xs_status'=>-3,'update_time'=>time()],$info['order_no'],2,3,'xs',$rr[1],$rr[0]);
return false;
}
$this->editData($info['id'],['xs_status'=>3,'update_time'=>time()],$info['order_no'],2,3,'xs',$rr[1],$rr[0]);
return true;
}
//建立销售单 和出货单
public function xdlsAfterDetail($info,$typeclass,$classid){
$time = time();
$token_140 = $this->getToken(130);
$list = [];
$fpdata = $info['fpdata'];
$fpdata_list = explode(';',trim( $fpdata,';'));
$whlabel_list = explode("|",trim($info['whlabel'],"|"));
$total_goods_num = 0;//订单产品总数量
foreach($whlabel_list as $k=>$v){
$tmp_data = explode("-",trim($v,'-'));
if(isset($tmp_data[1])){
$total_goods_num += $tmp_data[1];
}
}
$avg_price = floor(($info['skje']*1000)/$total_goods_num)/1000;
foreach($fpdata_list as $k=>$v){
$tmp_str = str_replace(array('-163-','-164-','-165-','-166-'),'-',$v);
$tmp_arr = explode('|',trim($tmp_str,'|'));
if(stripos($tmp_arr[0],',') !== false){
$ft = explode(',',$tmp_arr[0]);
$features = explode('-',trim($ft[1],'-'));
$features[] = $ft[0];
}else{
$features = explode('-',trim($tmp_arr[0],'-'));
}
$sku = implode("-",$features);
$tmp_ret = $this->logic_u9tools->getOneU9bm($sku,$classid,$typeclass);
$list[] = [
'jm'=>$tmp_ret['jm'],
'bm'=>$tmp_ret['bm'],
'zh'=>$tmp_ret['zh'],
'final_price'=>$avg_price,//目前先不设置 等后期财务说了再说
'title'=>isset($tmp_arr[1])?$tmp_arr[1]:'无',
'dcsl'=>$tmp_arr[2],
'is_register'=>0,//商品是否被注册 先都当没注册 后面会先确认下
];
}
$shop = $this->shop->read($info['shop']);
if(empty($shop['yyid'])){
//如果没有在u9上设置店铺的组织 那么需要设置
$this->editData($info['zq_u9_id'],['dc_status'=>-1,'update_time'=>time()],$info['number'],1,1,'',[],$this->logic_tools->ret_arr(-1,'店铺没有在u9平台设置参数'));
return ;
}
$dc_params = [
'gys'=>$this->gys,//供应商
'number'=>$info['number'],//erp订单编码
"TransOutDocType_Code"=>"TransOut001",//组织间调拨
"time"=>$time,
'TransferDirection'=>0,//普通
'yyid'=>$shop['yyid'],//来源店铺 这种需要在店铺表中有
'shipremarks'=>$info['shipremarks'],//订单的备注
'dcckbm'=>$this->xdcp_code,//调出仓库编码
'drckbm'=>$this->xdxgls_code,//调入仓库编码
'drzz_code'=>$this->xdxgzzcode,//调入组织Code
'owner_code'=>$this->xdzzcode,//货主组织Code
'ztcode'=>$this->ztcode,//账套
'tb_org_arr'=>$this->tb_org_arr,//要同步的组织列表
'list'=>$list
];
//创建许昌成品库的销售单
$xsd_res = $this->apiyyv1->xsdCreate($dc_params,$token_140);
if(empty($xsd_res[0]['Data'][0]['m_code'])){
$this->editData($info['zq_u9_id'],['xs_two_status'=>-1,'update_time'=>time()],$info['number'],7,1,'xs_two',$xsd_res[1],$xsd_res[0]);
return ;
}
//更新销售单数据
$xs_no = $xsd_res[0]['Data'][0]["m_code"];
$this->editData($info['zq_u9_id'],['xs_two_no'=>$xs_no,'xs_two_status'=>1,'update_time'=>time()],$info['number'],7,1,'xs_two',$xsd_res[1],$xsd_res[0]);
}
//检查u9编码是否存在 如果不存在 请先添加并
protected function checkLp($info,$token){
//未注册的货品的列表
$unregister_goods = [];
// $info['list'][1]['jm'] ="9A-#NB-STW-20-FP-5*5C-C-180%-ww2";
// $info['list'][1]['zh'] ="测试数据请删除2--".$info['list'][1]['zh'];
// $info['list'][0]['jm'] ="9A-#NB-STW-22-ww2";
// $info['list'][0]['zh'] ="测试数据请删除2--".$info['list'][0]['zh'];
$r = $this->apiyyv1->cxLp($info['list'],$token);
if(!$r[0]['Success']){
return $this->logic_tools->ret_arr(-1,'查询商品信息异常'.json_encode($r,JSON_UNESCAPED_UNICODE));
}
foreach($r[0]['Data'] as $k=>$v)
{
foreach($info['list'] as $kk => $vv){
if($v['m_code'] == $vv['jm']){
$info['list'][$kk]['is_register'] = 1;
}
}
}
foreach($info['list'] as $k => $v){
if($v['is_register'] == 0){
$unregister_goods[] = $v;
}
}
if(empty($unregister_goods)){
return $this->logic_tools->ret_arr(1,"料品无异常");
}
$tb_info = $info;
$tb_info['list'] = $unregister_goods;
return $this->tjLpAndTb($tb_info,$token);
}
//添加料品并且下发
public function tjLpAndTb($tb_info,$token){
$r = $this->apiyyv1->cjLp($tb_info['list'],$token);
if($r[0]["Success"]){
$rr = $this->apiyyv1->tbLp($tb_info,$token);
if($rr[0]['Success']){
return $this->logic_tools->ret_arr(1,$rr);
}else{
return $this->logic_tools->ret_arr(-1,$rr);
}
}else{
return $this->logic_tools->ret_arr(-1,$r);
}
}
//根据返回的状态修改对应的值
protected function editData($zq_u9_id,$z_qu_arr,$number,$one_type,$two_type,$apply_api,$apply_data,$ret_data){
$this->zzquque_u9->save($z_qu_arr,$zq_u9_id);
$this->zzququeu9_logs->insert([
'oid'=>$zq_u9_id,
'number'=>$number,
'one_type'=>$one_type,
'two_type'=>$two_type,
'apply_api'=>$apply_api,
'apply_data'=>json_encode($apply_data,JSON_UNESCAPED_UNICODE),
'ret_data'=>json_encode($ret_data,JSON_UNESCAPED_UNICODE),
'create_time'=>time(),
'read_time'=>date("Y-m-d H:i:s")
]);
}
}